修改硬盤固件的木馬 探索方程式(EQUATION)組織的攻擊組件
時間 : 2015年02月18日 來源: 安天
1 背景
2015年2月18日,安天實驗室根據緊急研判,對被友商稱為“方程式(Equation)”的攻擊組織所使用的攻擊組件,開始了初步的分析驗證。后于2月25日正式組建了跨部門聯合分析小組,于3月4日形成本報告第一版本。
事件相關背景為:卡巴斯基安全實驗室在2月16日起發布系列報告(以下簡稱“友商報告”),披露了一個可能是目前世界上存在的最復雜的網絡攻擊組織>——“方程式”組織(Equation Group)[1]。據卡巴斯基實驗室稱,該組織使用的C&C早在1996年就被注冊,這暗示了該組織可能已經活躍了20年之久。多年以來,他們因總能比其他組織早發現漏洞,從而具有絕對的優勢。該組織擁有一套用于植入惡意代碼的超級制式信息武器庫(在友商報告中披露了其中6個),其中包括兩個可以對數十種常見品牌的硬盤固件重編程的惡意模塊,這可能是該組織掌握的最具特色的攻擊武器,同時也是首個已知的能夠感染硬盤固件的惡意代碼。在2月17日和2月19日的友商報告中,先后發布了其中2個模塊的詳細分析結果,它們分別是Fanny[2]和DoubleFantasy[3]。卡巴斯基根據相關線索分析,認為被攻擊目標包括俄羅斯、印度、中國等國家,而相關媒體根據卡巴斯基的報告,推斷出該攻擊組織可能與美國情報機構相關。
鑒于樣本的復雜性,以及攻擊硬盤固件的特殊特點,分析進展極為緩慢,目前將有限的分析工作對外分享,旨在推動更多的業內參與協作。同時對友商報告中已經充分論述的內容,本報告未作更多引用和重復。因此建議讀者先閱讀友商報告,再閱讀本報告以給予批評指正。
2 Equation組織使用的組件
Equation組織的被發現的武器庫中至少有6件“裝備”,它們是:EquationLaser、EquationDrug、DoubleFantasy、TripleFantasy、Fanny和GrayFish。安天的工程師稱其為“組件”。除了這6個組件外,友商報告還提供了該組織有可能用到的其它惡意代碼程序的哈希,這些哈希對應的程序包括:與EquationDrug相似的EQUESTRE、鍵盤記錄器程序GROK keylogger、DoubleFantasy安裝程序和LNK漏洞利用程序_SD_IP_CF.dll,以及需要重點關注的能夠對硬盤重新編程的模塊nls_933w.dll。
組件名稱 | 說明 | 時間 | |
EquationLaser | Equation組織早期使用的植入程序,大約在2001至2004年間被使用。兼容Windows 95/98系統。 | 2001-2003 | |
EquationDrug | 該組織使用的一個非常復雜的攻擊組件,用于支持能夠被攻擊者動態上傳和卸載的模塊插件系統。懷疑是EquationLaser的升級版。 | 2003-2013 | |
DoubleFantasy | 一個驗證式的木馬,旨在確定目標為預期目標。如果目標被確認,那么已植入惡意代碼會升級到一個更為復雜的平臺,如EQUATIONDRUG或GRAYFISH。 | 2004-2012 | |
TripleFantasy | 全功能的后門程序,有時用于配合GRAYFISH使用??雌饋硐袷荄OUBLEFANTASY的升級版,可能是更新的驗證式插件。 | 2012-至今 | |
Fanny | 創建于2008年的利用USB設備進行傳播的蠕蟲,可攻擊物理隔離網絡并回傳收集到的信息。Fanny被用于收集位于中東和亞洲的目標的信息。一些受害主機似乎已被升級到DoubleFantasy,然后又升級為EQUATIONDRUG。Fanny利用了兩個后來被應用到Stuxnet中的0day漏洞。 | 2008-2011 | |
GrayFish | Equation組織中最復雜的攻擊組件,完全駐留在注冊表中,依靠bootkit在操作系統啟動時執行。 | 2008-至今 | |
Equation組織的6個組件的攻擊示意圖:

