作者:安天安全研究與應急處理中心(Antiy CERT)
— 方程式組織系列分析報告之四
安天安全研究與應急處理中心(Antiy CERT)
- 報告初稿完成時間:2017年1月13日 16時00分
- 首次發布時間:2017年1月16日 10時00分
- 本版本更新時間:2017年1月17日 8時30分
PDF報告下載
1 本版本更新小語
安天在此前發布的報告版本的基礎上,增加了一個方程式組織主機作業的模塊積木圖。這個積木圖初步展示了一個將主機情報作業按照"原子化"拆分的模塊組合的拼裝,在本版本中安天CERT也細化了對部分模塊的分析,盡管目前的分析只覆蓋這些模塊的一少部分。
在數天前,安天CERT把這份暫時稱為"提綱"的未完成分析結果發布出來,這并非因為我們期望"速戰速決",而草率地發布一點粗淺的進展,而是我們需要獲得更多的建議和批判。所幸的是,在上一版本發布后,獲得了業內專家中肯而尖銳的批評,讓安天認識到,在面對這組2007~2008年的攻擊模塊集合時,分析小組再次出現了和當年分析"火焰"時一樣的迷茫(盡管安天曾經一度以為自己比那時更清晰)。這些龐雜的模塊展開了一組拼圖碎片,每一張圖上都是有意義的圖案,但如果逐一跟進進去,這些圖案就會組成一個巨大的迷宮。迷宮之所以讓人迷惑,不在于其處處是死路,而在于其看起來處處有出口,但所有的磚塊都不能給進入者以足夠的提示。此時,最大的期待,不只是有一只筆,可以在走過的地方做出標記,而是插上雙翼凌空飛起,俯瞰迷宮的全貌。當然這是一種提升分析方法論的自我期待,我輩當下雖身無雙翼,但或可練就一點靈犀。
目前安天的積木還原工作還剛剛起步,對于能夠在中國的傳統節日春節前,發布出分析報告的新版本,安天還是有些許欣慰的。網絡安全注定是一個需要永遠保持警惕和勤奮的行業,我們的分析工作會持續進行下去,即使是在焰火升騰,鞭炮響起的時刻,依然需要有緊盯反匯編代碼和威脅態勢的眼睛。
感謝業內專家同仁對安天的關注和支持,感謝安天客戶對安天產品與服務的信任,祝大家新春快樂!
2? 背景
對于方程式組織,在過去的兩年中,安天已經連續發布了三篇分析報告:在《修改硬盤固件的木馬--探索方程式(EQUATION)組織的攻擊組件》[1] 中,安天對多個模塊進行了分析,并對其寫入硬盤固件的機理進行了分析驗證;在《方程式(EQUATION)部分組件中的加密技巧分析》[2]報告中,對攻擊組件中使用的加密方式實現了破解;在《從"方程式"到"方程組"--EQUATION攻擊組織高級惡意代碼的全平臺能力解析》[3]報告中,安天獨家提供了方程式在Linux和Solaris系統的樣本分析,這也是業內首次正式證實這些"惡靈"真實存在的公開分析。
APT的分析成果,與研發反APT產品一樣,都要基于充分的基礎積累,而不可能"一夜之間建成羅馬"。對于方程式這樣大至無形的超級攻擊組織來說,安天過去所做的具體的分析工作都是盲人摸象的過程,一旦飄忽的線索落入安天已經摸索過的范圍之內,就可以迅速發布儲備成果,而如果面對的是一個未曾充分探查的區域,則需要更長的時間展開分析工作,因此與安天此前已經發布的三篇方程式的長篇報告相比,本篇報告目前的版本依然是比較倉促的,因此安天會堅持稱之為"提綱",旨在能拋磚引玉,邀請更多兄弟團隊共同加入分析工作,以便進一步呈現出其全貌。
本篇展現的分析工作是圍繞2017年1月12日"影子經紀人"放出Equation Group 組件中的61個文件[4] 而展開的。經分析,在本次放出的61個文件中,其中含有Equation Group 組件和DanderSpritZ(RAT)工具中的一些插件。DanderSpritZ是NSA(National Security Agency)的間諜工具之一,在1月7號"影子經紀人"放出的Windows攻擊工具[5]中也包含了大量DanderSpritZ的插件名稱。
組件EquationDrug是一個很復雜的模塊,其存活時間有近10年,后來被GrayFish升級替代。從EquationDrug到GrayFish是攻擊平臺級別的惡意代碼體系,具有安裝與卸載插件功能。在本次"影子經紀人"放出的文件中,安天CERT看到了更多的EquationDrug組件中的插件。通過分析比對發現,這些插件比之前安天分析過的插件版本低,但其中包含了一些此前未曾被業內捕獲到的模塊。
3????????? 方程式線索曝光和分析成果時間鏈梳理
從2013年起,安天從樣本分析中,逐步發現存在一個擁有全平臺載荷攻擊能力的攻擊組織,并逐步關聯分析了其多個平臺的樣本。在這個過程中,安天感到一個大至無形的超級攻擊組織的存在,但并未找到其攻擊背景。
2015年2月,卡巴斯基實驗室曝光了一個名為方程式(Equation Group)[6]的攻擊組織,引發了全球關注,卡巴斯基認為該組織已活躍近20年,可能是目前世界上存在的最復雜的APT攻擊組織之一,并認為該組織是震網(Stuxnet)和火焰(Flame)病毒幕后的操縱者。經過線索比對,安天發現這正是此前一直跟蹤的超級攻擊組織,決定通過報告公開其針對硬盤固件作業的原理[1]和已破解的其部分加密算法[2],形成了安天對于方程式系列分析的前兩篇報告。
2015年3月,卡巴斯基實驗室發布了基于Equation Drug組件或平臺的剖析[7],Equation Drug是方程式組織所用的主要間諜組件或平臺之一,最早可追溯到2001年,并且一直沿用至今。該組件或平臺的架構類似于一個具有內核模式和用戶模式的微型操作系統,通過自定義接口進行交互。該組件或平臺包括驅動程序、平臺內核(協調器)和若干插件,其中一些插件配備獨特的ID和版本號,用于定義相關功能等。
2016年8月,一個自稱"影子經紀人"(The Shadow Brokers)的個人(或組織)聲稱入侵了網絡間諜組織方程式(Equation)[8],并以100萬比特幣(當時約價值為5.6億美元)的價格,公開"拍賣"所掌握的方程式組織的攻擊工具,方程式組織被認為與NSA存在聯系。為證明成功入侵的真實性,"影子經紀人"于當月13日在開源項目托管平臺GitHub加密發布了這些攻擊工具,并有意將其中的少量攻擊工具以明文形式發布。
2016年8月,卡巴斯基實驗室通過對方程式組織與"影子經紀人"曝光的數據進行對比驗證[9],確認了曝光的數據與方程式組織有關。2016年10月,"影子經紀人"對攻擊工具再度發起拍賣[10],并稱在GitHub發布的方程式攻擊工具只占其掌握的60%。
2016年11月,"影子經紀人"公開了一份遭受入侵的服務器清單[11],并稱攻擊方與NSA有關。清單的日期顯示,各系統遭受入侵的時間是在2000年到2010年之間,受控IP及域名分布在49個國家,主要集中在亞太地區,受影響的國家包括中國、日本、韓國、西班牙、德國、印度等。 安天將這些數據導入到安天態勢感知和預警平臺,形成了下圖的可視化展現。
在"影子經紀人"的爆料中,提及的相關服務器可能是Linux、FreeBSD和Solaris。而在2016年上半年的兩次技術會議中,安天則明確說明,方程式有針對多個系統平臺的樣本,其中包括Linux和Solaris。安天最終于2016年11月5日公開了方程式組織針對Linux和Solaris的部分樣本載荷的分析報告(安天方程式系列報告之三)[3]。

