概述
在報告「Bvp47-美國NSA方程式組織的頂級後門」(參考1)的描述中,Bvp47本身像是一個巨大的殼或壓縮包,共包含了18個分片,盤古實驗室展示了對於Bvp47後門程序的歸屬分析和部分技術細節的描述,比如BPF隱蔽隧道,但依然還有部分其他模組值得深入探究,這些模組既可以作為Bvp47的一部分一起執行任務,也可以被獨立使用。
在2015年對國內某國家重要關鍵資訊基礎設施的Solaris系統取證中,盤古實驗室提取到了一份獨立存活於Solaris平臺看起來與Bvp47關係密切的樣本,後經確認,樣本檔案內容與「影子經紀人」(The Shadow Brokers)揭露出的「飲茶」(Suctionchar_Agent)木馬程序原檔案一致。該木馬程序搭配Bvp47中的Dewdrop、Incision等模組和控制程序tipoff,可以輕鬆竊取目標系統使用者在執行ssh、passwd、sudo等命令時的賬號密碼,隨即將其隱蔽保存在目標系統中。這些被加密隱藏的密碼檔案同樣也需要RSA演算法的私鑰來解密。
基於特徵的入侵分析取證發現,國內大量重要組織機構受到了這個美國國家安全局(NSA)來源的「飲茶」(Suctionchar_Agent)木馬程序的侵襲,其中就包括了近期披露的被網路滲透的西北工業大學。有證據顯示, NSA利用「飲茶」(Suctionchar_Agent)木馬程序竊取了世界各國難以確切估量的賬號密碼,在美國各地建立了多個高度機密的賬號密碼海量資料儲存中心,供NSA的行動部門TAO隨時查詢並「合法」進入受害者的資訊系統。
追蹤Bvp47的過程更像是在摸索一張迷霧下的拼圖,在奇安盤古實驗室與國家計算機病毒應急處理中心的通力合作下,這份報告將會通過對「飲茶」(Suctionchar_Agent)、Dewdrop、Bvp47_loader等程序和系統模組的技術分析來進一步理解Bvp47這個頂級後門平臺的部分工作方式和執行邏輯。
「飲茶」嗅探木馬(Suctionchar_Agent)攻擊場景還原
攻擊場景
經過全面而深入的技術模擬分析,盤古實驗室還原了「飲茶」嗅探木馬(Suctionchar_Agent)與Bvp47後門程序其他元件配合實施聯合攻擊的場景,具體執行過程如下圖所示:
運行於核心層的sum會輔助「飲茶」嗅探木馬(Suctionchar_Agent)竊取passwd、telnet、su等進程中的賬號密碼;
竊取到的賬號密碼會同步發送給運行於Ring3的「飲茶」嗅探木馬(Suctionchar_Agent);
「飲茶」嗅探木馬(Suctionchar_Agent)會將賬號密碼保存到名為「/var/tmp/.xxxxxxxx」的隱藏目錄中;
美國國家安全局(NSA)的攻擊實施者遠端發送執行ish反彈的觸發包到核心層的BPF過濾程序;
BPF過濾器捕獲到特徵包後傳送給Ring3的Dewdrop程序模組;
Dewdrop進行資料包解密並收到ish反彈指令,隨即轉送給Incision程序;
Incision程序主動回聯到callback地址,美國國家安全局(NSA)的攻擊實施者利用ish接受竊取的密碼檔案;
美國國家安全局(NSA)的攻擊實施者將被RSA公鑰加密的密碼檔案進行私鑰解密並還原密碼檔案;
場景復現
1. 運行tipoff控制端程序,功能列表如下:
2. 具體功能列表如下:
類別 | 功能說明 |
觸發協議支持 | 支持TCP、UDP、ICMP協議 |
非常規TCP標誌支持 | syn、fin、ack、rst、push、urg |
防火牆穿透支持 | PIX或其它;默認支持防火牆穿透,ACL穿透; |
支持應用協議 | SMTP、SIP、DNS等應用層協議 |
後門功能1 | 支持遠端啟動檔案進程 |
後門功能2 | 支持遠端Shell查看 |
支持各協議的擴展定製 | 包括SMTP、DNS、TCP等協議的標記位自定義 |
3. 支持UDP包的遠端shell獲取
4.UDP報文如下
5. 在獲取到的shell中可以看到被隱藏的進程和檔案
6. 「/var/tmp/」目錄下被加密的檔案如下:
7.使用suctionchar_decode對「/var/tmp/」目錄下被加密的檔案解密:
「飲茶」嗅探木馬(Suctionchar_Agent)技術細節
檔案資訊
樣本關聯溯源發現,盤古實驗室2015年提取到的樣本為「影子經紀人」(The Shadow Brokers)洩漏的檔案之一,即suctionchar_agent__v__3.3.7.9_sparc-sun-solaris2.9 ,檔案相關資訊如下:
樣本資訊概要說明 | |
檔案名稱 | 未知 |
檔案哈希(MD5) | a633c1ce5a4730dafa8623a62927791f |
檔案大小(位元組) | 47,144 |
The Shadow Brokers具體包名稱 | suctionchar_agents.tar.bz2 |
原始檔案名稱 | suctionchar_agent__v__3.3.7.9_sparc-sun-solaris2.9 |
功能目標 | 竊取SSH、TELNET、FTP、PASSWD、SU、RSH、LOGIN、CSH等程序中的賬號密碼資訊。 |
CPU架構 | SPARC |
隱藏路徑2 | /var/tmp/.xxxxxxxxxxxx |
鑑於盤古實驗室提取的樣本本身為SPARC架構,比較少見,為方便讀者理解並採取有效措施進行防範,我們選擇基於x86架構、功能相同的木馬程序樣本進行分析,具體x86架構的檔案資訊如下:
樣本資訊概要說明 | |
檔案名稱 | suctionchar_agent__v__2.0.28.2_x86-linux-centos-5.1 |
檔案哈希(MD5) | 4a5b7a9c5d41dbe61c669ed4cf2975e5 |
檔案大小(位元組) | 31,649 |
The Shadow Brokers具體包名稱 | suctionchar_agents.tar.bz2 |
原始檔案名稱 | suctionchar_agent__v__2.0.28.2_x86-linux-centos-5.1 |
功能目標 | 竊取SSH、TELNET、FTP、PASSWD、SU、RSH、LOGIN、CSH等程序中的賬號密碼資訊。 |
CPU架構 | X86 |
Bvp47對應分片 | 0x0E |
隱藏路徑2 | /var/tmp/.xxxxxxxxxxxx |
樣本關聯
根據盤古實驗室提取的「飲茶」嗅探木馬樣本(Suctionchar_Agent),研究人員從「影子經紀人」(The Shadow Brokers)揭露出的檔案中找到了對應的原始檔案為「linux/bin/suctionchar_agents.tar.bz2/suctionchar_agent__v__3.3.7.9_sparc-sun-solaris2.9」,二者完全一致。相關壓縮包中還包含了適合多個平臺和版本的「suctionchar」木馬程序,檔案最早可追溯到2007年:
技術分析
字串解密
如下圖所見,字串加密也就是「Bvp47」研究報告中所描述的0x47函數加密:
解密後的字串列表如下:
相關解密腳本如下:
功能模組設計
檔案「Linux\etc\opscript.txt」中對Suctionchar_Agent的功能作了相關說明,即駐留竊取SSH、TELNET、FTP、PASSWD、SU、RSH、LOGIN、CSH等程序中的賬號密碼資訊。「飲茶」(Suctionchar_Agent)程序是這個木馬程序的應用層代理,它與相關聯的核心模組通訊,接收所需資訊並加密寫入檔案。核心模組sum檔案(The Shadow Brokers Leaks未包含該檔案)可由modload程序載入,成功載入核心模組後會清空落地的檔案,防止內容被恢復:
「飲茶」(Suctionchar_Agent檔案本身既可以使用默認配置,也可以從外部讀取配置檔案,檔案格式主要包括3.x以上版本的xml格式和早期的conf格式。
3.x以上版本的xml格式(「Linux\bin\suctionchar_configure.xml」):
「Linux\doc\old\etc\suctionchar.sample.filter.conf」 :
「飲茶」(suctionchar_configure)將生成「dc9cb44a723d0e75201d933159834173「檔案,該檔案供Suctionchar_Agent使用:
密碼獲取執行緒
在「飲茶」(Suctionchar_Agent)中存在一個獨立的執行緒,與核心模組sum保持通訊,接收賬號密碼並寫入到/var/tmp/檔案夾中,即sub_8049EF0函數內部:
回呼函式sub_8049A00:
密碼保存檔案的路徑生成演算法
在函數get_hidden_path_0804BDF0中描述了隱藏檔案」 /var/tmp/.e33ff11cb8e3b4ff/a0b973925e397d9acd80e85e2eaa6e60/d5373a146ff9f200a2376054dde25677」的生成演算法:
還原的程式碼大致如下:
「飲茶」木馬(suctionchar_decode)程序中的私鑰
正如攻擊場景一章中所描述的那樣,檔案「/var/tmp/.e33ff11cb8e3b4ff/a0b973925e397d9acd80e85e2eaa6e60/d5373a146ff9f200a2376054dde25677」可以被「linux\bin\suctionchar_decode」程序所解密,加密演算法需要用RSA私鑰解密RC6對稱金鑰後才能解密出檔案,同Dewdrop模組中的私鑰一樣,這個RSA私鑰也可以佐證該後門與「影子經紀人」(The Shadow Brokers)洩露資料包的關聯關係。
Dewdrop version 3.x 技術細節
Dewdrop模組承擔了最主要的隱蔽後門功能,即BPF過濾功能,本章節主要討論BPF引擎通訊對應的實現過程。
BPF隱蔽通訊初始化過程
1. BPF隱蔽後門的初始化是從函數_554a7941開始的;
2. 其中sec_bpf_init返回了bpf_program的結構體
3. stru_8008300結構具體值如下:
4. bpf_program和bpf_insn結構分別如下:
5. 經過bpf反彙編過後的程式碼如下:
6. 實際運行時的bpf偽程式碼如下,即滿足該規則的payload資料會被捕獲進入到下一個處理流程;
BPF隱蔽通訊資料處理過程
在滿足BPF的捕獲規則後,資料包會進入下一個流程來進行處理。
1. 在函數sec_f_9b510b03中可以看到Dewdrop使用select模型來處理對應的資料包
2. sec_f_6a42f4c9_allinone執行偽程式碼如下:
3. 在 sec_decode_packet 中就開始了payload資料包的解密工作,內部涉及到一處作了變形處理的RSA解密演算法。
BPF隱蔽通訊資料格式與加密演算法
1. Dewrop模組v3系列的載荷(payload)資料包格式如下:
2. tipoff中對Dewdrop模組的載荷(payload)資料包流程如下:
3. payload資料包中的RSA資料加密
Bvp47_loader技術細節
loader模組的入口函數圖具體如下,中間會涉及到:
1. 檢測運行時環境是否正常;
2. 讀取檔案尾部的payloads;
2. 對映和校驗payload有效性;
4. 解密payload,如果需要解密;
5. 解壓縮payload,如果需要解壓縮;
6. 裝載核心模組;
7. 調用通知隱藏核心模組的ELF檔案頭;
8. fork執行Dewdrop模組後門;
9. fork執行「飲茶」(Suctionchar_Agent)程序後門;
字符加密函數
在樣本分析過程中,首先需要處理應對的是一系列的字串加密函數,共8處。
1. 異或0x47函數類型1:
2. 異或0x47函數類型2:
3. 變序加密函數:
4. 異或0x47函數類型3:
5. 異或0x47類型4:
6. 異或0x47
7. 加密函數
8. 異或0x47函數類型5
載荷(payload)相關的加密方式
載荷(payload)在被裝載過程中主要有5種解密方式。
方式一:
方式二:
方式三:
方式四:
方式五:
載荷(payload)解密流程
如前面所見到的main函數主體流程,載荷(payload) 解析過程是一個相對複雜的循環體流程,且伴隨了諸多加密對抗。
對映和載入:
解析流程:
涉及到的解壓縮流程:
linux_gzip函數:
linux_gzip_inflate_fixed函數:
linux_gzip_inflate_dynamic函數:
linux_gzip_inflate_codes函數:
linux_gzip_fill_buf函數:
linux_gzip_huft_build函數:
整體抽象出來的大致C語言程式碼如下(未能完全覆蓋):
已知的payload檔案格式如下:
在實際樣本運行過程中,在上述Decode回調調用過程中也會直接開始嘗試載入so類型的檔案:
在試圖載入後也會去嘗試補丁elf檔案格式的plt:
Bvp引擎初始化與核心模組載入
核心模組的解密與載入也會在main流程裡執行,會經歷如下的幾個步驟:
1. 解密payload包;
2. 初始化Bvp引擎,適配對應核心版本結構;
3. 開始嘗試裝載ko模組,主要用於進程、檔案、網路的隱藏等;
具體如下:
1. 嘗試解密ko的payaload;
2. Bvp整體處理函數;
對應的偽程式碼:
3. Bvp引擎的初始化serial_bvp函數
對應的偽程式碼:
4. serial_bvp流程
5. 載入第一個模組qmr
6. 校驗發行版:
7. 該發行版對應了TSB中的版本:
8.校驗2:
9. 核心模組載入時的參數驗證1:
10. 核心模組2載入時的參數驗證2:
11. 最終開始裝載核心模組:
自刪除的一種繞過手段
在main函數中有2處unlink函數的調用,實際調試過程中可以暴力修改流程繞過unlink所出現的自刪除:
基於Hash的API函數調用
在Bvp47的運行過程會有製作一張類似作基於Hash值的API函數查找的查找表。
1. 面對如下的一張Hash表;
2. 在sub_804C2E0函數中嘗試初始化
3. 在serial_bind_0x7bbf2c88_函數中進一步初始化
偽C語言程式碼:
部分shellcode
在loader模組中還有部分是部分不太完整的加密ELF檔案,經過解密後是幾個shellcode形式的程式碼。
1. 對應的ELF頭部格式定義如下:
2. 中間的幾段shellcode會互相跳轉
3. 共6段 shellcode
結論
「飲茶」嗅探木馬(Suctionchar_Agent)程序的功能專一,綜合分析Bvp47_loader、Dewdrop等模組可以看出,「電幕行動」(Bvp47)在設計上體現了良好的架構能力。美國國家安全局(NSA)的攻擊實施者可以通過Bvp47各個功能模組的靈活組合,隱蔽完成攻擊任務,同時大幅降低該木馬程序的暴露幾率。儘管美國國家安全局(NSA)實施的攻擊竊密活動具有高度的隱密性,但盤古實驗室通過自有資料視野範圍內的分析取證材料,結合對來源資料的深度挖掘,仍然完整地還原了世界頂級駭客組織「方程式」的攻擊竊密手法。
通過現有證據可以斷定,遍佈國際網際網路的無數伺服器和網路終端,以及交換機、路由器、閘道器、防火牆等設備,正在被美國國家安全局(NSA)的 「飲茶」嗅探木馬(Suctionchar_Agent)類似程序實時監測,數以億計的賬號密碼被竊取並儲存到美國國家安全局(NSA)的資料庫中,變成你工作生活中的重大安全隱患。
參考
1. Bvp47-美國NSA方程式組織的頂級後門
https://www.pangulab.cn/post/the_bvp47_a_top-tier_backdoor_of_us_nsa_equation_group/
2. The Shadow Brokers: x0rz-EQGRP
https://github.com/x0rz/EQGRP/blob/master/Linux/up/suctionchar_agents.tar.bz2
4. jtcriswell/bpfa
https://github.com/jtcriswell/bpfa
5. bpf-asm-explained
https://github.com/Igalia/pflua/blob/master/doc/technical/bpf-asm-explained.md
6. cloudflare/bpftools
https://github.com/cloudflare/bpftools
點選閱讀原文至ALPHA 5.0
即刻助力威脅研判