圖1 組件關系示意圖
Equation組織攻擊時,選擇Fanny或DoubleFantasy或TripleFantasy作為攻擊前導,當確認被攻擊端是攻擊者的預期目標后,會使用更復雜的組件EquationDrug或GrayFish。安天分析小組目前將重點放在攻擊前導組件(DoubleFantasy)、更復雜的組件(EquationDrug和GrayFish)。同時對具有硬盤固件重新編程功能的nls_933w.dll進行分析。
3 組件DoubleFantasy分析
組件DoubleFantasy是用來確認被攻擊目標的,如果被攻擊的目標屬于被Equation組織感興趣或關注的領域,那么更加復雜的其他組件就會從遠端注入到被攻擊的機器中。
友商報告已經對組件DoubleFantasy進行了詳細分析,安天分析小組原本計劃對組件DoubleFantasy進行分析驗證,但在驗證的過程中,分析小組發現該組件是以往分析過的,并找到了其他的關聯的惡意代碼;同時,安天也發現了友商報告未見披露的信息。
3.1 檢測安全軟件
組件DoubleFantasy枚舉注冊表鍵值,查找系統是否安裝了安全軟件,查詢的安全軟件列表存在資源節中,使用0x79異或加密。在友商報告中給出了其檢測是否存在的安全軟件列表,共計10種,而安天分析小組發現,實際上該組件一共檢測13種安全軟件的存在,除友商報告披露的10種產品外,還有360、BitDefender和Avira三家廠商的產品。

