引言StripedFly,它是一個加密貨幣挖礦軟件,躲在一個支持Linux和Windows的複雜模塊化框架後面。它配備內置的TOR網絡隧道,用於與指揮(C2)服務器聯繫,還有通過可信賴的服務(如GitLab、GitHub和Bitbucket)進行更新和交付的功能,這一切使用自定義加密歸檔。攻擊者煞費苦心來構建這個框架,披露的真相頗為驚人。
它是如何開始的? 2022年,在Equation惡意軟件中發現的舊代碼的WININIT.EXE進程中遇到了兩個驚人的發現,隨後的分析揭示了可追溯到2017年的早期可疑代碼。在此期間,它成功逃避了分析,之前被誤歸類為加密貨幣挖礦軟件。然而,這不是其主要目標。
我們決定全面分析收集的樣本,只想排除任何不確定因素,這個加密貨幣挖礦軟件是一個極龐大實體的一部分。該惡意軟件使用了定制的EternalBlue SMBv1漏洞來滲入受害者的系統。重要的是,我們的調查剖析了二進制時間戳,表明這個漏洞是在2017年4月之前創建的。值得一提的是,EternalBlue漏洞是Shadow Brokers組織於2017年4月14日公開披露的。
這個特殊蠕蟲與其他使用EternalBlue的惡意軟件的區別在於其獨特的傳播模式。它悄無聲息地傳播,因而避免了大多數安全解決方案的檢測。本文現在簡要概述我們的發現結果。
感染第一個檢測到的shellcode位於WININIT.EXE進程中,該進程能夠從bitbucket[.]org下載二進製文件,並執行PowerShell腳本。最初檢測出來時,感染途徑是未知的;然而,隨著調查逐步深入開展,我們發現了一個與EternalBlue非常相似的SMBv1漏洞。
內核shellcode通過漏洞利用代碼將另外的shellcode注入到用戶空間中,然後部署載荷,其中包括一個具有插件式可擴展功能的框架以及一個超輕量級的TOR網絡客戶軟件。一旦這個過程完成,大門被永久封住,惡意軟件進而禁用了受感染系統上的SMBv1協議。
蠕蟲功能試圖在本地網絡中傳播,不僅僅依賴漏洞,還依賴SSH協議,使用在受害者機器上找到的密鑰。
圖1. Windows主機上的感染流程
實現持久性為了實現持久性,惡意軟件採用了各種方法。其行為取決於PowerShell解釋器的可用性和授予該進程的特權。該惡意軟件通常在通過漏洞安裝時以管理權限運行,而在通過Cygwin SSH服務器投放時以用戶級權限運行。
如果PowerShell不存在,惡意軟件用MZ-PE加載程序生成一個隱藏文件,其隨機名稱位於%APPDATA%目錄中。該加載程序包括system.img的副本,並隨後在Windows註冊表項Software\Microsoft\Windows\CurrentVersion\Run中以類似GUID的名稱註冊。
如果安裝了PowerShell,其行為將因是否有管理訪問權而異。如果有管理權限,它執行一個PowerShell腳本,該腳本創建兩個具有類似GUID的名稱和不同觸發器的任務調度器項。這些任務的動作由PowerShell加載腳本運行。
如果沒有管理權限,PowerShell腳本加載程序(開頭和末尾被數千個空格包圍)被放置在HKCU\Software\Microsoft\Windows\CurrentVersion\Applets註冊表項中,然後使用以下命令將其註冊到HKCU\Software\Microsoft\Windows\CurrentVersion\Run項中:
圖2
在PowerShell存在的兩種情況下,惡意軟件歸檔本身的主體存儲在註冊表項Software\Microsoft\Windows\CurrentVersion\Shell中,Base64編碼,由數百個空格包圍,並由上述PowerShell啟動
在Linux主機上,惡意軟件進程隱藏在名稱(sd-pam)下。有眾多方法來實現持久性:可以是系統或用戶systemd服務、自動啟動的.desktop文件,或在合適的/etc/rc*、profile、bashrc或inittab文件中的另一行。惡意軟件可執行文件以隨機名稱放置在/tmp目錄下。
Bitbucket存儲庫為了力求初始漏洞利用工具小巧化,所有可卸載的內容都封裝在加密和壓縮的自定義二進制歸檔中。這個歸檔謹慎地託管在合法網站上,巧妙地偽裝成神秘設備的標記為'm100'的固件二進製文件。
Bitbucket存儲庫於2018年6月21日由Julie Heilman的帳戶創建,它仍然是與該配置文件相關的唯一存儲庫。
圖3. Bitbucket存儲庫的內容
存儲庫只有一個README.md文件,內含項目名稱。值得注意的是,Downloads文件夾(通常包含編譯後的項目二進製文件)包含五個二進製文件:delta.dat、delta.img、ota.dat、ota.img和system.img。
圖4. 存儲庫的Downloads文件夾
該文件夾沒有任何版本控制,下載計數器僅反映自上次文件更新以來的下載次數。尤其是,system.img文件充當真實的載荷歸檔,用於初始的Windows系統感染。該文件的下載計數器準確反映了自上次更新以來的新感染數量。在我們分析期間,文件上一次更新是在2022年2月24日,截至2022年6月,初始感染數量為16萬。然而截至2023年9月,這個數字自2023年4月上一次更新以來已降至6萬。
文件ota.img和delta.img用於更新惡意軟件,其中ota.img對應Windows版本,而delta.img對應Linux版本。有意思的是,system.img和ota.img功能上一樣,不過ota.img包含用於完整性驗證的補充元數據,而delta.img充當了通過SSH被Windows版本感染的Linux主機的初始感染載荷。
文件ota.dat和delta.dat以及版本文件都是惡意軟件檢查新更新可用性的工具。然而值得一提的是,ota.img和delta.img的下載計數器並未準確反映當前感染受害者的數量,這是由於惡意軟件主要從其C2服務器獲取更新,僅在C2服務器沒有響應時才從存儲庫下載更新文件。
在我們分析期間,約100萬更新從存儲庫獲得。截止本文撰稿時,Windows系統只有8次更新,Linux系統只有4次更新,這表明了兩種場景:要么活躍感染極少,要么C2服務器保持活躍,並對所有受感染的受害者做出響應。
C2服務器位於TOR網絡中,其.onion地址為gpiekd65jgshwp2p53igifv43aug2adacdebmuuri34hduvijr5pfjad[.]onion:1111。
為了與C2聯繫,惡意軟件採用了自定義的輕量級方法來實現TOR客戶軟件。有趣的是,這種實現似乎並不是基於任何已知的開源TOR實現,顯然缺少許多標準的TOR特性,比如路由、目錄列表、中繼、出口節點模式以及對控制協議的支持。
惡意軟件會定期啟動與C2服務器的TCP連接,發送含有受害者獨特ID的問候信息。然後,它每分鐘發送一個空信標消息。
這項功能表明了攻擊者旨在不惜一切代價隱藏C2服務器,促使攻擊者開發了一個獨特而耗時的項目:創建自己的TOR客戶軟件。這種方法在APT和犯罪軟件開發者當中並不常見,這個醒目的例子強調了這種惡意軟件相比許多其他惡意軟件具有的複雜性。其功能的複雜性和優雅性使我們想起了實現延遲容忍Equation通信網絡及其他庫的優雅代碼,因而它被歸類為高度先進的威脅。
模塊惡意軟件載荷本身的結構是一種單體式二進制可執行代碼,旨在支持可插入模塊,以擴展或更新功能。這種架構方法是APT惡意軟件的標誌,每個模塊負責實現和註冊回調函數,該回調函數在與C2服務器的連接建立或中斷時觸發,或者在從C2服務器接收消息時觸發。這些模塊中的功能分為兩類:服務模塊和擴展功能模塊。
1. 服務模塊配置存儲該模塊通過在Windows版本的HKCU\Software\Classes\TypeLib項中創建一個類似GUID的註冊表項,安全地存儲AES加密的惡意軟件配置。 Linux版本將該信息隱藏在位於用戶主目錄中的隨機隱藏文件夾中。
升級/卸載當與C2服務器的初始連接建立時,服務模塊生成一個8字節的受害者ID,存儲它,然後與所用的system.img文件的散列一起重用它,用於向服務器返回報告。該模塊旨在實現兩個特定的命令:
o服務器發送system.img的新版本,升級過程由生成的腳本或生成的可執行文件來執行。
o執行全面卸載如果C2服務器脫機時間超過20分鐘,並且這種情況持續存在,模塊將嘗試下載ota.dat文件(Linux版本是delta.dat),然後驗證其完整性。如果文件版本發生了變化,模塊通過下載適當的.img文件:面向Windows的ota.img和麵向Linux的delta.img來觸發升級過程。
反向代理該模塊授予訪問受害者網絡的權限,並允許代表受害者執行遠程操作。
2. 功能模塊雜項命令處理程序該模塊包含一系列命令,用於與受害者的文件系統交互、捕獲屏幕截圖、檢索系統版本,並獲得Linux上的活躍X11顯示內容(默認值是Windows上的WinSta0)。它還包含一個能夠執行從C2服務器收到的shellcode的命令。
憑據收集程序該模塊運行一個專用線程,每兩小時定期掃描一次。在掃描過程中,它從所有活躍用戶收集一系列敏感信息,這些信息包括網站登錄用戶名及密碼,以及個人自動填寫數據,比如姓名、地址、電話號碼、公司和職銜。它還獲取已知的Wi-Fi網絡名稱和相關密碼,以及來自流行的軟件客戶軟件(如FileZilla、Cyberduck和WinSCP)的SSH、FTP和WebDav憑據。
值得一提的是,Web瀏覽器對憑據收集的支持不僅限於Chrome、Firefox和Internet Explorer等知名瀏覽器,還包括一些不太知名的瀏覽器,比如Nichrome、Xpom、RockMelt、Vivaldi、SaMonkey、Epic Privacy和Brave。
在Linux版本中,它還收集存儲在$HOME/.ssh中的OpenSSH密鑰,將來自$HOME /.ssh/known_hosts的主機整理成表,並包括從Libsecret保管庫檢索秘密信息的功能。然而,這項特殊的功能目前有缺陷,因為鏈接的musl libc庫中沒有dlopen API實現。
可重複的任務該模塊擁有幾個內置的功能任務,這些任務可以執行一次,也可以在可重複的調度基礎上執行,條件是特定窗口必須可見,這些任務才會繼續處理。
下面簡要描述任務:
马云惹不起马云獲取屏幕截圖,列出那一刻可見的所有窗口。
马云惹不起马云使用某個命令行執行進程,重定向輸出,並使用正則表達式加以過濾。
马云惹不起马云記錄麥克風輸入。
马云惹不起马云該任務收集具有特定擴展名的文件列表,比如與圖像、文檔、聲音、視頻、歸檔、數據庫、證書、源代碼文件相關的文件及其他關鍵的用戶數據文件。該進程掃描所有本地驅動器和網絡共享區,系統文件夾除外。這是在惡意軟件的Linux版本中運行的唯一任務。
偵察模塊該模塊匯集大量的系統信息,並在連接時將其傳輸到C2服務器。收集的數據包含眾多詳細信息,包括操作系統版本、計算機名稱、硬件MAC地址列表、Windows系統的當前用戶名、Linux系統的/etc/passwd文件、機器的IP地址、當前連接的TOR網絡出口節點的IP地址、系統啟動時間、惡意軟件正常運行時間、時間及時區,總內存/可用內存量、用戶管理權限以及特定的Windows相關信息,比如UI語言和鍵盤佈局、存在的防病毒軟件、NetBIOS名稱、DNS域、機主的Windows許可證詳細信息以及存在的PowerShell命令解釋器。
SMBv1和SSH感染程序有兩個模塊專門負責惡意軟件的滲透能力,它們構成了核心的蠕蟲功能。
一旦憑據收集模塊完成任務,SSH感染程序就開始發威,它過濾結果尋找SSH密鑰和憑據,如果找到,就激活專用線程。該線程的隨機超時中斷時間從10分鐘到2小時不等,啟動滲透進程。
首先,它從緩存或直接從bitbucket[.]org檢索delta.dat和delta.img。然後,它進而驗證這些文件的完整性,從delta.img動態加載libay庫、zlib庫和libssh2庫。下一步是嘗試連接到遠程SSH服務器。如果連接成功,它調用並解析/bin/sh -c ' uname -nmo '命令的輸出;如果遠程系統受支持,惡意軟件將其二進製文件以隨機名稱上傳到遠程的/tmp文件夾,並以命令/bin/sh -c 'cat %s; chmod +x %s; nohup sh -c '%s; rm %s' /dev/null'執行該文件。這個方法確保了與x86、amd64、arm和aarch64 Linux CPU等架構兼容,並使用生成的MZ-PE加載程序與Cygwin x86和amd64遠程主機兼容。
SMBv1感染模塊使用自定義的EternalBlue漏洞利用代碼,充當Windows受害者的主要滲透工具。初始執行後,它通過修改受害者係統上的HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters註冊表項,立即禁用SMBv1協議。然後,它啟動兩個專用線程來執行定期的蠕蟲活動。
第一個線程負責檢查網絡適配器的IP地址和子網掩碼,然後試圖在整個局域網子網內引起感染。相比之下,第二個線程定期嘗試選擇一個隨機的互聯網IP地址,以下地址排除在外:
obogon網絡,比如0.0.0.0/8、10.0.0.0/8、100.64.0.0/10、 127.0.0.0/8、172.16.0.0/12、192.168.0.0/16、198.18.0.0/15、224.0.0.0/4和240.0.0.0/4。
o169.255.0.0/16--主要指南非。這可能是一個bug,開發者可能意指169.254.0.0/16--bogon網絡列表中缺失的部分。
o3.0.0.0/8、15.0.0.0/8、16.0.0.0/8、56.0.0.0/8--亞馬遜、惠普和美國郵政部等。
o6.0.0.0/8和55.0.0.0/8--美國陸軍信息系統司令部。
o7.0.0.0/8、11.0.0.0/8、21.0.0.0/8、22.0.0.0/8、26.0.0.0/8、 28.0.0.0/8、29.0.0.0/8、30.0.0.0/8、33.0.0.0/8、214.0.0.0/8和215.0.0.0/8--美國國防部網絡信息中心。
受支持的Windows版本包括Windows Vista、Windows 7、Windows Server 2008 R2、Windows 8、Windows Server 2012和Windows 10(直至build 14392)。
門羅加密貨幣挖礦模塊Monero挖礦模塊如虎添翼。它在一個單獨的進程中運行,巧妙地偽裝成位於Google\Chrome\Application\Services目錄中的chrome.exe進程,這可以在公共或本地AppData目錄中找到。這種欺騙性手段甚至包括對偽裝的可執行文件的版本信息和進程圖標進行更改。主模塊中的惡意軟件功能定期監視木偶挖掘進程,必要時重新啟動它,它還向C2服務器如實報告哈希率、工作時間、發現的錯誤和錯誤統計信息。
池服務器的DNS解析被巧妙地隱藏在針對Cloudflare DoH(DNS over HTTPS)服務的DNS over HTTPS請求的後面,為其活動增添了隱蔽性。
我們強烈懷疑這個模塊是惡意軟件能夠長時間逃避檢測的主要原因,它的存在主要是出於巧妙偽裝的需要。值得一提的是,該模塊挖掘的門羅幣在2017年徘徊在10美元左右後於2018年1月9日達到了542.33美元的高位。截至2023年,成交價約150美元。雖然這個模塊肯定有利可圖,但它不一定是這種惡意軟件最賺錢的用途。比如說,尋找未加密的二進制錢包或錢包憑據可能牟取更高的利潤。
此外,惡意軟件代碼中存在與挖礦相關的未加密字符串,這從側面證明了其潛在的輔助用途。
ThunderCrypt我們偶然發現了該惡意軟件的早期版本,這促使我們發現了一個相關的勒索軟件變體:ThunderCrypt。事實證明,這兩種惡意軟件有著同樣的底層代碼庫,更重要的是,它們與位於ghtyqipha6mcwxiz[.]onion:1111的同一台C2服務器進行聯繫。
與StripedFly相比,ThunderCrypt勒索軟件展現了驚人相似的功能和模塊,這包括TOR客戶軟件、配置存儲、升級/卸載和偵察模塊,值得注意的一處例外是沒有SMBv1感染模塊。有意思的是,該勒索軟件使用可重複任務模塊的文件列表組件作為其勒索加密進程的必要部分。
遙測數據顯示,ThunderCrypt首次出現在2017年4月23日,活動的主要高峰期出現在隨後的5月,它因一起相當有趣的事件而引起了台灣新聞網的注意。一名台灣網民因無法支付0.345比特幣的勒索贖金以換取解密內容,決定通過提供的支持電子郵件地址與攻擊者聯繫。他在郵件中坦率地解釋了面臨的困境,提到月收入只有400美元。令許多人吃驚的是,攻擊者回复承認高估了台灣民眾的收入,這次攻擊被認為徹底失敗。
圖5. 台灣新聞網關於ThunderCrypt的報導
EternalBlue我們認為EternalBlue漏洞與StripedFly背後的開發者存在共同點。我們的假設依賴PE時間戳的準確性,雖然不可能驗證初始EternalBlue模塊時間戳的真實性,但惡意軟件的後續更新含有與遙測數據大致匹配的時間戳,因此初始時間戳很可能也是準確的。我們重新構建的時間線如下:
o2016年4月9日:PE時間戳表明,StripedFly最早的已知版本包含EternalBlue。
o2016年8月:Shadow Brokers組織首次洩露信息。
o2017年3月14日:微軟發布安全公告MS17-010,附有EternalBlue漏洞的補丁。
o2017年4月14日:Shadow Brokers發布了含有EternalBlue漏洞的洩露信息。
o2017年4月15日:第一個包含EternalBlue的勒索軟件ExPetr出現。
o2017年4月20日:出現了最早版本的ThunderCrypt勒索軟件(不含EternalBlue)。
o2017年4月23日:首次在遙測數據中檢測到了ThunderCrypt。
o2017年5月12日:WannaCry勒索軟件攻擊利用了EternalBlue。
o2017年6月27日:ExPetr攻擊使用了EternalBlue。
o2017年8月24日:在初始PE時間戳給出的日期一年後,我們的遙測數據首次檢測到StripedFly。
綜上所述,這些不同的數據表明了與Equation惡意軟件相似,不過沒有直接證據表明它們存在關聯。與Equation惡意軟件家族相關的特徵便於發現了該惡意軟件,編碼風格和方法與SBZ惡意軟件頗為相似。
結論StripedFly是很久以前編寫的,多年來它成功地逃避了檢測,無疑實現了其預期目的。許多矚目和復雜的惡意軟件已被調查過,但這個軟件很特別,確實值得關注。
真正的目的是什麼?這仍然是個謎。雖然ThunderCrypt勒索軟件表明開發者出於商業動機,但它提出了一個問題:為什麼他們不選擇可能更有利可圖的途徑?勒索軟件團伙基本上旨在獲取匿名贖金,而這個案例似乎一反常態。
問題仍然存在,但只有那些設計這個神秘惡意軟件的人知道答案,如此復雜且專業設計的惡意軟件只想達到這種微不足道的目的,實在讓人費解。
攻陷指標C2服務器gpiekd65jgshwp2p53igifv43aug2adacdebmuuri34hduvijr5pfjad[.]onion ghtyqipha6mcwxiz[.]onion
ajiumbl2p2mjzx3l[.]onion
URLbitbucket[.]org/JulieHeilman/m100-firmware-mirror/downloads/
bitbucket[.]org/upgrades/um/downloads/
bitbucket[.]org/legit-updates/flash-player/downloads
gitlab[.]com/JulieHeilman/m100-firmware-mirror/raw/master/
gitlab[.]com/saev3aeg/ugee8zee/raw/master/
github[.]com/amf9esiabnb/documents/releases/download/
tcp://pool.minexmr[.]com:4444
tcp://mine.aeon-pool[.]com:5555
tcp://5.255.86[.]125:8080
tcp://45.9.148[.]21:80
tcp://45.9.148[.]36:80
tcp://45.9.148[.]132:8080
system
Recommended Comments