针对docker系统的渗透测试方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了针对docker系统的渗透测试方法相关的知识,希望对你有一定的参考价值。
参考技术A 翻译总结于:《A Methodology for Penetration Testing Docker Systems》文章从两个攻击模型进行分析,结合错误配置和已知漏洞对docker渗透测试进行总结归纳,并给出了一份docker渗透测试检查清单。
作者讨论了两种情况:在容器内和在容器外。在容器内部,攻击者会聚焦在逃逸隔离(即容器逃逸)。在容器外部,即宿主机上,攻击者还没有主机特权,这时候攻击者将会使用Docker(即Docker daemon攻击)来获得权限。
容器逃逸重点在攻击和绕过隔离和保护机制,其中又可分成两种:一种是从容器逃逸到主机(CVE-2017-7308),另一种是从容器逃逸到另一个容器获取其中数据。
作者从错误配置和安全漏洞两个角度对上述两个场景中的安全问题进行了梳理。漏洞问题是自身程序问题,错误配置更多的是用户使用问题。
前两个错误配置与在主机上执行的Docker Daemon有关,其他错误配置与从容器内执行的容器逃逸攻击有关。
(2)可读写的Docker Socket:一些管理员设置了所有用户的读写权限,给了所有用户Docker Daemon的权限,尽管用户不在docker group也能使用docker。
(3)setuid bit:系统管理员在docker二进制文件上设置setuid位。setuid位是Unix中的权限位,它允许用户运行二进制文件而不是其本身作为二进制文件的所有者。如果为docker二进制文件错误配置了setuid位,那么用户将能够以root身份执行docker。
(1)Container Escape Using the Docker Socket:如果/var/run/docker.sock作为volume挂载到容器上,那么容器中的进程可以完全访问主机上的docker。
(2)Sensitive Information:当容器可以访问/var/run/docker.sock时,用户可以查看现有容器的配置,其中可能包含一些敏感信息。
(3)Remote Access:如果没有配置docker API只监听本地主机,那么网络上的每个主机都可以访问docker,攻击者可以利用这种错误配置启动其他容器。
文章中列举了一些最近的且已完全公开的可能在渗透测试期间使用的bug。
(1)CVE-2019-16884
(2)CVE-2019-13139
(3)CVE-2019-5736
(4)CVE-2019-5021
(5)CVE-2018-15664
(6)CVE-2018-9862
(7)CVE-2016-3697
首先需要对目标系统执行侦查来收集数据,然后使用收集到的信息来识别弱点和漏洞。
(2)识别容器的操作系统(或者Docker镜像)
(3)识别主机操作系统:因为容器使用宿主的内核,所以可以使用内核版本来标识宿主信息,从而检测一些内核利用。
(4)读环境变量:环境变量是启动容器时与容器通信信息的一种方式。当一个容器启动时,环境变量被传递给它,这些变量通常包含密码和其他敏感信息。
(5)检查Capabilities:通过查看/proc/self/status来查看容器的内核功能。其中CapEff是当前功能的值,可以使用capsh工具从十六进制值获取功能列表。可以使用这个来检查是否有可以用来容器逃逸的功能。
(6)检查特权模式:如果容器以特权模式运行,它将获得所有功能,因此可以通过查看能力(0000003fffffffff是所有能力的表示)来检查是否以特权模式运行进程。
(7)检查volumes:卷中可能包含敏感信息,可以通过查看挂载的文件系统位置来查看。
(8)检查挂载的docker socket
(9)检查网络配置
(2)拥有docker使用权限的用户
(3)配置:/etc/docker/daemon或/etc/default/docker
(4)可获得的镜像和容器
(5)iptables规则:使用 iptables -vnL 和 iptables -t nat -vnL,可以看到默认表filter和nat的规则。所有关于docker容器的防火墙规则都在filter中的docker -user链中设置。
以上是关于针对docker系统的渗透测试方法的主要内容,如果未能解决你的问题,请参考以下文章