圖 3 - 1 安天態勢感知與監控預警平臺:"方程式"組織對全球互聯網節點的入侵可視化復現
安天分析團隊小組對方程式的上述信息進行了梳理,整理出方程式事件曝光和相關分析的時間鏈。

圖 3 - 2 方程式事件相關信息曝光和廠商分析的時間鏈
4????????? DanderSpritz攻擊平臺
安天通過對本次泄露的文件以及對以往方程式資料的分析發現,方程式組織的"EquationDrug"平臺與泄露文件中提到的"DanderSpritz"具有一定內在聯系:
1.???????? 本次泄露的msgkd.ex_、msgki.ex_、msgks.ex_、msgku.ex_為GROK插件,是"DanderSpritz"的插件或模塊,該插件在"EquationDrug"平臺中也曾出現,通過分析發現本次泄露的GROK為低版本GROK插件。
2.???????? 本次曝光的各類DLL插件中的一處數據為插件ID,插件ID都是以0x79開頭,如:0x79A4、0x79D8,同樣,"EquationDrug"平臺的插件也設有內置ID,"EquationDrug"平臺的插件ID為0x80開頭,且兩個平臺的插件導出函數參數的數據結構也存在相似之處。
因此,基本可以認為方程式組織使用的"EquationDrug"攻擊平臺與"DanderSpritz"使用了相同的架構設計,兩者可能是不同的版本代號,或至少來自同一開發團隊或資源高度共享的團隊。

圖 4 - 1 方程式組織的DanderSpritz攻擊平臺