鑒于其中360安全衛士主要用戶均在中國,這也進一步驗證了中國也是Equation組織攻擊的目標之一。
3.2 回傳信息
DoubleFantasy收集系統信息,并回傳給攻擊者,回傳格式為:
000:MAC地址001:IP地址......019:當前時間
回傳的詳細信息如下:
標號 | 說明 | 標號 | 說明 | 標號 | 說明 |
000 | MAC地址 | 007 | 系統補丁信息(CSDVersion,例如sp1) | 014 | 網絡連接類型 |
001 | IP地址 | 008 | CurrentBuildNumber(例如2600) | 015 | 安裝的軟件信息 |
002 | 樣本版本號 | 009 | 系統CurrentVersion(5.1) | 016 | 未知 |
003 | 樣本id | 010 | ProductID | 017 | 此值不存在 |
004 | 代理設置信息 | 011 | 位置信息1 | 018 | 32位或64位 |
005 |
注冊信息1 (RegisteredOwner) |
012 | 位置信息2 | 019 |
當前時間 |
006 |
注冊信息2 (RegisteredOrganization) |
013 | 系統目錄 |
3.3 通訊協議
DoubleFantasy的被控端返回包格式是第一字節不加密,后面的數據加密。舉例0x42指令如下:
0x42指令分支詳細功能
功能:重新上線,初始化通訊密鑰,刪除自身,清理感染痕跡。
控制端發包格式:第一字節為指令代碼0x42,第二字節為指令分支,分別有3種:00立即重新上線,01初始化通訊密鑰,Sleep 60秒后重新上線,02刪除自身,清除感染痕跡。
被控端返回包格式:無。
3.4 新的版本、C&C、密鑰
友商報告給出了相關組件的版本、C&C列表和密鑰,經安天進一步分析,獲得了更多相關信息。下文中綠色為友商報告中信息,紅色(加粗)為安天分析出的新的信息。
版本列表:
8.1.0.4 (MSREGSTR.EXE)
008.002.000.006
008.002.001.001
008.002.001.004
008.002.001.04A (subversion "IMIL3.4.0-IMB1.8.0")
008.002.002.000
008.002.003.000
008.002.004.000
008.002.005.000
008.002.005.001
008.002.006.000
011.000.001.001
012.001.000.000
012.001.001.000
012.002.000.001
012.003.001.000
012.003.004.000
012.003.004.001
013.000.000.000
C&C如下:
advancing-technology[.]com
avidnewssource[.]com
businessdealsblog[.]com
businessedgeadvance[.]com
charging-technology[.]com
computertechanalysis[.]com
config.getmyip[.]com - SINKHOLED BY KASPERSKY LAB
globalnetworkanalys[.]com
melding-technology[.]com
myhousetechnews[.]com - SINKHOLED BY KASPERSKY LAB
newsterminalvelocity[.]com - SINKHOLED BY KASPERSKY LAB
selective-business[.]com
slayinglance[.]com
successful-marketing-now[.]com - SINKHOLED BY KASPERSKY LAB
taking-technology[.]com
techasiamusicsvr[.]com - SINKHOLED BY KASPERSKY LAB
technicaldigitalreporting[.]com
timelywebsitehostesses[.]com
www.dt1blog[.]com
www.forboringbusinesses[.]com
Ign***list.com
Dat***cemgmt.net
Imp***today.com
Bud***nessnews.com
新的密鑰:
37 08 EF 89 29 A7 4B 6B AB 3E 5D 03 F6 B0 B5 B3
66 39 71 3C 0F 85 99 81 20 19 35 43 FE 9A 84 11
8B 4C 25 04 56 85 C9 75 06 33 C0 5E C2 08 31 F6
32 EC 89 D8 0A 78 47 22 BD 58 2B A9 7F 12 AB 0C
組件DoubleFantasy通常是受害者被Equation組織感染的第一步,通過與后門的通信以及對不同系統參數的檢查來確認受害者的信息。受害者一旦被確認,Equation組織將使用更復雜的組件EquationDrug或Grayfish。
4 組件EquationDrug分析
組件EquationDrug是一個很復雜的模塊。其存活時間有近10年,后來被GrayFish升級給代替了。安天在分析中發現兩個模塊中的一些文件名稱有相同處,從混淆加密等方面來看也有多處手法相同。它們都是從資源解密、解壓縮和釋放文件。分析中發現在資源里有一個SYS和一個VXD文件。VXD是Windows 9x下的驅動機制,所在可以認定這個模塊也有感染Windows 9x下的能力。其EquationDrug是一個插件平臺,它具有安裝與卸載插件功能。

圖2 組件EquationDrug的創建與調用關系圖
模塊名稱 | 功能 |
msnadt.exe | 文件功能主要為釋放文件、解密資源、判斷系統類型、注入代碼到指定進程和加載驅動等功能。 |
MSDIRECTX.EXE | 創建INSTV3.BAT并運行自刪除。 |
MSCFG32.exe | 加載MSCFG32.DLL,添加和修改注冊表。 |
MSCFG32.DLL | 該文件會添加和修改注冊表,釋放unity.dll文件。與驅動文件有關系,含有網絡功能。 |
unity.dll | 有大量文件操作和注冊表操作 |
MSNDSRV.SYS MSSVC32.VXD |
功能基本相同,但VXD是在windows9.x下用的,主要功能是hook、網絡監聽和寫文件等。還會判斷系統中是否有MSlog32.dat,有就打開寫入數據,沒有就創建一個新的。 |
INSTV3.BAT INSTV4.BAT |
自刪除文件。 |
4.1 檢測安全軟件
其枚舉注冊表鍵值,查找系統是否安裝了安全軟件,查詢的安全軟件列表存在資源節中。
其所檢測的安全軟件比DoubleFantasy組件更多,且類型也更加豐富,但同時其檢測的中國安全軟件是瑞星(Rising),但并未檢測當前更為流行的360。因此也可以驗證前文關于這個組件已經被更新組件替代的結論。相關檢測的注冊表鍵值如下:
Zone Labs\TrueVector\
Zone Labs\ZoneAlarm\
KasperskyLab\
Network Ice\BlackIce\
Agnitum\Outpost Firewall\
Sygate Technologies, Inc.\Sygate Personal Firewall\
Norman\
Data Fellows\F-Secure\
PWI, Inc.\
rising\
Softwin\
network associates\tvd\shared components\on access scanner\behaviourblocking\FileBlockEnabled_27!=0
network associates\tvd\shared components\on access scanner\behaviourblocking\FileBlockEnabled_28!=0
network associates\tvd\shared components\on access scanner\behaviourblocking\FileBlockEnabled_29!=0
network associates\tvd\shared components\on access scanner\behaviourblocking\FileBlockEnabled_30!=0
McAfee\ePolicy Orchestrator\Application Plugins\VIRUSCAN8600
Sophos\
CA\CAPF\
CA\HIPSEngine\
Cisco\
Symantec\IDS\
Symantec\Norton 360\
Symantec\Internet Security\SuiteOwnerGuid\
Symantec\Norton AntiBot\
Symantec\Symantec Endpoint Protection\
Tiny Software\Tiny Firewall\
CyberMedia Inc\Guard Dog\
McAfee\Guard Dog\
McAfee\McAfee Firewall\
McAfee\Personal Firewall\
McAfee.com\Personal Firewall\
Network Associates\McAfee Fire\
Kerio\
BullGuard Ltd.\BullGuard\
TheGreenBow\
Panda Software\Firewall\
TrendMicro\PC-cillin\
ComputerAssociates\eTrust Suite Personal\pfw\
Grisoft\Firewall\
4.2 驅動模塊MSNDSRV.SYS分析
1. 驅動初始化的時候從注冊表中遍歷了所有的網卡,然后調用函數NdisRegisterProtocol向NDIS庫注冊了一個NDIS協議相關的結構。注冊后該驅動就可以收到本機上的所有的網絡流量,這一點類似于WinPcap的捕包機理。相關代碼如下:

2. 修改了KeServiceDescriptorTable中的函數的地址。

圖3 原始的KeServiceDescriptorTable中的函數地址

圖4 修改后的KeServiceDescriptorTable中的函數地址
修改后的函數地址只是包含一個JMP指令。 如果KeServiceDescriptorTable中的函數不是它要hook的目標則直接跳回原始函數的地址,否則跳到驅動自己的函數中去。
如函數nt!NtAcceptConnectPort在KeServiceDescriptorTable中它的地址是820742b1。
該處的指令如下:
如函數nt!NtAcceptConnectPort在KeServiceDescriptorTable中它的地址是820742b1。
該處的指令如下:
820742b1 2eff25b8420782 jmp dword ptr cs:[820742B8h] |
820742B8就是NtAcceptConnectPort對應的地址。而函數NtTerminateProcess在KeServiceDescriptorTable中的地址是0x81cf9ebd.該處的指令為:
81cf9ebd 2eff25c49ecf81 jmp dword ptr cs:[81CF9EC4h] |
81CF9EC4中包含的地址為b1fd6eae,該地址指向驅動的一個函數。目前驅動hook的函數如下:
NtClose
NtCreateFile
NtCreateKey
NtCreateProcess
NtCreateProcessEx
NtCreateThread
NtEnumerateKey
NtOpenFile
NtOpenKey
NtOpenProcess
NtQueryAttributesFile
NtQueryDirectoryFile
NtQueryDirectoryObject
NtQueryFullAttributesFile
NtQueryKey
NtQuerySystemInformation
NtSetInformationFile
NtTerminateProcess
5 組件GrayFish分析
GrayFish是Equation組織中最復雜的攻擊組件,是EquationDrug的新一代版本,安天分析小組認為其最重要的特點是:不依靠文件載體,而是完整的存在于注冊表中,依靠bootkit在操作系統啟動時執行,這一機制穿透了安全產品以文件為檢測對象的機制,也穿透了相關基于白名單和可信計算的解決方案。

