日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

評(píng)估Vista內(nèi)核模式的安全性( 四 )


0x090 BootApplicationPersistentData : struct _LIST_ENTRY
0x0a0 WmdTestResult : Ptr64 to Void
0x0a8 BootIdentifier : struct _GUID
0x0b8 u : union
0x000 I386 : struct _I386_LOADER_BLOCK
0x000 CommonDataArea : Ptr64 to Void
0x008 MachineType : Uint4B
0x00c VirtualBias : Uint4B
接下來會(huì)尋找系統(tǒng)磁盤(通過OslEnumerateDisks)和加載系統(tǒng)注冊(cè)表項(xiàng)HKEY_LOCAL_MACHINE(通過OslpLoadSystemHive) 。當(dāng)系統(tǒng)注冊(cè)表項(xiàng)加載后,我們遇到了Vista在啟動(dòng)階段的第一次代碼完整性(通過OslInitializeCodeIntegrity) 。在該處首先會(huì)調(diào)用MincrypL_SelfTest,MincrypL_SelfTest驗(yàn)證SHA1散列值,并使PKCS1的簽名驗(yàn)證開始工作(using a pre-defined test case=通過預(yù)定義的測試樣例?) 。如果預(yù)先定義的測試樣例失敗了,會(huì)返回錯(cuò)誤代碼到0xC0000428 。然后,檢查調(diào)試器是否開啟(通過BlBdDebuggerEnabled) 。如果在這里檢測到調(diào)試器在開啟狀態(tài),會(huì)調(diào)用KnownAnswerTest 。如果沒有檢測到調(diào)試器處在開啟狀態(tài),會(huì)直接跳過該處 。
接下來通過BlImgRegisterCodeIntegrityCatalogs從%SystemRoot%/System32/CatRoot/{F750E6C3-38EE-11D1-85E5-00C04FC295EE}/nt5.cat加載OS的編目錄(在內(nèi)部調(diào)用了API函數(shù)MinCrypL_AddCatalog) 。
當(dāng)OS 編目錄 nt5.cat被加載后,WINLOAD.EXE通過SelfIntegrityCheck對(duì)其自身進(jìn)行完整性檢查,這里的檢查做了兩個(gè)事情:
1. 計(jì)算PE映像(image)的SHA1哈希值,然后與PE證書表內(nèi)的SHA1哈希值進(jìn)行對(duì)比,這里的對(duì)比必須是匹配的,如果不匹配就會(huì)返回一個(gè)錯(cuò)誤信息 。
2. 另外,他也調(diào)用ImgpValidateImageHash來驗(yàn)證映象(image)哈希值是否與nt5.cat內(nèi)的相匹配 。ImgpValidateImageHash會(huì)調(diào)用API函數(shù)MinCrypL_CheckSignedFile來驗(yàn)證證書,調(diào)用MinCrypL_CheckImageHash來尋找nt5.cat上的映象(image)匹配哈希值 。在下面的章節(jié)III會(huì)討論通過MinCrypL_CheckSignedFile和 MinCrypL_CheckImageHash進(jìn)行驅(qū)動(dòng)簽名驗(yàn)證 。
如果上述的簽名過程不匹配,但是調(diào)試器在開啟狀態(tài)(BlBdDebuggerEnabled returns TRUE),那么在這里會(huì)打印處如下的調(diào)試信息:
---------------------------------------------
*** Windows is unable to verify the signature of the file %s.
It will be allowed to load because the boot debugger is enabled.
Use g to continue!!
---------------------------------------------
如果調(diào)試器是存在的,那么可以通過調(diào)用DbgBreakPoint來進(jìn)行激活;另外,在這里通過調(diào)用ReportCodeIntegrityFailure替換了系統(tǒng)提示致命錯(cuò)誤的錯(cuò)誤形式 。
當(dāng)所有的完整性檢查結(jié)束后(unless all integrity checks have been disabled),OslInitializeCodeIntegrity會(huì)返回成功狀態(tài),然后會(huì)繼續(xù)從OslMain開始執(zhí)行 。接著,OslpLoadAllModules被調(diào)用并開始加載系統(tǒng)模塊 。首先,會(huì)調(diào)用OslLoadImage來加載NTOSKRNL.EXE和HAL.DLL,在這里僅僅是加載,此時(shí)沒有解決Imports;第二,如果內(nèi)核調(diào)試被開啟,調(diào)試驅(qū)動(dòng)會(huì)依靠啟動(dòng)調(diào)試選項(xiàng)的情況被加載(kdcom.dll for serial port, kd1394.dll for IEEE1394, or kdusb.dll for USB) 。第三,NTOSKRNL.EXE的Imports被加載和初始化(使用LoadImports和BindImportRefences函數(shù)) 。
OslLoadImage calls GetImageValidationFlags to check the filename against a pre-defined list of boot drivers in LoadBootImagesTable. If integrity checks are enabled, then boot drivers must be signed by a trusted root authority and all the image hashes must match the signed catalog file unless a debugger is enabled. If a debugger is enabled, WINLOAD.EXE does not enforce this requirement. Instead it will print an error message to the debugger, but will otherwise ignore the code integrity check failure. However, the following boot drivers (also listed in Appendix A) must pass the code integrity checks even if a debugger is enabled (otherwise WINLOAD.EXE will refuse to boot Windows Vista):
Remark:這里翻譯的始終感覺有些錯(cuò)誤,上面為英文原文 。
OslLoadImage調(diào)用GetImageValidationFlags來檢查在LoadBootImagesTable中預(yù)先定義好的boot drivers文件名 。如果啟用了完整性檢查,除非在這里調(diào)試器被開啟,否則boot drivers必須進(jìn)行可信任的root權(quán)威簽名,并且所有的映象哈希值(image hashes)要與編目錄簽名相匹配 。在上面提到調(diào)試器開啟狀態(tài)會(huì)使該處的完整性檢查有些許不同,如果在這里調(diào)試器是開啟的,WINLOAD.EXE不會(huì)強(qiáng)烈要求上面的要求 。WINLOAD.EXE會(huì)打印一個(gè)錯(cuò)誤信息給調(diào)試器,但是卻忽略了代碼完整性檢查的失敗 。無論如何,接下來的boot drivers(參考附錄A)必須通過代碼完整性檢查,即使調(diào)試器在開啟狀態(tài)也必須檢查 。(如果沒有進(jìn)行檢查,vista不會(huì)被啟動(dòng)起來):

推薦閱讀