圖 4 - 2 "影子經紀人"泄露的"DanderSpritz"攻擊平臺截圖
本次"影子經紀人"所曝光的文件中多數為"DanderSpritz"平臺的攻擊插件,一是文件列表,二是61個部分插件實體文件。從放出的文件列表HASH和截圖來看,攻擊工具和插件非常豐富且標準化,具體包括遠控、漏洞利用、后門、插件等。DanderSpritz_All_Find.txt文件內容多達7千余行,其中插件有數百個之多。對泄露出來的61個文件進行分析梳理,根據樣本中的一些信息推斷,這61個樣本應該屬于兩類:測試版本與發布版本。測試版本中含有一些明文信息,并沒有進行加密處理,使用了常規的函數調用方式,而在發布版本中這些信息并不存在,函數調用方式也改為動態調用,更加隱蔽。從時間戳上來看,測試版本的生成時間比發布版本要早5秒左右。測試版本是不應用于實際攻擊中的,從側面也再次證實了這些文件是被從開發和保管場景竊取出來的,而不是在攻擊中捕獲到的。
表 4 - 1 泄露實體文件的部分插件功能列表
測試版本
</b></p></td>
<td><p><b>發布版本</b><b>
</b></p></td>
<td><p><b>功能</b><b>
</b></p></td>
</tr>
<tr>
<td></td>
<td><p>DoubleFeatureDll.dll.unfinalized
</p></td>
<td><p>該模塊用于創建線程執行函數,地址由調用者傳入。同時,內部還有SHA256、AES、CRC32等算法。
</p></td>
</tr>
<tr>
<td><p>DuplicateToken_Lp.dll
</p></td>
<td><p>DuplicateToken_Implant.dll
</p></td>
<td><p>該模塊用于獲取Token,并執行操作。
</p></td>
</tr>
<tr>
<td></td>
<td><p>DXGHLP16.SYS
</p></td>
<td><p>該模塊用于網絡嗅探 監測以太網和VPN的流量 ,用于Windows 9x系統。
</p></td>
</tr>
<tr>
<td><p>EventLogEdit_Lp.dll
</p></td>
<td><p>EventLogEdit_Implant.dll
</p></td>
<td><p>該模塊可對事件日志文件進行編輯。
</p></td>
</tr>
<tr>
<td><p>GetAdmin_Lp.dll
</p></td>
<td><p>GetAdmin_Implant.dll
</p></td>
<td><p>該模塊用于獲取管理員權限,并執行操作。
</p></td>
</tr>
<tr>
<td></td>
<td><p>kill_Implant.dll
</p></td>
<td><p>該模塊功能是結束進程,傳入參數中有要結束進程的ID,該功能的實現使用了常規的系統函數,如:OpenProcess、TerminateProcess。
</p></td>
</tr>
<tr>
<td></td>
<td><p>kill_Implant9x.dll
</p></td>
<td><p>該模塊功能與kill_Implant.dll相同,是針對64位系統的版本。
</p></td>
</tr>
<tr>
<td><p>LSADUMP_Lp.dll
</p></td>
<td><p>LSADUMP_Implant.dll
</p></td>
<td><p>該模塊可用來讀取LSA 憑據,根據傳入參數的不同執行不同的操作。
</p></td>
</tr>
<tr>
<td><p>modifyAudit_Lp.dll
</p></td>
<td><p>modifyAudit_Implant.dll
</p></td>
<td><p>該模塊用于修改審核配置。
</p></td>
</tr>
<tr>
<td><p>modifyAuthentication_Lp.dll
</p></td>
<td><p>modifyAuthentication_Implant.dll
</p></td>
<td><p>該模塊用于修改權限認證。
</p></td>
</tr>
<tr>
<td><p>ModifyGroup_Lp.dll
</p></td>
<td><p>ModifyGroup_Implant.dll
</p></td>
<td><p>該模塊用于修改用戶組權限。
</p></td>
</tr>
<tr>
<td><p>ModifyPrivilege_Lp.dll
</p></td>
<td><p>ModifyPrivilege_Implant.dll
</p></td>
<td><p>該模塊用于修改用戶權限。
</p></td>
</tr>
<tr>
<td></td>
<td><p>msgkd.ex_
</p></td>
<td><p>釋放GROK鍵盤/剪貼板記錄器驅動。
</p></td>
</tr>
<tr>
<td></td>
<td><p>msgki.ex_
</p></td>
</tr>
<tr>
<td></td>
<td><p>msgks.ex_
</p></td>
</tr>
<tr>
<td></td>
<td><p>msgku.ex_
</p></td>
</tr>
<tr>
<td></td>
<td><p>mstcp32.sys
</p></td>
<td><p>該模塊用于網絡嗅探 監測以太網和VPN的流量 。
</p></td>
</tr>
<tr>
<td><p>nethide_Lp.dll
</p></td>
<td><p>nethide_Implant.dll
</p></td>
<td><p>該模塊用于隱藏網絡連接。
</p></td>
</tr>
<tr>
<td></td>
<td><p>ntevt.sys
</p></td>
<td><p>該模塊是事件日志相關驅動。
</p></td>
</tr>
<tr>
<td></td>
<td><p>ntevtx64.sys
</p></td>
<td><p>該模塊功能與ntevt.sys相同,是針對64位系統的版本。
</p></td>
</tr>
<tr>
<td><p>PortMap_Lp.dll
</p></td>
<td><p>PortMap_Implant.dll
</p></td>
<td><p>該模塊進行端口映射。
</p></td>
</tr>
<tr>
<td><p>ProcessHide_Lp.dll
</p></td>
<td><p>ProcessHide_Implant.dll
</p></td>
<td><p>該模塊可以進行隱藏進程,恢復隱藏的進程,根據傳入參數的不同執行不同的操作。
</p></td>
</tr>
<tr>
<td></td>
<td><p>processinfo_Implant.dll
</p></td>
<td><p>該模塊可以用來獲取進程信息。
</p></td>
</tr>
<tr>
<td></td>
<td><p>processinfo_Implant9x.dll
</p></td>
<td><p>該模塊功能與processinfo_Implant.dll相同,是針對64位系統的版本。
</p></td>
</tr>
<tr>
<td><p>ProcessOptions_Lp.dll
</p></td>
<td><p>ProcessOptions_Implant.dll
</p></td>
<td><p>該模塊用于設定進程執行屬性。
</p></td>
</tr>
<tr>
<td><p>pwdump_Lp.dll
</p></td>
<td><p>pwdump_Implant.dll
</p></td>
<td><p>該模塊可用來讀取系統中密碼,根據傳入參數的不同執行不同的操作。
</p></td>
</tr>
<tr>
<td><p>RunAsChild_Lp.dll
</p></td>
<td><p>RunAsChild_Implant.dll
</p></td>
<td><p>該模塊用于創建子進程,并執行操作。
</p></td>
</tr>
<tr>
<td><p>
?
</p></td>
<td><p>tdi6.sys
</p></td>
<td><p>該模塊用于網絡嗅探 監測以太網和VPN的流量 。
</p></td>
</tr>
<tr>
<td><p>PassFreely_LP.dll
</p></td>
<td><p>PassFreely_Implant.dll
</p></td>
<td><p>正在分析中
</p></td>
</tr>
<tr>
<td><p>...
</p></td>
<td><p>
?
</p></td>
</tr>
</table>
表 4 - 2 僅泄露文件名的部分插件功能猜測
測試版本
</b></p></td>
<td width=301><p><b>發布版本</b><b>
</b></p></td>
<td><p><b>猜測功能</b><b>
</b></p></td>
</tr>
<tr>
<td><p>Users_Lp.dll
</p></td>
<td width=301><p>Users_Implant.dll
</p></td>
<td><p>查看當前用戶列表
</p></td>
</tr>
<tr>
<td><p>GroupUsers_Lp.dll
</p></td>
<td width=301><p>GroupUsers_Implant.dll
</p></td>
<td><p>修改指定用戶所在組
</p></td>
</tr>
<tr>
<td></td>
<td width=301><p>nc.exe
</p></td>
<td><p>nc網絡工具
</p></td>
</tr>
<tr>
<td><p>ProcessCheck_Lp.dll
</p></td>
<td width=301><p>ProcessCheck_Implant.dll
</p></td>
<td><p>檢測指定進程
</p></td>
</tr>
<tr>
<td><p>machineinfo_LP.dll
</p></td>
<td width=301><p>machineinfo_Implant.dll
</p></td>
<td><p>獲取主機相關信息
</p></td>
</tr>
<tr>
<td><p>IpConfig_LP.dll
</p></td>
<td width=301><p>IpConfig_Implant.dll
</p></td>
<td><p>IP信息獲取
</p></td>
</tr>
<tr>
<td><p>FileAttribs_LP.dll
</p></td>
<td width=301><p>FileAttribs_Implant.dll
</p></td>
<td><p>文件屬性獲取
</p></td>
</tr>
<tr>
<td><p>NetstatMon_LP.dll
</p></td>
<td width=301><p>NetstatMon_Implant.dll
</p></td>
<td><p>網絡狀態獲取
</p></td>
</tr>
<tr>
<td><p>Dns_LP.dll
</p></td>
<td width=301><p>Dns_Implant.dll
</p></td>
<td><p>DNS設置獲取
</p></td>
</tr>
<tr>
<td><p>language_LP.dll
</p></td>
<td width=301><p>language_Implant.dll
</p></td>
<td><p>語言信息獲取
</p></td>
</tr>
<tr>
<td><p>Environment_LP.dll
</p></td>
<td width=301><p>Environment_Implant.dll
</p></td>
<td><p>環境變量信息獲取
</p></td>
</tr>
<tr>
<td><p>CheckMouse_LP.dll
</p></td>
<td width=301><p>CheckMouse_Implant.dll
</p></td>
<td><p>鼠標相關檢測
</p></td>
</tr>
<tr>
<td><p>CheckKeyboard_LP.dll
</p></td>
<td width=301><p>CheckKeyboard_Implant.dll
</p></td>
<td><p>鍵盤相關檢測
</p></td>
</tr>
<tr>
<td><p>NetBios_LP.dll
</p></td>
<td width=301><p>NetBios_Implant.dll
</p></td>
<td><p>網絡共享查看
</p></td>
</tr>
<tr>
<td><p>NetGetDCName_LP.dll
</p></td>
<td width=301><p>NetGetDCName_Implant.dll
</p></td>
<td><p>網絡主機名獲取
</p></td>
</tr>
<tr>
<td><p>Scheduler_LP.dll
</p></td>
<td width=301><p>Scheduler_Implant.dll
</p></td>
<td><p>計劃任務設置
</p></td>
</tr>
<tr>
<td><p>AdUser_LP.dll
</p></td>
<td width=301><p>AdUser_Implant.dll
</p></td>
<td><p>添加賬戶
</p></td>
</tr>
<tr>
<td><p>ArpScan_LP.dll
</p></td>
<td width=301><p>ArpScan_Implant.dll
</p></td>
<td><p>ARP掃描
</p></td>
</tr>
<tr>
<td><p>PacketRedirect_LP.dll
</p></td>
<td width=301><p>PacketRedirect_Implant.dll
</p></td>
<td><p>數據包重定向
</p></td>
</tr>
<tr>
<td><p>PacketScan_LP.dll
</p></td>
<td width=301><p>PacketScan_Implant.dll
</p></td>
<td><p>數據包掃描
</p></td>
</tr>
<tr>
<td><p>RegKeys_LP.dll
</p></td>
<td width=301><p>RegKeys_Implant.dll
</p></td>
<td><p>注冊表操作
</p></td>
</tr>
<tr>
<td><p>RegQuery_LP.dll
</p></td>
<td width=301><p>RegQuery_Implant.dll
</p></td>
<td><p>注冊表鍵值內容獲取
</p></td>
</tr>
<tr>
<td><p>procMon _LP.dll
</p></td>
<td width=301><p>procMon_Implant.dll
</p></td>
<td><p>進程監控
</p></td>
</tr>
<tr>
<td><p>RemoteExecute_LP.dll
</p></td>
<td width=301><p>RemoteExecute_Implant.dll
</p></td>
<td><p>遠程執行文件
</p></td>
</tr>
|
安天CERT根據分析出的部分實體文件功能和文件列表進行梳理,再加上之前卡巴斯基[7]和安天[1]對方程式插件的分析,整理了這些功能插件在攻擊過程中可能形成的組合,并繪制了"方程式組織主機作業模塊積木圖"。從圖中可以看出攻擊者通過對這些插件進行組合來完成相應的功能,這些插件體現了如下架構風格--不編寫功能高度復雜的單一木馬,而是把功能拆解成高度獨立的小模塊,這種拆解的粒度,幾乎到了"原子化"的程度,即使簡單如獲取系統信息的操作,也把類似獲取環境變量、語言集、網絡狀態等都作為一個獨立的小模塊,這將保證系統作業可以完全按需展開,從而最大化的保證作業的謹慎和靜默。從對主機安全環境的逃逸和對抗來看,這批插件的編譯時間為2007年,從反病毒技術發展上來看,正是主機主動防御技術走入成熟的階段。主動防御技術普遍采用行為加權的思路對未知文件進行判定,但這些完成這種"原子"操作的模塊,是不會累加到閾值的。這種單獨功能片段不僅在當時的情況下很難被發現,即使從現代的動靜態檢測角度上來看也很難被發現。每個單獨功能片段不具任何明顯的惡意功能,只有總調度平臺將各功能插件協調使用才會組合出各種作業能力。這種作業方式,也會導致安全廠商很難獲取到完整的模塊,而在沒有有效Loader的情況下,這些模塊很難在沙箱中被加載起來,從而也很難有效地進行行為分析,其比那些探測虛擬環境從而拒絕執行的木馬更難以分析。
從文件名上來看,這些模塊的功能規劃得非常清晰。當然在實際作業中,這些DLL可能會以其他的一些形態表現出來,其中包括可能使用竊取的數字證書進行簽名。在這種情況下,部分驅動文件的Version信息預計也會被定制為對應的數字證書信息,其使用的文件名,可能與其偽裝的系統或應用的風格一致,或者使用類似震網[12]、毒曲[13]和火焰[14]中使用的偽裝成預編譯或者臨時文件的技巧。
A2PT事件
|
使用過的簽名信息
|
命名規律
|
Stuxnet
|
JMicron Technology Corp
|
仿冒系統文件如:MRxCls.sys,S7HKIMDX.DLL,comspol32.ocx;按照Windows命名規律偽裝成oem、和mdm開頭的pnf預編譯文件;偽裝成臨時文件。
|
Realtek Semiconductor Corp
|
Flame
|
亞洲誠信數字簽名測試證書
|
仿冒系統文件名,如:MSSECMGR.OCX,icsvntu32.ocx,FRAGWIZ.OCX
|
Duqu
|
HON HAI PRECISION INDUSTRY CO. LTD
|
仿冒系統文件名,如:adpu321.sys,igdkmd16b.sys,iaStor451.sys
|
C-Media Electronics Incorporation
|
Equation
|
尚未發現
|
仿冒系統文件名,如:mstcp32.sys,DXGHLP16.SYS,tdi6.sys;偽裝成Dat文件。
|
表 4 - 3 系列 A2PT 行動中樣本使用的數字簽名和場景中的文件命名風格
當然,這些模塊也可能是以采用文件不落地的方式進行投放的,其直接運行在內存中,而沒有相應的文件實體。