組件GrayFish的資源段中包含13個加密資源,均通過同一段解密算法進行解密:

解密后的13個文件中有5個驅動文件(sys)、2個動態鏈接庫文件(dll)、4個包含注冊表數據的文件、1個含有字符串“services.exe”的配置文件及1個加密的數據文件。
動態調試后發現,其中3個驅動文件hrilib.sys、msndsrv.sys及netvt.sys是由原始樣本釋放,包含網絡驅動及注冊表相關操作函數。mscfg32_ks.dll調用mscfg32.dll,擁有創建遠程線程、獲取系統信息、創建和刪除注冊表鍵值等功能。除已釋放的三個驅動文件外,資源102中含有對注冊表進行操作的函數,而DesertWinterDriver.sys中包含對IoControlCode的比較,具體功能有待分析。

另外,原樣本會生成批處理用以刪除自身,該批處理文件名與EquationDrug用以自刪除的文件名完全相同,這也說明二者之間具有密切的聯系。
6 硬盤固件重新編程模塊nls_933w.dll分析
nls_933w.dll是具有硬盤固件重新編程能力的模塊,由于硬盤固件是一個安天分析小組之前缺少儲備的領域,因此分析進展非常緩慢。從目前分析來看,當nls_933w.dll模塊被其他程序調用后,nls_933w.dll從自身資源釋放win32m.sys驅動文件,win32m.sys驅動文件負責與硬盤控制器進行通信,它能夠判斷硬盤控制器類型,如:IDE、SATA等,根據不同類型的硬盤控制器發送對應的控制指令。因此只要攻擊者熟悉各硬盤廠商規定的ATA指令,那么就可以對硬盤固件進行惡意篡改。

圖5 修改硬盤固件的流程圖
動態調試后安天分析小組發現,該模塊調用函數DeviceIoControl與win32m.sys進行交互。在win32m.sys中,安天分析小組發現多個IoControlCode并分析了它們所對應的功能。

圖6 IoControlCode所對應的功能圖
安天分析小組發現,當IoControlCode為0x870021D0時,nls_933w.dll對硬盤控制器發送ATA控制指令:0xEC,獲取硬盤相關信息。

圖7 獲取硬盤相關信息
調用DeviceIoControl前后內存中的數據對比,調用后返回硬盤信息:


其他的IoControlCode所對應的功能及ATA指令有待進一步分析和發現。
7 攻擊硬盤固件的機理分析
7.1 硬盤的結構和工作原理
不論是傳統的機械硬盤還是固態硬盤,其總體的結構都是相似的。硬盤主要由處理器、緩存、Boot ROM和主存儲介質等幾部分構成,對于機械硬盤,還有電機驅動電路和磁頭控制電路等。其簡化原理框圖如下圖所示:

