攻擊向量(attack?vector)指的是黑客用來攻擊計算機或者網絡服務器的一種手段,攻擊向量能夠幫助黑客尋找系統可能存在的任何漏洞,包括人為因素,攻擊向量簡單理解就是網絡滲透攻擊的各種維度,如通過病毒,電子郵件,網頁,聊天室等配合社工欺騙方法來完成。
從泄露代碼來看,Hacking Team有自己完善一套攻擊向量,有許多維度,如Bios?Rootkit攻擊,ipa攻擊,java?applet掛馬,假文檔圖標欺騙,短信欺騙,光盤或U盤存儲介質攻擊。技術與非技術完美配合,來實現RCS遠程控制功能。
以下從Bios?Rootkit攻擊向量進行分析。
一、攻擊場景
想像類似著名電影《碟中諜》的場景。XX黑客組織為了入侵A機構的網絡系統,決定派遣一個臥底(wd)進入A機構。突破重重困難,最終wd以一名記 者身份得以采訪A機構領導,進入了領導的辦公室,談笑間,領導離開一會兒,wd立即警惕起來,盯緊領導的辦公桌的電腦,連忙掏出U盤,開機,進入 bios,種下Bios?Rootkit后門病毒,熟練連貫的操作。三分鐘的時間,神不知鬼不覺的,A機構網絡系統已經被從內部打開了一個缺口,而且是一 個檢測極困難的后門……
場景像拍電影,有點夸張。實際上并不能排除可能性,Bios?Rootkit通過物理的接觸,如通過U盤,進行感染。 這樣的場景可以延伸出來,或發生在電腦維修店、二手電腦、網吧、學校電腦室等。Bios?Rootkit是比較高水平的技術,檢測很困難。在泄露的源碼中,因此更多的人可以從這基礎上衍生更多的Bios?Rootkit病毒,降低了技術門檻。
二、Bios?Rootkit感染方式
HT內部泄露文檔介紹,Bios?Rootkit是通過U盤,進入UEFI?Shell進行感染。要求目標系統cup?Intel?i3/i5/i7(2,3,4代),bios?uefi。
Bios?Rootkit的感染方式,決定傳播廣度有限,但從網絡滲透來說,絕對是一個可靠的突破口。目前還沒資料證明Bios?Rootkit其它感染方式,但并不能排除可能性。
泄露的文檔資料:
三、示意圖
Bios?Rootkit有三個模塊:rkloader.mod,dropper.mod和ntfs.mod,攻擊示意圖如下:
在攻擊時,插入U盤,進行UEFI?Shell,Startup.nsh引導啟動chipsec.efi,然后chipsec.efi把三個.mod模塊寫到Bios?ROM上去,重啟電腦時,Bios?Rootkit就開始干活了。
四、Bios?Rootkit分析
1、UEFI結構
UEFI使用了模塊化設計,類似windows操作系統,UEFI?Image(UEFI實體)有EFI?Driver(驅動),EFI?Application(應用程序),os?Loader(操作系統引導程序),如下圖。
EFI?Driver和EFI?Application是FFS結構,安裝UDK(UEFI開發包),使用C語言,遵循接口,就可以開發EFI程序。
EFI程序開發必須要有.inf定義文件,定義應用名,guid,程序類型(應用或驅動),入口點,源碼文件,依賴庫等,其中GUID是模塊的標識,bios系統是以GUID來標識程序。
【感染階段】
2、chipsec.efi模塊功能
.inf部分定義:
INF_VERSION????????????????????=?0x00010005
BASE_NAME??????????????????????=?chipsec
FILE_GUID??????????????????????=?C2AA29A2-065C-4FC5-BE01-7FAA761EAA7E
MODULE_TYPE????????????????????=?UEFI_APPLICATION
VERSION_STRING?????????????????=?1.0
ENTRY_POINT????????????????????=?ShellCEntryLib
1)檢測U盤中當前目錄是三個模塊是否存在,如果不存在直接退出程序
2)檢測cpu芯片類型,初始化spi總線得到SPI_obj,可以進行spi進行各種操作,
得到spi?MMIO(內存映射I/O)的地址,如下,方便下面讀寫bios芯片
3)然后關閉bios寫保護,以便刷bios:
4)進入界面選擇功能,有:安裝Bios?Rootkit,卸載Bios?Rootkit,檢測Bios?Rootkit
5)選擇安裝Bios?Rootkit,先備份原先的bios到\\temp\\bios.bin下,
讀出bios到buffer:
保存bios到bios.bin:
6)讀出bios后,在buffer進行bios結構解析,然后改寫bios,插入.mod模板。
Bios文件系統是樹狀,FD相當于windows下整個硬盤,FV即分區,File以GUID標志,Section里存儲實際的數內容,相當widnows下的文件概念,如下圖:
層層解析后,找到第一個File:
這時File可能是壓縮的,如果是壓縮的,分別用lzma,EfiDecompress,Tiano嘗試解壓。解壓后,在File最后的section里寫分別寫入ntfs.mod,rkload.mod和dropper.mod:
ntfs.mod和rkloader.mod是uefi驅動文件(FFS文件結構),需要校驗和,確保程序能正常運行。
接著,以原來的壓縮格式壓縮File,構造成一個植入rootkit的bios:
7)把植入rootkit的bios系統刷到bios芯片上
擦除芯片上所有數據:
刷入新bios系統:
到這里,完成Bios?Rootkit注入。
【Bios?Rootkit執行階段】
3、rkloader.mod模塊功能
rkoader.mod是bios驅動程序,FFS結構文件頭如下。
typedef?struct?{
EFI_GUID????????????????Name;
EFI_FFS_INTEGRITY_CHECK?IntegrityCheck;
EFI_FV_FILETYPE?????????Type;
EFI_FFS_FILE_ATTRIBUTES?Attributes;
UINT8???????????????????Size[3];
EFI_FFS_FILE_STATE??????State;
UINT32?????ExtendedSize;
}?EFI_FFS_FILE_HEADER2;
緊跟著FFS結構頭后PE是結構。rkloader.mod功能主要是創建事件,調用droper.mod模塊,UEFI下的事件,相當異步的事件通知,當事件觸發時,可中斷去處理例程。
.inf部分定義:
[Defines]
INF_VERSION????????????????????=?0x00010005
BASE_NAME??????????????????????=?rkloader
FILE_GUID??????????????????????=?f50258a9-2f4d-4da9-861e-bda84d07a44c
MODULE_TYPE????????????????????=?UEFI_DRIVER
VERSION_STRING?????????????????=?1.0
ENTRY_POINT????????????????????=?_ModuleEntryPoint
1)初始化得到全局服務指針,gBootServices
2)創建事件,把事件放到FIFO隊列去,高優先級執行
3)加載dropper.mod,并執行。
4、dropper.mod模塊功能
dropper.mod是uefi應用程序,資源里面包含windows操作系統下的scounte.exe、solier.exe和elite的 遠控木馬,并用特定的字符串標識資源,如下圖。Droper.mod功能是把三個遠控木馬放到windows操作系統自啟動項里,所以當前操作系統啟動起 來時,遠控木馬得到執行。
.inf?部分定義:
[Defines]
INF_VERSION????????????????????=?0x00010005
BASE_NAME??????????????????????=?fsbg
FILE_GUID??????????????????????=?eaea9aec-c9c1-46e2-9d52-432ad25a9b0b
MODULE_TYPE????????????????????=?UEFI_APPLICATION
VERSION_STRING?????????????????=?1.0
ENTRY_POINT????????????????????=?UefiMain
1)檢測agent是否已經安裝過。
Agent安裝后,會設置一個全置標志GUID,如下圖,如果這個全局變量存在,就是已經安裝過Agent了,就不會重復安裝。
2)解析FFS結構,在dropper.mod通過GUID查找EFI_SECTIOM_RAW類型數據,這數據包含scout.exe,soldier.exe和elite文件數據。
讀取數據到buffer:
GUID:
3)安裝Agent到window啟動項
這個步聚是最關鍵的,UEFI?bios如何寫數據到硬盤?讀取文件需要一個協議:EFI_SIMPLE_FILE_SYSTEM_PROTOCOL,simplefilesystem.h文件里定義這個協議的id,如下,通過這個id可以對硬盤進行讀寫。
extern?EFI_GUID?gEfiSimpleFileSystemProtocolGuid;
得到硬盤卷句柄組HandleList,如下,由Handle可以訪問與讀寫硬盤文件。
然后遍歷所有卷文件,檢測根目錄是否有\\User文件夾,如下圖:
安裝agent:
scout.exe,soldier.exe和elite安裝路徑:
創建文件鎖,拒絕用戶訪問elite文件。
最后,設置安裝agent標志,防止重復安裝。
5、ntfs.mod模塊功能
提供接口,讓rootkit可以讀寫NTFS文件。
【輔助開發工具】
vector-edk-master\vector-uefi\insyded.dll
vector-edk-master\vector-uefi\tesy.py
vector-edk-master\vector-uefi\UEFITool-master???各種壓縮算法
vector-edk-master\AppPkg\Applications\Python???UEFI下python解釋器,可在UEFI執行python腳本,uefi被玩轉。
輔助dropper.mod的生成,依靠insyded.dll和tesy.py。源碼編譯后,dropper.mod是一個DLL文件,然后利用 insyded.dll把遠控scout.exe,soldier.exe和elite添加到dropper.mod里面,再利用 genffs.exe(intel公司的工具)把dropper.mod生成ffs文件。
p?=?subprocess.Popen(('genffs.exe',?“-o”,?“dropper”,?“-t”,?“EFI_FV_FILETYPE_APPLICATION”,?“-g”,?“eaea9aec-c9c1-46e2-9d52-432ad25a9b0b”,?“-s”,?“-a”,?“1”,?“-i”,?“dropper.tmp”))
最后,.mod模塊放到modules目錄下,然后構成一個完整的Bios?Rootkit!
五、防御與檢測
防御:
1、開啟UEFI?SecureFlash;
2、及時更新BIOS修復安全漏洞;
3、設置BIOS/UEFI密碼。
檢測:
1、進行操作系統安全模式,查看系統自啟動目錄是否有可疑程序,如scout.exe,soilder.exe;
2、借助工具dump下uefi?bios,查看是否有可疑模塊。