圖 4 - 3 方程式組織主機作業模塊積木圖
"DanderSpritz"一詞在"棱鏡"事件中曾被曝光,在ANT中的"FIREWALK"[16]工具中也提及到了DNT的"DanderSpritz",DNT與ANT同屬于NSA的網絡組織。類似這種攻擊裝備可被用于多種作業場景,通過"FIREWALK"[16]工具的網絡流量采集和注入使得受害主機與攻擊者的遠程控制中心建立聯系,使得遠控變成了抵近戰術作業,如,通過物流鏈劫持或者在內部節點上插入或替換設備,只要啟動遠控工具,就可以達成就近控制和人工作業相結合的攻擊方式。

圖 4 - 4 斯諾登曝光的NSA-ANT網絡武器FIREWALK(安天公益翻譯小組譯)
NSA-ANT網絡武器最早在2013年斯諾登事件中曝光,共包含48個攻擊武器,隨著事件的發酵,不斷有媒體和組織對其進行曝光,安天安全分析工程師根據目前曝光的全部資料和技術分析嘗試初步繪制了相關攻擊裝備的圖譜。

圖 4 - 5 NSA-TAO攻擊裝備體系(完善中)
5?? 部分組件與插件分析(繼續完善中)
通過一段時間的跟進分析安天CERT發現此次曝光的插件具有模塊化和反檢測特點,安天CERT根據現有分析情況總結了這批攻擊插件的三個特點:
1.???????? 各個插件在DllMain函數中均不直接實現惡意行為。基于沙箱的威脅檢測系統在檢測DLL形態PE文件時,通常會調用Windows API LoadLibrary() 來實現動態加載待檢測對象,執行待檢測對象的DllMain函數功能,觸發待檢測對象動態行為。但對于這些方程式插件,由于DllMain函數并不表現惡意行為(如 圖 5-1 所示),很容易被沙箱視作非惡意程序。

