快捷搜索:

Vista/WIN7驱动完整性校验解析PE蓝屏BUG

在VISTA今后的操作系统,系统应用MmLoadSystemImage加载驱动之前,会调用MmCheckSystemImage函数来反省镜像精确性,在VISTA及今后的操作系统中,MmCheckSystemImage发生了一个故意思的变更.

蓝本MmCheckSystemImage(vista曩昔的系统上),会应用SEC_IMAGE作为AllocationAttributes来调用ZwCreateSection为驱动文件创建Section,然则VISTA今后的系统上,该参数被换成了一个未公开的值: 0x100000(留意,SEC_IMAGE是0x1000000,6个0)。

在ZwCreateSection 中,系统会反省假如调用线程的上个模式不是KernelMode,则不容许应用这个未公开的AllocationAttributes:

NtCreateSection:

............无关部分........

//取当火线程上个模式

if (KeGetPreviousMode() != KernelMode)

{

//假如是用户模式,假如Attributes有0x2000000或0x10000的话,则返回无效参数

v13 = 0;

if ( !(Attributes & 0x2100000) )

{

.....无关处置惩罚....

}

return STATUS_INVALID_PARAMETER_6;

}

然后在NtCreateSection->MmCreateSection(这个函数在VISTA开始发生了伟大年夜的变更)中,进行一些判断后(包括这个特殊的Attributes),系统会调用MiValidateImageHeader进行镜像反省,此时系统会将这个镜像经由过程MiMapImageInSystemCache函数map到系统缓存中,然后将按镜像的页数 * PAGE_SIZE大年夜小的,分配分页内存,并将PE数据COPY到内存中

接着系统会调用SeValidateImageHeader函数,这个函数只是简单地为_g_CiCallbacks中寄放的函数筹备函数,便调用_g_CiCallbacks寄放的函数。_g_CiCallbacks这个全局变量中寄放着系统初始化时(SeInitSystem->SepInitializationPhase1->SepInitializeCodeIntegrity)存入的 ci.dll的CiValidateImageHeader函数。

CiValidateImageHeader首先会对镜像进行一些反省事情,然后开始调用CipValidateFileHash函数,CipValidateFileHash函数对文件做一些解析事情后,开始调用CipImageGetImageHash,此函数会阐发PE的每一个节,并对其节内数据调用SHA署名算法函数A_SHAUpdate。

留意前面加粗的翰墨,因为是按整页数来分配和COPY数据的,是以假如某一个节的数据长度(SizeOfRawData)越过了页对齐的范围(MiMapImageInSystemCache彷佛并不将这个数据算成一个新的节),那么A_SHAUpdate中的数据COPY函数将触及到未分配内存,从而激发BSOD。

这里供给一个简单的例子(下载到:http://www.debugman.com/read.php?tid=3217帖子中的附件或http://mj0011.ys168.com 破绽演示目录下bsodxx.rar)

这个PE文件的着末一个节的SizeOfRawData是0x1004,应用随意率性一个加载对象加载此文件,系统将急速BSOD,BSOD时的Stack类似:

kd> kc

nt!MmAccessFault

nt!KiTrap0E

nt!memcpy

CI!A_SHAUpdate

CI!CipImageGetImageHash

CI!CipValidateFileHash

CI!CiValidateImageHeader

nt!SeValidateImageHeader

nt!MiValidateImageHeader

nt!MmCreateSection

nt!NtCreateSection

nt!KiFastCallEntry

nt!ZwCreateSection

nt!MmCheckSystemImage

nt!MiCreateSectionForDriver

nt!MiObtainSectionForDriver

nt!MmLoadSystemImage

nt!IopLoadDriver

nt!IopLoadUnloadDriver

是以说,解析PE很危险啊很危险。

您可能还会对下面的文章感兴趣: