Hacking Team:攻击向量之Bios Rootkit

攻击向量(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,查看是否有可疑模块。

上一篇:通过灰盒Fuzzing技术来发现Mac OS X安全漏洞

下一篇:Hacking Team:WP8 监控代码分析