圖 5 - 1 DllMain函數并沒有惡意功能
2.???????? 各插件的導出函數中均不直接實現惡意功能。這些方程式插件均只提供4個按序號(而不是按名稱)導出的函數。在其函數功能中,第1個導出函數負責接收調用者以特定數據結構傳遞的回調函數指針或參數(如 圖 5-2 所示);第2個導出函數負責在必要釋放已申請資源;第3個導出函數根據調用參數返回其核心功能函數指針;第4個導出函數負責填寫調用者提供的數據結構、向調用者傳遞插件版本信息。除了第4個導出函數未對參數進行嚴格判斷而可能因訪問空指針產生異常外,各插件的導出函數均不直接實現惡意功能,基于沙箱的威脅檢測系統無法通過調用各導出函數觸發其惡意行為,從而將其視作非惡意程序。

圖 5 - 2 i1函數中的回調函數指針或參數
3.???????? 各個插件均只實現最基本能力。這些方程式插件均只實現最基本的功能,即使分析人員掌握了插件的調用方法,傳遞正確的調用參數,也只能執行最基本的程序功能,并在回調函數得到程序功能的中間結果(如進程名稱、模塊名稱、用戶密碼),如果不是非常有經驗的分析人員,是很難將這些程序功能與正常程序的功能實現區分開。方程式攻擊組織這樣設計插件,除了考慮到框架的可擴展性和功能剪裁的方便性等因素之外,很可能是以此繞過某些反病毒引擎的靜態檢測機制。
5.1?Processinfo插件遍歷進程模塊
由于這批插件的復雜性,安天CERT挑選了其中相對較小的文件以便于分析。通過分析發現,用于實現對指定進程的模塊遍歷,并調用上層模塊預設的回調函數。
5.1.1??樣本標簽
病毒名
|
Trojan/Win32.EquationDrug
|
原始文件名
|
processinfo_Implant9x.dll
|
MD5
|
6042EA9707316784FBC77A8B450E0991
|
處理器架構
|
X86-32
|
文件大小
|
8
KB (8,192 字節)
|
文件格式
|
BinExecute/Microsoft.DLL[:X86]
|
時間戳
|
45A40EC7->2007-01-10
05:53:11
|
表 5 - 1 樣本標簽