圖8 硬盤原理框圖
由于硬盤的電路板上已經具有了CPU、內存和ROM,硬盤可以看做是一個小型的計算機系統,在固件的控制下可以有自己的行為。目前常見的硬盤處理器都是基于ARM核心的,新型的硬盤控制器甚至采用多核結構來保證高速的數據傳輸。
硬盤通電時,處理器執行片內的Loader代碼,這部分代碼會加載Boot ROM到緩存中,并執行(對硬盤上的嵌入式處理器來說,就是內存)。Boot ROM可能存放在主控的片內FLASH,獨立的I2C EEPROM,SPI FLASH芯片或者固態硬盤上的NAND FLASH陣列中。Boot ROM得到控制權之后,會依次初始化基本外設,初始化主存儲介質,從主存儲介質上加載固件主體,啟動IDE/SATA總線接口驅動模塊,并進入待命狀態,此時計算機即可對硬盤進行操作。
1) 傳統機械硬盤
對于目前大部分的機械硬盤來說,其固件的主體部分通常存放在盤片上的隱藏扇區中,Boot ROM按照校準數據初始化磁頭組件之后,從隱藏扇區中讀取固件數據,并將控制權轉交給固件主體,固件主體完成自身初始化之后,加載并啟動總線接口驅動模塊。至此,硬盤完成上電啟動過程。
機械硬盤的內部結構如圖所示:
硬盤通電時,處理器執行片內的Loader代碼,這部分代碼會加載Boot ROM到緩存中,并執行(對硬盤上的嵌入式處理器來說,就是內存)。Boot ROM可能存放在主控的片內FLASH,獨立的I2C EEPROM,SPI FLASH芯片或者固態硬盤上的NAND FLASH陣列中。Boot ROM得到控制權之后,會依次初始化基本外設,初始化主存儲介質,從主存儲介質上加載固件主體,啟動IDE/SATA總線接口驅動模塊,并進入待命狀態,此時計算機即可對硬盤進行操作。
1) 傳統機械硬盤
對于目前大部分的機械硬盤來說,其固件的主體部分通常存放在盤片上的隱藏扇區中,Boot ROM按照校準數據初始化磁頭組件之后,從隱藏扇區中讀取固件數據,并將控制權轉交給固件主體,固件主體完成自身初始化之后,加載并啟動總線接口驅動模塊。至此,硬盤完成上電啟動過程。
機械硬盤的內部結構如圖所示:

圖9 機械硬盤組成與結構
(http://jingyan.baidu.com/article/ab0b5630d88efdc15bfa7d60.html)
硬盤的數據存儲在磁盤盤片上,硬盤工作時,主軸帶動盤片高速旋轉,讀寫磁頭懸浮于盤片上方幾微米處,通過巨磁阻效應來進行讀寫操作。傳動手臂通過強磁鐵與線圈構成的音圈電機進行尋道,以定位要讀寫的內容。圖中的返利局彈簧裝置是給傳動手臂提供回復力的,該裝置能夠保證硬盤在斷電的時候,磁頭能夠自動歸位到Park區。Park區有一塊柔軟的支撐墊,可以在硬盤不工作時固定讀寫手臂,以免因外界震動而劃傷盤片。
2) 固態硬盤
與機械硬盤相比,由于沒有機械結構,固態硬盤的結構要簡單不少,通常的固態硬盤都可以用下面的圖來描述:
2) 固態硬盤
與機械硬盤相比,由于沒有機械結構,固態硬盤的結構要簡單不少,通常的固態硬盤都可以用下面的圖來描述:

