社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker 容器入侵排查

Bypass • 2 年前 • 429 次点击  

随着越来越多的应用程序运行在容器里,各种容器安全事件也随之发生,例如攻击者可以通过容器应用获取容器控制权,利用失陷容器进行内网横向,并进一步逃逸到宿主机甚至攻击K8s集群。

容器的运行环境是相对独立而纯粹,当容器遭受攻击时,急需对可疑的容器进行入侵排查以确认是否已失陷,并进一步进行应急处理和溯源分析找到攻击来源。在应急场景下,使用docker命令可以最大程度利用docker自身的特性,快速的获取相关信息而无需进入容器内部,帮助我们进行溯源分析和解决问题。


1.1 检查容器运行情况

使用docker ps  查看当前运行的容器,创建时间、运行状态、端口映射。

[root@ecs-t /]# docker psCONTAINER ID   IMAGE                          COMMAND                  CREATED             STATUS             PORTS                          NAMESb06352ff26cc   sagikazarmark/dvwa             "/run.sh"                About an hour ago   Up About an hour   3306/tcp, 0.0.0.0:81->80/tcp   dvwa

1.2 检查运行容器详细信息

使用docker inspect来获取容器的详细信息。

//获取容器名docker inspect -f {{.Name}}  dvwa  
//获取容器网络的相关信息docker inspect -f {{.NetworkSettings}} dvwa docker inspect -f {{.NetworkSettings.IPAddress}} dvwa
//目录在宿主机的具体挂载位置docker inspect -f="{{json .Mounts}}" dvwa docker inspect -f "{{range .Mounts}} {{println .Source .Destination}} {{end}}" dvwa
//查看网络信息docker inspect -f="{{json .NetworkSettings}}" dvwa

1.3 检查容器资源的使用情况

使用docker stats 查看容器的CPU、内存、网络 I/O等情况,以确认是否存在资源异常的情况。

[root@ecs-t /]# docker stats dvwa
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDSb06352ff26cc dvwa 0.00% 76.21MiB / 3.686GiB 2.02% 23.6kB / 57.6kB 24.1MB / 67.7MB 27

1.4 检查容器中进程信息

使用docker top 查看容器中的进程信息,通过PID/PPID/CMD等信息来辅助定位异常进程。

如下图:java父进程(PID:84010)触发bash反弹shell的子进程(PID:84281)。


1.5  查看容器中日志

使用docker logs查看容器日志,并通过关键字定位异常信息位置。

如下图:通过特征关键字找到可疑的jndi请求。

1.6 查看容器中的文件变化

使用docker diff命令可以找出容器内文件状态变化。备注:三种状态(A - Add, D - Delete, C - Change )。

如下图:通过新增文件目录快速定位webshell文件。


1.7 失陷容器应急处理

确认容器失陷后,一般我们可以采取暂停容器、隔离容器甚至杀死容器的方式来做紧急处理。

(1)使用docker pause,暂停容器中所有的进程。

(2)使用docker commit,用于将被入侵的容器来构建镜像,从而保留现场痕迹,以便溯源。

(3)将正在运行的Docker容器禁用网络。

//将运行中的容器与用户定义的网桥断开连接[root@localhost ~]#docker network disconnect bridge 
//禁用veth[root@localhost ~]#docker exec -it cat /sys/class/net/eth0/iflink29[root@localhost ~]#ip link show |grep 2929: vethbf5239e@if28: mtu 1500 qdisc noqueue masteefault [root@localhost ~]# ip link set vethbf5239e down

(4)使用docker kill 杀掉运行中的容器。

docker kill -s KILL <container-name>

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/156346
 
429 次点击