5.1.2 主要功能
本插件提供四個基于序號導出的函數。
表 5 - 2 主要功能
序號
</b></p></td>
<td width=384><p><b>功能
</b></p></td>
</tr>
<tr>
<td width=75><p>1
</p></td>
<td width=384><p>設置上層模塊回調函數,創建互斥體
</p></td>
</tr>
<tr>
<td width=75><p>2
</p></td>
<td width=384><p>釋放資源
</p></td>
</tr>
<tr>
<td width=75><p>3
</p></td>
<td width=384><p>返回核心功能函數地址
</p></td>
</tr>
<tr>
<td width=75><p>4
</p></td>
<td width=384><p>獲取插件版本信息
</p></td>
</tr>
</table>

圖 5 - 3 ?1號導出函數 設置上層模塊回調函數

圖 5 - 4 ?3號導出函數 返回核心功能函數地址

圖 5 - 5 ?4號導出函數 獲取插件版本信息

圖 5 - 6 遍歷指定進程,默認為當前進程

圖 5 - 7 遍歷指定進程模塊,計算模塊對應文件HASH(SHA1)
5.2???????? kill_Implant插件殺進程模塊
該模塊是另一個相對較小的文件,安天CERT通過分析發現,該插件主要功能為根據傳入的進程ID來結束對應進程。
5.2.1????????? 樣本標簽
表 5 - 3 樣本標簽
5.2.2????????? 主要功能
模塊調用者傳遞進來進程ID,該模塊利用函數OpenProcess獲取句柄,再利用函數TerminateProcess結束對應進程。

