Aqua的Nautilus团队发现了一个令人印象深刻的行动,该行动旨在劫持资源,用来“挖矿”获取加密货币。其主要针对几个SaaS软件开发环境(包括Docker Hub,GitHub,Travis CI和Circle CI),滥用它们的自动化构建过程。
幸运的是,Nautilus团队的研究人员有时会使用Aqua Dynamic Threat Analysis(DTA)在Docker Hub上扫描伪装的映像,并且能够在该活动开始的几个小时内对其进行检测和调查。随后,其研究团队会通知受到影响的服务提供商关于此攻击的详细信息。
1
精心策划的“闪电战”行动
这个活动的基础架构由11个GitHub用户组成,他们创建了51个GitHub项目,并把这些项目伪装成流行的软件项目(如nginx, okular, openssh, openvpn, seahorse, nautilus, zookeeper等)。同样他们也使用流行软件的名称创建了56个Docker Hub账户。 所有这些都发生在短短几个小时内。在构建过程中,这些映像还继续从一个GitHub存储库下载挖矿程序。所有56个Docker Hub映像在创建后的几个小时内都被检测到了。基于这些发现,Nautilus团队的研究人员将这些联系起来,从而揭示了整个攻击链。
所有映像均会下载一个名为GCC的文件,该文件被VirusTotal标记为恶意文件。
攻击者将二进制文件命名为“ GCC”,以便将PUA(不欢迎的应用程序)伪装成编译器系统(GNU compiler Collection-GCC是一个编译器系统,它是一个与很多Linux有关的项目(包括Linux内核)的关键组件)。
2
一种新型加密货币攻击方式
有趣的是,攻击者正在滥用GitHub,Docker Hub,Travis CI和Circle CI的基本服务。虽然原作者团队曾观察到其他利用公共映像,滥用容器运行时环境,进行供应链攻击的活动,但是在这个新的活动中,构建过程本身的基础设施也在被滥用。
这些映像建立在这些服务提供商的环境上,然后劫持其资源以挖掘加密货币。Dockerfile中复杂的构建机制如下:
-
使用Ubuntu基础镜像.
-
将“/workdir ”设置为工作目录。
-
下载安装工具CURL。
-
使用 CURL,从GitHub下载假冒的 GCC 程序(实际上是挖矿程序)和挖矿需要用到的配置文件。
-
Docker.sh 被复制到工作目录并执行。 Docker.sh 的功能如下:
-
根据配置文件,执行假冒的 GCC (挖矿程序)。
-
当挖矿程序运行的时候,Github的仓库也被下载下来。
-
从这个仓库里面随机选取两个文件,替换文件的内容。
-
然后将这个随机的改动提交保存。
-
这个仓库再被上传到Github。
-
PUA 程序被删除。
-
在CMD里运行git 。
在提取和运行映像时会失败,因为CMD提示需要使用bash命令运行JSON文件。
从创建这些项目和容器映像开始,它们每个都提交了成千上万次的代码更改。每次提交都通过上述服务执行构建过程,并且在每次构建时,都会执行一次挖矿程序。此次行动三天时间内就在GitHub上累积了超过23.3万个提交量,在Docker Hub上累积了5.8万个提交量,转化为大约3万个Monero挖矿会话。目前,Docker Hub将自动构建的持续时间限制在两小时以内,这给攻击者留下了大量时间来使用此功能。
攻击者可能正在尝试尽可能多地使用此功能。这种活动可以很容易地被修改成攻击无辜的终端用户(如开发人员、DevOps)。如果攻击者改变CMD来执行miner,则此次活动可以针对任何下载这些映像的人。
3
总结
这次行动是攻击者不断发挥创造力的又一例证。他们坚持不懈地追求可重用的云计算资源。这也提醒我们,云中的开发环境与生产环境一样容易受到攻击,有时因为没有得到同级别的安全防护甚至更容易受到攻击。
原作者建议此类环境应有严格的访问控制、身份验证和最低的运行权限,还应持续监视和限制出站网络连接,以防止数据被盗和资源滥用。
4
威胁指标 (IOCs)
11 GitHub users:
https[:]//github[.]com/alisa-smirnova
https[:]//github[.]com/amelia-popa
https[:]//github[.]com/evgeny-vinogradov
https[:]//github[.]com/matias-garcia-projectmanager
https[:]//github[.]com/olafur-berndsen
https[:]//github[.]com/oliver-ward
https[:]//github[.]com/rawiri-martin
https[:]//github[.]com/sophie-zhang-accountant
https[:]//github[.]com/tom-muller
https[:]//github[.]com/william-jonsson
https[:]//github[.]com/markel-sanz
56 Docker Hub accounts:
hub.docker.com/r/digitaltelegramdesktopi/telegram-desktop/builds
hub.docker.com/r/gnatlinki/gnat/builds
hub.docker.com/r/nginxclearr/nginx/builds
hub.docker.com/r/waylandfreex/wayland/builds
hub.docker.com/r/majawozniakx/babl/builds
hub.docker.com/r/dovecotbugfixb/dovecot/builds
hub.docker.com/r/okularrustz/okular/builds
hub.docker.com/r/zookeeperprimaryr/zookeeper/builds
hub.docker.com/r/kristiandimitrovz/mc/builds
hub.docker.com/r/bugfixxena/xen/builds
hub.docker.com/r/fontforgeshv/fontforge/builds
hub.docker.com/r/ameliapopaf/mosquitto/builds
hub.docker.com/r/x64stracea/strace/builds
hub.docker.com/r/cupsforka/cups/builds
hub.docker.com/r/oliverwardi/ghc/builds
hub.docker.com/r/advsqlitebrowserz/sqlitebrowser/builds
hub.docker.com/r/sqlitemuxv/sqlite/builds
hub.docker.com/r/lincgdbr/cgdb/builds
hub.docker.com/r/gegltrued/gegl/builds
hub.docker.com/r/packseahorseb/seahorse/builds
hub.docker.com/r/comgitta/git/builds
hub.docker.com/r/bugfixedpostgresqlcommx/postgresql-common/builds
hub.docker.com/r/jetgnatz/gnat/builds
hub.docker.com/r/vimsilveri/vim/builds
hub.docker.com/r/geglrusti/gegl/builds
hub.docker.com/r/licbashf/bash/builds
hub.docker.com/r/shellpopplerf/poppler/builds
hub.docker.com/r/sqlitebrowseradvf/sqlitebrowser/builds
hub.docker.com/r/evinceprimer/evince/builds
hub.docker.com/r/x86binwalkr/binwalk/builds
hub.docker.com/r/advancedgnomecolormanb/gnome-color-manager/builds
hub.docker.com/r/evgenyvinogradovb/systemd/builds
hub.docker.com/r/musladvancedr/musl/builds
hub.docker.com/r/okularprimaryr/okular/builds
hub.docker.com/r/olafurberndsenr/openssh/builds
hub.docker.com/r/rawirimartinv/evince/builds
hub.docker.com/r/portablepulseaudioa/pulseaudio/builds
hub.docker.com/r/tommullern/libjpeg-turbo/builds
hub.docker.com/r/forkedcupsn/cups/builds
hub.docker.com/r/freemusln/musl/builds
hub.docker.com/r/largemcn/mc/builds
hub.docker.com/r/shsyslogngn/syslog-ng/builds
hub.docker.com/r/muxsyslogngb/syslog-ng/builds
hub.docker.com/r/binwalkforkedf/binwalk/builds
hub.docker.com/r/flosscairov/cairo/builds
hub.docker.com/r/rcnautilusa/nautilus/builds
hub.docker.com/r/zookeeperx64b/zookeeper/builds
hub.docker.com/r/cmpeogp/eog/builds
hub.docker.com/r/fontforgecommonr/fontforge/builds
hub.docker.com/r/matiasgarciab/seahorse/builds
hub.docker.com/r/sophiezhanga/cairo/builds
hub.docker.com/r/openvpnlinkp/openvpn/builds
hub.docker.com/r/bablx8664l/babl/builds
hub.docker.com/r/cmddbusl/dbus/builds
hub.docker.com/r/ffmpeglicl/ffmpeg/builds
hub.docker.com/r/licgittl/git/builds
51 GitHub repositories:
https://github.com/goldendict-lib/goldendict
https://github.com/int-mpv/mpv
https://github.com/large-mc/mc
https://github.com/lic-bash/bash
https://github.com/lin-cgdb/cgdb
https://github.com/musl-advanced/musl
https://github.com/mux-syslog-ng/syslog-ng
https://github.com/nginx-beautiful/nginx
https://github.com/nginx-clear/nginx
https://github.com/okular-primary/okular
https://github.com/openvpn-link/openvpn
https://github.com/pack-seahorse/seahorse
https://github.com/portable-pulseaudio/pulseaudio
https://github.com/rc-nautilus/nautilus
https://github.com/sh-syslog-ng/syslog-ng
https://github.com/shell-poppler/poppler
https://github.com/sqlite-mux/sqlite
https://github.com/sqlitebrowser-adv/sqlitebrowser
https://github.com/vim-silver/vim
https://github.com/wayland-adv/wayland
https://github.com/x86-binwalk/binwalk
https://github.com/zookeeper-x64/zookeeper
https://github.com/licgitt/git
https://github.com/alisa-smirnova/cgdb
https://github.com/amelia-popa/mosquitto
https://github.com/evgeny-vinogradov/systemd
https://github.com/matias-garcia-projectmanager/seahorse
https://github.com/olafur-berndsen/openssh
https://github.com/oliver-ward/ghc
https://github.com/rawiri-martin/evince
https://github.com/william-jonsson/eog
本文为CNTIC编译,不代表本公众号观点,转载请保留出处与链接。
联系信息进入公众号后点击“论坛信息”可见。
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论