这是一个用于检测Docker API安全漏洞的Python扫描器。
-
--pratt [PRATT]下载指定镜像(默认:alpine,推荐体积小),会留下镜像痕迹,下载成功不就不要换镜像使用了。格式:--pratt <镜像名>或--pratt -
--shell返回容器里的bash(一些镜像可能没有bash,会采用sh,如果都没有那建议用alpine)此容器内的shell连接了宿主机的物理卷
-
未授权访问漏洞
- 检测Docker API端点是否可以被未授权访问
- 测试的端点包括:/version, /info, /containers/json, /images/json等
-
容器逃逸漏洞
- 检测是否可以创建特权容器
- 测试主机目录挂载权限
-
镜像拉取权限
- 检测是否可以拉取Docker镜像
- 可能导致资源消耗攻击
-
容器创建权限
- 检测是否可以创建Docker容器
- 可能导致资源滥用
-
网络访问权限
- 检测是否可以创建Docker网络
- 可能导致网络隔离绕过
-
卷访问权限
- 检测是否可以创建Docker卷
- 可能导致数据泄露
-
Swarm集群访问
- 检测Swarm集群信息泄露
- 包含加入令牌等敏感信息
-
敏感信息泄露
- 检测系统信息中的敏感字段
- 如DriverStatus、SystemStatus等
pip install requests# 扫描默认端口2375
python dk.py 192.168.1.100
# 指定端口
python dk.py 192.168.1.100 -p 2376
&&
python dk.py 192.168.1.100 -p 2376-2380
# 使用TLS连接(自动切换到2376端口)
python dk.py 192.168.1.100 --tls
# 设置超时时间
python dk.py 192.168.1.100 -t 15
# 设置并发线程数
python dk.py 192.168.1.100 --threads 10
# 扫描并下载镜像
python docker.py 192.168.1.100 -p 2375-2380 --pratt
# 扫描并获取shell
python docker.py 192.168.1.100 -p 2375-2380 --shell
# 使用指定镜像
python docker.py 192.168.1.100 -p 2375-2380 --pratt ubuntu --shelltarget: 目标IP地址或域名(必需)-p, --port: Docker API端口(默认: 2375)-t, --timeout: 请求超时时间(默认: 10秒)--threads: 并发线程数(默认: 5)--tls: 使用TLS连接(端口2376)--pratt [PRATT]: 镜像测试攻击准备--shell: 返回容器的shell,存在特殊权限
[2024-01-15 10:30:00] [INFO] 开始扫描目标: 192.168.1.100:2375
[2024-01-15 10:30:01] [INFO] 成功连接到Docker API: http://192.168.1.100:2375/version
[2024-01-15 10:30:02] [VULNERABILITY] 发现未授权访问漏洞: /info
[2024-01-15 10:30:03] [VULNERABILITY] 发现容器创建漏洞: 可以创建容器
[2024-01-15 10:30:04] [INFO] 完成 未授权访问 扫描,发现 3 个漏洞
============================================================
Docker API 漏洞扫描报告
============================================================
目标: 192.168.1.100:2375
扫描时间: 2024-01-15 10:30:05
发现漏洞总数: 5
------------------------------------------------------------
【未授权访问】 - 3 个
1. 端点 /info 可以被未授权访问
端点: /info
URL: http://192.168.1.100:2375/info
状态码: 200
【容器创建】 - 1 个
1. 可以创建Docker容器,可能导致资源滥用
端点: /containers/create
URL: http://192.168.1.100:2375/containers/create
状态码: 201
【敏感信息泄露】 - 1 个
1. 系统信息中包含敏感字段: DriverStatus
端点: /info
URL: http://192.168.1.100:2375/info
状态码: 200
-
启用TLS加密
# 在Docker守护进程配置中启用TLS dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376 -
配置认证
# 使用证书认证 dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376 -
限制网络访问
# 只允许本地访问 dockerd -H unix:///var/run/docker.sock
{
"hosts": ["unix:///var/run/docker.sock"],
"tls": true,
"tlsverify": true,
"tlscacert": "/path/to/ca.pem",
"tlscert": "/path/to/server-cert.pem",
"tlskey": "/path/to/server-key.pem"
}- 合法使用: 请确保您有权限扫描目标系统
- 测试环境: 建议在测试环境中使用
- 资源清理: 扫描器会自动清理测试过程中创建的容器、网络和卷
- 报告保存: 扫描报告会自动保存为JSON文件
A: 检查目标是否开启了Docker API,默认端口是2375(HTTP)或2376(HTTPS)
A: 可以增加并发线程数:--threads 10
A: 可以编写脚本循环调用扫描器
本工具仅用于安全测试和漏洞评估。使用者需要确保:
- 获得目标系统的授权
- 遵守相关法律法规
- 不用于恶意攻击
MIT License