圖 5 - 8 結束進程
5.3???????? GROK鍵盤與剪貼版記錄器驅動
本次泄露的文件除DLL插件外還有一些EXE格式,安天CERT發現其中幾個EXE文件與之前方程式平臺中的GROK組件相同,本次曝光的版本為1.2.0.1,均可以從資源段中解密并釋放鍵盤與剪貼版記錄器驅動msrtdv.sys。
5.3.1????????? 樣本標簽
表 5 - 4 樣本標簽
病毒名
</p></td>
<td width="59%"><p>Trojan/Win32.EquationDrug
</p></td>
</tr>
<tr>
<td width="41%"><p><b>原始文件名</b>
</p></td>
<td width="59%"><p>msrtdv.sys
</p></td>
</tr>
<tr>
<td width="41%"><p><b>MD5</b>
</p></td>
<td width="59%"><p>6A4461AF87371B89D240A34846A7BC64
</p></td>
</tr>
<tr>
<td width="41%"><p><b>處理器架構</b>
</p></td>
<td width="59%"><p>X86-32
</p></td>
</tr>
<tr>
<td width="41%"><p><b>文件大小</b>
</p></td>
<td width="59%"><p>36.3
KB (37,248 字節)
</p></td>
</tr>
<tr>
<td width="41%"><p><b>文件格式</b>
</p></td>
<td width="59%"><p>BinExecute/Microsoft.SYS[:X86]
</p></td>
</tr>
<tr>
<td width="41%"><p><b>時間戳</b>
</p></td>
<td width="59%"><p>0x4B7F1480->2010-02-20
06:45:20
</p></td>
</tr>
|
該惡意代碼樣本是鍵盤記錄器及剪貼版監視工具,在之前友商報告中曾經提到過有相似功能的惡意代碼,下面對其相似之處進行對比。
5.3.2????????? 版本信息
樣本包含版本信息,文件版本為5.1.1364.6430,源文件名為msrtdv.sys,文件描述為MSRTdv interface driver。其中文件版本低于之前已經曝光的版本5.3.1365.2180,源文件名與文件描述的不同在于將兩個字母"d"和"v"的位置互換,一個是"mstrdv.sys",另一個是"msrtvd.sys"。

圖 5 - 9 本次泄露版本與之前曝光版本的版本信息
5.3.3????????? 主要功能
兩個不同版本的樣本其主要功能相同,通過給轉儲程序建立專用的進程來匯集所收集的數據,每隔30分鐘,將結果壓縮到文件"%TEMP%tm154o.da"。之前曝光的版本中,包含多個IoControlCode,分別對應不同的功能。

圖 5 - 10 之前曝光版本的主要功能代碼
而本次泄露的樣本中,IoControlCode雖然只有0x22002C,但一些主要功能仍然存在,可以通過反編譯后的代碼看出它們的相同之處。

圖 5 - 11 之前曝光版本的主要功能代碼

圖 5 - 12 本次泄露版本的主要功能代碼
從以上分析比較中可以發現,本次泄露的惡意代碼樣本應為較低版本,版本信息低于之前卡巴斯基與安天分析曝光的版本,功能也弱于相關版本。在影子經紀人泄露出的文件DanderSpritz_All_Find.txt中,GROK的版本號也清楚的說明了這個問題,影子經紀人所釋放出的只是GROK組件的低版本部分文件。但這批文件信息的豐富程度,則是將"千年暗室"打開了一個難得的縫隙。

