环境Windows 8 64位企业版
首先看下UEFI的启动过程。
**DreamBoot的HOOK情况**
其中bootmgfw.efi被EFI固件在0x10000000地址处加载。
在加载winload.exe的入口点代码前,进行
.text:0000000010108D78 call bootmgfw_Archpx64TransferTo64BitApplicationAsm_hook
Patch的内容:五个字节 0xFF,0xD0,0x48,0x8B,0x25
在加载ntoskrnl.exe代码入口点和初始化内核gdt/idt前
.text:0000000140115820 patch iOslArchTransferToKernel()
Patch的内容:9个字节0x48,0x33,0xF6,0x4C,0x8B,0xE1,0x4C,0x8B,0xEA
smss.exe的导出函数:nt!NtSetInformationThread
kiSystemStartup的一个子函数sub_1406F3360
Patch NX flag activation
Anti patch-guard
- sub_1406C5050 proc near
- INIT:00000001406C5060 sub rsp, 28h
- INIT:00000001406C5064 cmp cs:InitSafeBootMode, 0
- INIT:00000001406C506B jnz short loc_1406C509A
- INIT:00000001406C506D movzx edx, byte ptr cs:KdDebuggerNotPresent
- …
- INIT:00000001406C5091 idiv r8d
如何复现运行Dreamboot?
编译虚拟机设置,把默认的bios启动更改为UEFI启动。
Dreamboot复现成功后,电脑开机时出现的界面。
除了EFI加载基地址会变以外,其余均不会改变地址。
开机之后先在内核看到一个未知模块的PE,是注册了一个镜像加载回调,可以判定系统已经被成功感染。
再次启动后发现没有签名的Microsoft驱动。