圖10 固態盤及其控制器結構框圖
(《JMF608SATA III NAND Flash Controller datasheet》)
(《JMF608SATA III NAND Flash Controller datasheet》)
圖中左邊的框是固態硬盤的控制器,右邊是板載外設和NAND FLASH陣列,部分型號的控制器還需要外置的Data Buffer RAM,也就是緩存。從圖中可以看出,控制器本身就可以構成一個完整的計算機系統,其引導過程與機械硬盤類似,在此就不再重復了。
3) 硬盤的接口規范
目前常見的IDE和SATA硬盤都遵循ATA指令集,PC機通過發送ATA命令來對硬盤進行讀寫操作。
ATA技術是一個關于IDE(Integrated Device Electronics)的技術規范族。最初,IDE只是一項以把控制器與盤體集成在一起為主要意圖的硬盤接口技術。 隨著IDE/EIDE得到的日益廣泛的應用,全球標準化協議將該接口自誕生以來使用的技術規范歸納成為全球硬盤標準,這樣就產生了ATA(Advanced Technology Attachment)。ATA發展至今經過多次修改和升級,每新一代的接口都建立在前一代標準之上,并保持著向后兼容性。除了讀寫命令以外,硬盤還支持一些高級功能,比如自我監測功能(SMART),容量設置(HPA)、噪音管理(AAS)等。詳見《ATA/ATAPI Command Set - 2 (ACS-2)》(一部500多頁的大部頭標準文檔?。?br />
3) 硬盤的接口規范
目前常見的IDE和SATA硬盤都遵循ATA指令集,PC機通過發送ATA命令來對硬盤進行讀寫操作。
ATA技術是一個關于IDE(Integrated Device Electronics)的技術規范族。最初,IDE只是一項以把控制器與盤體集成在一起為主要意圖的硬盤接口技術。 隨著IDE/EIDE得到的日益廣泛的應用,全球標準化協議將該接口自誕生以來使用的技術規范歸納成為全球硬盤標準,這樣就產生了ATA(Advanced Technology Attachment)。ATA發展至今經過多次修改和升級,每新一代的接口都建立在前一代標準之上,并保持著向后兼容性。除了讀寫命令以外,硬盤還支持一些高級功能,比如自我監測功能(SMART),容量設置(HPA)、噪音管理(AAS)等。詳見《ATA/ATAPI Command Set - 2 (ACS-2)》(一部500多頁的大部頭標準文檔?。?br />
7.2 硬盤的信息安全脆弱性
特別要值得注意的是,目前大部分硬盤都支持固件升級功能(通過下載微碼命令或者廠商的私有命令實現),用戶可以通過廠商規定的ATA指令來對硬盤驅動器上的固件進行更新。這使得硬盤廠商無需召回有固件bug的產品,而可以在用戶系統上通過軟件工具升級固件,修補缺陷。例如,希捷2008.12月的硬盤有故障,官方發布了固件更新工具和使用說明,使用戶刷新固件解決問題。類似的還有硬盤廠商西部數據的C1門事件。
下圖以Seagate SandForce SF-2200系列固態硬盤為例,說明硬盤固件的升級過程:

圖11 Seagate SandForce SF-2200系列固態硬盤固件升級流程圖
這種通過主機軟件在系統(In System)升級固件的機制使用很方便,但也意味著存在著固件被惡意篡改的可能性。而且這種篡改可以是通過軟件操作,在用戶毫不知情的情況下進行。
如前文所述,硬盤本身就是一套完整的嵌入式系統,其內部的固件獨立于計算機軟硬件而運行。固件完全決定了硬盤的讀寫操作行為,甚至可以在主機不知情的時候自主處理數據。如果攻擊者在硬盤的固件中設計了精巧的代碼,則可以對用戶的讀寫操作進行攔截和干擾,或者通過這種手段獲得系統的最高控制權,而所有這一切都是在硬盤上完成的,計算機前面的用戶、計算機上的軟硬件根本無法感知這一過程,甚至知道也無法干預這樣的動作發生。
如前文所述,硬盤本身就是一套完整的嵌入式系統,其內部的固件獨立于計算機軟硬件而運行。固件完全決定了硬盤的讀寫操作行為,甚至可以在主機不知情的時候自主處理數據。如果攻擊者在硬盤的固件中設計了精巧的代碼,則可以對用戶的讀寫操作進行攔截和干擾,或者通過這種手段獲得系統的最高控制權,而所有這一切都是在硬盤上完成的,計算機前面的用戶、計算機上的軟硬件根本無法感知這一過程,甚至知道也無法干預這樣的動作發生。

圖12 Jasmine開發板結構框圖
以OpenSSD項目(一個以研究性質的開源硬盤項目)中的Jasmine開發板為例,如果攻擊者對某款硬盤的控制器的結構非常了解,包括片上的外設地址空間等信息。則改攻擊者可以通過精心構造的修改版固件來對控制器的某些特定的行為進行攔截,并在數據傳輸途中對緩存DRAM中的數據進行修改。比如攔截ATA讀取命令20h,在讀取指定扇區時篡改緩存中的數據,使計算機實際獲得的數據與磁盤上存儲的內容不符,進而實現自下而上的攻擊效果。這種攻擊方式對來自硬盤的數據流的改寫完全繞過了計算機系統,因此可以在重裝系統甚至低格硬盤之后仍然保持其危害性。
8 小結
時間總是讓人覺得似曾相識,2月16日,農歷臘月二十八,還有兩天就是春節了,關于方程式攻擊組織的相關信息浮出水面。這讓我們想起2003年農歷小年的Slammer蠕蟲、2004五一節的震蕩波蠕蟲、以及去年國慶節前的“破殼”漏洞。但不同的是,此前事件沖擊的是我們的應急速度,而方程式考驗的是我們綜合儲備與能力深度,以及分析耐心。
對安天的分析團隊來說,這是第一次在發布一篇分析報告時如此惴惴不安。在2003年發布Dvldr(口令蠕蟲)分析報告時,我們是那樣急切,希望用戶更快看到我們提供的解決方案;在發布震網分析報告時,我們是那樣盲目,自以為我們的工作已經基本足夠;在發布火焰系列組件分析報告時,我們是那樣放任——既然龐大到分析不過來,就接力式的分析-發布好了。但這一次,完全不同,因為我們一度被卡住了,不因加密、驅動、隱藏,而是因為“硬盤固件”,對于那些經過長期準備而施于一點的攻擊來說,防御者搞清問題的關鍵往往去取決于愿意付出多少人力與時間。
我們自以為是敏銳的,我們很早就在關注嵌入式與固件,我們大講威脅的泛化,但當威脅真正出現于面前之時,我們才發現對手更加先驗和強大,而我們的所謂敏銳何其幼稚。
而同樣令我們憂心忡忡的是,相關事件的報告正在不斷的走形。很多用戶向我們求證和詢問“是不是所有硬盤都已經放入了后門木馬”。
因此盡管我們的分析工作還在持續之中,我們依然要憑借經驗給出下列結論或判斷:
1、 硬件設備的固件可更新機制,是軟硬件系統發展的必然結果,這種機制本身不能被稱之為后門。同時對更多帶有固件系統來說,如果沒有更新機制,那么將導致有問題的版本不能得到補丁,即可能帶來更大的運維成本,也反而可能是一個重要的安全隱患。
2、 綜合安天和友商以及其他機構目前分析結果來推測,相關攻擊中寫入固件的行為發生于前導惡意代碼回傳主機信息,并被遠端判定為有價值目標的情況下,即其并非一個普遍行為,而是一個高等級、有條件的入侵行為。
3、 通過長期的分析摸索,攻擊者完全可以獨立實現相關機理,并不一定需要入侵硬盤廠商獲取技術文獻,甚至靠硬盤廠商主動提供技術文獻。
4、 其寫入硬盤固件,關鍵是用于實現潛伏與長期存在,但上層的作業能力依然存在于主機系統中,而且可以通過網絡靈活獲取其他作業模塊。
5、 鑒于相關國家此前的行為,我們也有理由懷疑,同樣的組件,可能被用于物流鏈劫持,即在特定目標采購、返修主機或硬盤的過程中注入。但基于其作業手法和風險分析,我們有理由認為,對方程式這樣的對手來說,這種Bootkit+固件的作業手法,通常不會進行批量作業。
6、 但后續我們同樣要警惕的是Bruce Schneier所警告的 “越來越多戰爭中的戰術行為被應用于更廣泛的網絡空間環境中”,而且新的手法一經曝光就會對黑產產生強烈的啟迪效應,從而使威脅泛濫。
7、 相關攻擊確實體現了相關供應鏈的安全盲點,對于硬盤固件是否有有效的簽名驗證機制,而同時已經寫入硬盤的固件,目前來看我們沒有找到看到低成本的無條件讀取的接口。類似的設計就給安全分析人員進行檢測驗證帶來了困難。
防御陣地的規劃,不能依賴于臆想對手。客觀看待安全與發展的關系,深入具體的分析威脅,研判對手的策略和路徑,永遠是我們應對威脅的支點。