深入底层 评估Vista系统内核模式安全性( 六 )


执行首先从KiSystemStartup开始 。Vista下的NTOSKRNL.EXE内的一些重要部分与Windows 2003 SP1版相比,并没有太多的改变,因此我们的重点为分析Vista下改变的特殊部分 。在Vista下,NTOSKRNL.EXE添加了一个新函数SepInitializeCodeIntegrity,但该函数仅仅是把CL.DLL内的CiInitialize(关于CiInitialize会在后面的章节VI进行讨论)进行了另外的包装而已 。如果代码完整性检查开启,SepInitializeCodeIntegrity会调用CiInitialize,除此之外,它没有做任何其它的事情 。
【深入底层 评估Vista系统内核模式安全性】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进行处理 。

推荐阅读