评估Vista内核模式的安全性( 六 )


1. 显示Vista启动过程中的进度条 。
2. 加载%SystemRoot%/AppPatch/drvmain.sdb(the application compatability database)
3. 加载%SystemRoot%/System32/acpitabl.dat
4. 加载HKEY_LOCAL_MACHINE/CurrentControlSet/Control/Errata/InfName注册表项的INF文件 。
在OslpLoadAllModules结束后,OslMain保存启动日志(OslpLogSaveInformation),如果FVE(Full Volume Encryption)选项开启,结束FVE的加载(BlFveSecureBootRestrictToOne and BlTpmShutdown) 。最后,调用OslArchTransferToKernel把控制权转交给NTOSKRNL.EXE 。

C、Vista Windows OS Kernel (阶段 3)
Vista使用了与先前版本一样的名门惯例 。64位Vista会在%SystemRoot%/System32/ntoskrnl.exe查找NTOSKRNL.EXE,在本章节的剩余部分,会引用ntoskrnl.exe在开始入口点的操作指令(KiSystemStartup) 。
执行首先从KiSystemStartup开始 。Vista下的NTOSKRNL.EXE内的一些重要部分与Windows 2003 SP1版相比,并没有太多的改变,因此我们的重点为分析Vista下改变的特殊部分 。在Vista下,NTOSKRNL.EXE添加了一个新函数SepInitializeCodeIntegrity,但该函数仅仅是把CL.DLL内的CiInitialize(关于CiInitialize会在后面的章节VI进行讨论)进行了另外的包装而已 。如果代码完整性检查开启,SepInitializeCodeIntegrity会调用CiInitialize,除此之外,它没有做任何其它的事情 。
WINLOAD.EXE还负责检查boot drivers签名的完整性 。与WINLOAD.EXE相比,NTOSKRNL.EXE负责查证system drivers(在boot driver加载后)和运行时加载的drivers(即:当一个设备被插进系统) 。当完整性检查开启,会使用SeValidateImageHeader(在CI.DLL内CiValidateImageHeader函数的包装)和SeValidateImageData(在CI.DLL内CiValidateImageData函数的包装)对加载的映象(image)进行代码完整性检查 。只要一个执行映射进kernel memeory都会调用SeValidateImageHeader(通过MmCreateSection) 。当一个内核模块加载时,都会调用SeValidateImageData对kernel drivers的代码段进行校验 。运行时检查(例如:不断的检查kernel drivers的代码段是否被修改)由PatchGuard和CI.DLL进行处理(会在后面部分讨论) 。

推荐阅读