近期發現的間諜網絡“方程小組(Equation Group)”最令人震驚的部分就是其能用惡意代碼對硬盤固件進行重編程的神秘模塊。曝光此事的卡巴斯基研究人員稱,這一顛覆計算機胃腸道一樣的存在——硬盤固件的能力,他們“聞所未聞”。
這種黑客工具被認為是美國國家安全局(NSA)的杰作,它通過重寫硬盤固件獲得對計算機系統神一般的控制權,即使軟件更新都不能阻止它長期潛伏。模塊被命名為“nls_933w.dll”,在卡巴斯基發現的間諜平臺“方程毒藥(EquationDrug)”和“角鯊(GrayFish)”中都有用到,是此類模塊中第一個被發現的。
它還具備另一個能力:在硬盤上開辟隱藏存儲空間以備攻擊者在一段時間后取回盜取的數據。這一能力使得像方程小組一類的間諜,通過將想要獲取的文檔藏入不會被加密的存儲空間來規避硬盤加密。
卡巴斯基目前為止已發現了500個方程小組的受害者,但只有5個在其系統上留存有固件重寫模塊。重寫模塊似乎僅在有特殊監視價值的重要系統上留存。卡巴斯基全球研究與分析團隊主管科斯廷·拉尤認為,這些是未接入互聯網且用硬盤加密進行了保護的高價值計算機。
關于固件重寫模塊,目前了解的有如下幾點:
工作原理
硬盤都有一個控制器,基本上相當于一臺微型電腦,包含了一塊存儲芯片或是閃存ROM(只讀存儲器)用以存放驅動硬盤的固件代碼。
當電腦感染了方程毒藥或角鯊代碼,固件重寫模塊就被植入到系統,并與主控服務器連接獲取惡意代碼,然后將之寫入固件,代替原本的固件代碼。研究人員發現了兩種版本的重寫模塊:一個是2010年編譯的,用在方程毒藥中;另一個是2013編譯的,用于角鯊。
被植入木馬的固件使攻擊者可以潛伏在系統中,即使軟件更新升級都影響不到它。受害者就算懷疑自己的電腦被感染了,想抹掉舊操作系統再全新安裝一個以清除惡意代碼,惡意固件代碼模塊還是能夠留存在系統中不受波及。它可以再次連接上主控服務器,將系統中被清除掉的其他惡意組件再行安裝回來。
甚至就算廠商發布了固件自身的升級更新,惡意固件代碼也有可能依然存續。因為有些固件更新只替換固件的某些部分,意味著存放了惡意代碼的部分很可能沒有被更新重寫。受害者唯一的解決辦法就是扔掉被感染的硬盤,換塊新的。
這種攻擊之所以會奏效,是因為固件在設計的時候就根本沒考慮過安全性。硬盤生產商不會像軟件廠商給軟件加簽名一樣在安裝在硬盤中的固件上也來個加密簽名。自然,也沒有內建的對簽名固件進行的核查的驗證機制。這也就給他人留下了修改固件的可能。而且固件也是隱藏惡意軟件的最佳地點,因為反病毒掃描根本不檢查這塊地方。用戶也沒有什么好方法可以讀取固件手工檢查它是否被篡改了。
這一固件重寫模塊可以對十幾家廠商的硬盤固件進行重編程,包括IBM、希捷、西部數據(Western Digital)和東芝。
拉尤說:“你知道僅僅染指一種硬盤的固件就有多難嗎?你需要清楚很多細節,CPU、固件架構,還有它們的運行機制。”這位卡巴斯基的研究員稱之為“一項令人震驚的技術成就,充分證明了‘方程式小組’的能力。”
一旦固件被替換成植入了木馬的版本,重寫模塊便會創建能與系統中其他惡意模塊通信的應用程序接口(API),并訪問硬盤上攻擊者想藏匿所盜數據的隱藏扇區。他們將這些數據放在硬盤上所謂的“服務區”中,也就是硬盤為自身內部操作存儲數據的地方。
[page]隱藏存儲區
在這起固件木馬事件被曝期間,攻擊者可利用隱藏扇區存儲數據的特性并沒有被多做解釋,但那卻是固件入侵的一個重要組成部分。同時,它也引發了對攻擊者究竟是如何做到這一點的一系列疑問。由于手上沒有寫入受感染系統的真實固件木馬代碼副本,此種攻擊尚留有很多未解之謎,但我們還是能做出一些推測。
裝載了固件的ROM芯片里有少量存儲空間是未被使用的。如果ROM芯片容量為2M字節,固件可能僅占用了其中1.5M,留有0.5M空間可供攻擊者用來隱藏想偷取的數據。
如果目標主機開啟了磁盤加密,這點空間就非常有用了。由于方程毒藥和角鯊惡意軟件都運行在Windows系統下,他們可以在文件還未被加密的時候獲取到副本并存儲到這片不會被加密的隱藏空間里。但是,芯片上并沒有多少空間,存不下太多數據和文檔,攻擊者只能挑價值相當的東西來規避加密。
“考慮到角鯊惡意軟件在系統引導階段就能啟動運行,他們也能夠捕獲到加密密鑰并存儲到這片隱藏存儲區。”
當局可以在之后弄到這些電腦,可能是通過邊境封鎖,也可能是通過NSA所謂的“海關機會”,然后從隱藏存儲區抽取出捕獲到的密鑰解鎖硬盤。
拉尤認為這種策略針對的目標僅限未接入互聯網且有加密硬盤的機器。他們發現的5臺中招的機器中有1臺就是沒有互聯網連接并用于特殊安全通信的。
“固件木馬的主人只在沒有別的辦法的特殊情況下才使用它。想想本·拉登,他可是住在與外界隔絕的沙漠里,沒有互聯網也沒有電子足跡。如果你想從他的電腦里獲取信息,你能怎么辦?你只能將文檔放到隱藏存儲區,然后等待,一兩年之后卷土重來偷掉它。用這招獲取的利益是明確又具體的。”
不過,拉尤也認為,攻擊者腦海中應該還有更宏大的藍圖。“也許在不久之后他們就會將其升級換代,不再只存放密鑰而是將所有文檔都存進隱藏區。到那時,一旦有機會實際接觸到受感染系統,他們就能從隱藏去拿到所有明文文檔。”
如果他們可以將操作系統的整個目錄都拷貝進隱藏扇區備用,密鑰也就不需要了。但是固件所在的閃存芯片對大量數據來說實在是太小了。因此,攻擊者需要更大的隱藏存儲空間。幸運的是,這空間還真有。硬盤的服務區上有大片可被強制征用來存儲大量文件緩存的扇區,甚至計算機其他部分上被刪除的文件副本也能存。這片服務區,也被稱為保留區或系統區,是用來存儲固件和操作硬盤需要的其他數據的,但有很大一部分是空閑空間。
以色列公司“恢復”的數據恢復專家艾莉爾·伯克曼(Ariel Berkman)在2013年2月發表了一篇有意思的文章,里面提到:“這些區域不僅不會被常規工具清理,反病毒軟件和計算機取證工具也無法訪問。”
伯克曼指出,西部數據的一款硬盤有141MB是保留的服務區,但只使用了其中12MB,剩下的空間都能用作隱藏儲存。
想在服務區寫入數據必須知道每家廠商未公開的特定指令,因此攻擊者必須先搞清楚這些指令都是些什么。而一旦他們搞清楚了,“通過直接向硬盤發送廠商特定指令(VSCs),攻擊者就能操縱這些服務區讀寫原本無法訪問的數據”。寫個程序自動拷貝文檔到這個區域也是可行的,雖然這活兒有點微不足道。伯克曼自己寫了個概念性驗證程序讀取并寫入94MB的文件到服務區,只是這程序有點不太穩定,有可能導致數據丟失或是硬盤崩潰。
然而,用這種方式隱藏大量數據有一個問題:只要檢查服務區的已用空間大小就能發現隱藏數據的存在。如果這一扇區理應有129MB空閑空間卻只剩了80MB,那就表明這里存有本不應該存在的東西。不過,一份寫于2006年卻直到上個月才被《明鏡周刊》登載的NSA泄密文件顯示,NSA可能已經解決了這一問題。
NSA實習生的解決方案
這份文件基本上是NSA希望為其所謂的“持續部”發展未來間諜能力而開列的心愿單。“持續部”里有一個攻擊團隊專門利用改寫固件、基本輸入輸出系統(BIOS)、總線(BUS)和驅動器的方法在被侵入主機上建立和保持長久的控制。這份文件列出了NSA實習生們需要為攻擊團隊搞定的大量項目。其中一個就是“隱藏存儲”項目,通過開發出硬盤固件植入程序避免硬盤上的隱藏存儲被發現。要達到這一效果,植入程序需阻止系統發現磁盤上可用空間的真實容量。
文件上寫道:“項目思路是修改特定硬盤的固件,使其只能正常識別可用空間的一半。它將向操作系統返回識別到的容量數據,且不提供任何可以訪問到附加空間的方法。”硬盤上只有一個分區會顯示在分區表中,讓其他分區——也就是隱藏數據存儲的地方——保持不可見,更不可訪問。
修改過的固件中留有一個特殊的鉤子,只有當主機重啟,硬盤驅動接收到特定的命令,才會解鎖隱藏儲存空間。解鎖后,隱藏分區才能在分區表中看到,并在另一條特定命令鎖定分區之前都是可訪問的。
從這份八年前的文件中我們無法得知NSA取回隱藏數據的詳細計劃。同樣處于迷霧中的還有那些實習生是否真的有研制出符合NSA所求目標的固件植入程序。但是,文件中提到一條:實習生們必須在任務簽署六個月內拿出一份項目的解決方案,加之考慮到NSA在其他事務上表現出的創造力,我們毫不懷疑他們已經做到了。