Docker环境应急响应
使用Docker部署的业务被攻击者拿下,主机安全无法穿透查看详情,我们在主机上执行命令
#netstat -ntlp
发现根本无法查看容器内的网络连接,如何查找?
查找失陷容器:
我们知道,当宿主机上部署容器时,会生成虚拟网卡,容器都是通过dokcer0来进行通信,因此,可以通过tcpdump找到异常网络连接的容器IP地址,然后进一步关联到容器。
#tcpdump -i docker0 dst host xx.xx.xx.xx -v
如果知道异常连接的IP是哪一个,执行命令后基本上就定位到具体发生安全事件的容器使用的私网IP了。
但是如果不清楚恶意IP,只是接到了容器的宿主机,就需要执行
#docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
获取宿主机所有容器名称及其私网IP地址。
显然,该命令配合grep+IP,也可以定位到具体连接异常IP的容器。
容器进行深度排查:
查看镜像:
#docker ps
进入镜像:
#docker exec -it <docker_name> /bin/bash
查看进程:
#ps aux
检查文件变化:
#docker diff <docker_name> | grep .sh
使用docker diff命令可以找出容器内文件状态变化。备注:三种状态A - Add, D - Delete, C - Change
在真实应急中,还应当检查容器是运行中被攻击还是拉取了含有恶意的镜像
查看指定镜像的历史创建信息
#docker history <docker_name> --no -trunc
查看docker里的配置信息和镜像在磁盘中的运行路径
#docker inspect --format=‘{{.GraphDriver.Data.LowerDir}}’
失陷容器应急:
暂停镜像:
#docker pause <容器ID>
如无价值,无需后续排查,直接删除
删除恶意镜像:
#docker ps -a|grep <IMAGE_NAME>
#docker rm -f
#docker rmi <IMAGE_NAME>
保留现场:
使用docker commit,用于将被入侵的容器来构建镜像 ,同时对正在运行的容器断网
将运行中的容器与用户定义的网桥断开连接
#docker network disconnect bridge <docker_name>
禁用veth
#docker exec -it <docker_name> cat /sys/class/net/eth0/iflink
-->ID
#ip link show |grep ID
--ID : vethbf5239e@if28: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
#ip link set vethbf5239e down