圖 5 - 13 GROK組件的不同版本號
6????????? 小結
此次"影子經紀人"釋放的Equation Group中的61個文件,對于全球網絡安全研究者分析厘清EQUATION相關攻擊平臺的組成和架構有很大幫助。特別是能夠觀察其惡意代碼的Debug版本,這在常規超級攻擊組織的對抗中是很難想象的,這是一次難得從"內部"觀察發動方程式組織的機會。經過初步打通和分析相關曝光信息,安天CERT看到、分析和梳理了該攻擊平臺的更多信息,包括如數百個攻擊插件以及"DanderSpritz"攻擊平臺。
安天CERT分析相關文件后,判斷其中部分組件與之前曝光的GROK組件為同類樣本,而這些組件均為早期的低版本。另外,安天CERT的分析結果也表明"DanderSpritz"與Equation Drug使用了相同的組件和架構設計,"DanderSpritz"可能就是方程式組織使用的Equation Drug攻擊平臺,而其模塊"原子化"的設計思路,讓更多人可以看到該方程式組織支撐體系的龐大精密,作業過程的嚴密謹慎,以及其在武器研發使用中,繞過安全防御手段異常豐富的經驗。
五年前,在安天展開針對Flame(火焰)蠕蟲的馬拉松分析中,有專家曾提醒我們不要"只見樹葉,不見森林",這讓安天的安全工程師們深刻地反思了傳統分析工程師"視野從入口點開始"的局限性,從那時開始嘗試建立從微觀見宏觀的分析視野。安天CERT的安全工程師們通過本次分析,發現自己依然在迷宮中掙扎--或許這就是面對超級攻擊者時,安全分析團隊面臨的分析常態。
過去的四年,針對方程式組織的持續跟蹤分析,是安天了解最高級別攻擊者(即A2PT--高級的APT)的極為難得的經歷。深入研究這種具有超級成本支撐和先進理念引領的超級攻擊者,對于改善和增強安天探海、智甲、追影等高級威脅檢測和防御產品的防御能力也非常關鍵。安天也在深入思考和探索面對行業和地域的大規模態勢感知系統,即達成"以資產防護為核心"的有效能力,尤其是面對海量事件鎖定關鍵威脅和高級攻擊者的能力。但對于應對A2PT攻擊者來說,無論是有效改善防御,還是進行更為全面深入系統的分析,都不是一家安全企業能夠獨立承載的,此中還需要更多協同和接力式分析,而不是重復"發明輪子"。正是基于這種共同認知,在不久之前的第四屆安天網絡安全冬訓營上,安天和360企業安全等安全企業向部分與會專家介紹了能力型安全廠商分析成果互認的部分嘗試。唯有中國的機構用戶和能力型安全廠商形成一個積極互動的體系,才能更好的防御來自各方面的威脅。
我們警惕,但并不恐懼。對于一場防御戰而言,除了扎實的架構、防御和分析工作之外,必勝的信念是一個最大的前提。
無形者未必無影,安天追影,畫影圖形。
附錄一:參考資料
附錄二:關于安天
安天從反病毒引擎研發團隊起步,目前已發展成為以安天實驗室為總部,以企業安全公司、移動安全公司為兩翼的集團化安全企業。安天始終堅持以安全保障用戶價值為企業信仰,崇尚自主研發創新,在安全檢測引擎、移動安全、網絡協議分析還原、動態分析、終端防護、虛擬化安全等方面形成了全能力鏈布局。安天的監控預警能力覆蓋全國、產品與服務輻射多個國家。安天將大數據分析、安全可視化等方面的技術與產品體系有效結合,以海量樣本自動化分析平臺延展工程師團隊作業能力、縮短產品響應周期。結合多年積累的海量安全威脅知識庫,綜合應用大數據分析、安全可視化等方面經驗,推出了應對高級持續性威脅(APT)和面向大規模網絡與關鍵基礎設施的態勢感知與監控預警解決方案。
全球超過三十家以上的著名安全廠商、IT廠商選擇安天作為檢測能力合作伙伴,安天的反病毒引擎得以為全球近十萬臺網絡設備和網絡安全設備、超過五億部手機提供安全防護。安天移動檢測引擎是全球首個獲得AV-TEST年度獎項的中國產品。安天技術實力得到行業管理機構、客戶和伙伴的認可,安天已連續四屆蟬聯國家級安全應急支撐單位資質,亦是中國國家信息安全漏洞庫六家首批一級支撐單位之一。安天是中國應急響應體系中重要的企業節點,在紅色代碼、口令蠕蟲、震網、破殼、沙蟲、方程式等重大安全事件中,安天提供了先發預警、深度分析或系統的解決方案。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.jmbmsq.com/185/
这里只有精品视频
| |
暫無評論