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

深入底層 評估Vista系統(tǒng)內(nèi)核模式安全性( 四 )


接下來通過BlImgRegisterCodeIntegrityCatalogs從%SystemRoot%System32CatRoot{F750E6C3-38EE-11D1-85E5-00C04FC295EE}nt5.cat加載OS的編目錄(在內(nèi)部調(diào)用了API函數(shù)MinCrypL_AddCatalog) 。
當OS 編目錄 nt5.cat被加載后,WINLOAD.EXE通過SelfIntegrityCheck對其自身進行完整性檢查,這里的檢查做了兩個事情:
1. 計算PE映像(image)的SHA1哈希值,然后與PE證書表內(nèi)的SHA1哈希值進行對比,這里的對比必須是匹配的,如果不匹配就會返回一個錯誤信息 。
2. 另外,他也調(diào)用ImgpValidateImageHash來驗證映象(image)哈希值是否與nt5.cat內(nèi)的相匹配 。ImgpValidateImageHash會調(diào)用API函數(shù)MinCrypL_CheckSignedFile來驗證證書,調(diào)用MinCrypL_CheckImageHash來尋找nt5.cat上的映象(image)匹配哈希值 。在下面的章節(jié)III會討論通過MinCrypL_CheckSignedFile和 MinCrypL_CheckImageHash進行驅(qū)動簽名驗證 。
如果上述的簽名過程不匹配,但是調(diào)試器在開啟狀態(tài)(BlBdDebuggerEnabled returns TRUE),那么在這里會打印處如下的調(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來進行激活;另外,在這里通過調(diào)用ReportCodeIntegrityFailure替換了系統(tǒng)提示致命錯誤的錯誤形式 。
當所有的完整性檢查結(jié)束后(unless all integrity checks have been disabled),OslInitializeCodeIntegrity會返回成功狀態(tài),然后會繼續(xù)從OslMain開始執(zhí)行 。接著,OslpLoadAllModules被調(diào)用并開始加載系統(tǒng)模塊 。首先,會調(diào)用OslLoadImage來加載NTOSKRNL.EXE和HAL.DLL,在這里僅僅是加載,此時沒有解決Imports;第二,如果內(nèi)核調(diào)試被開啟,調(diào)試驅(qū)動會依靠啟動調(diào)試選項的情況被加載(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):
OslLoadImage調(diào)用GetImageValidationFlags來檢查在LoadBootImagesTable中預(yù)先定義好的boot drivers文件名 。如果啟用了完整性檢查,除非在這里調(diào)試器被開啟,否則boot drivers必須進行可信任的root簽名,并且所有的映象哈希值(image hashes)要與編目錄簽名相匹配 。如果調(diào)試器處于開啟狀態(tài),WINLOAD.EXE不會強制這些要求 。安全后WINLOAD.EXE會打印一個錯誤信息給調(diào)試器,但是卻忽略了代碼完整性檢查的失敗 。無論如何,接下來的boot drivers必須通過代碼完整性檢查,即使調(diào)試器在開啟狀態(tài)也必須檢查 。(如果沒有進行檢查,vista不會被啟動起來):
Windowssystem32bootvid.dll
Windowssystem32ci.dll
Windowssystem32clfs.sys
Windowssystem32hal.dll
Windowssystem32kdcom.dll;(or;kd1394.sys;or;kdusb.dll,;depending;on;boot;options)
Windowssystem32ntoskrnl.exe
Windowssystem32pshed.dll
Windowssystem32WINLOAD.EXE
Windowssystem32driversksecdd.sys
Windowssystem32driversspldr.sys
Windowssystem32driverstpm.sys
加載映象和驗證代碼完整性都在BlImgLoadPEImageEx內(nèi),都使用了SelfIntegrityCheck(在前面章節(jié)有描述)函數(shù) 。所有的映象(image)都通過代碼完整性校驗后,NTOSKRNL.EXE和它所有的Imports此時會被加載 。列表(版本:Build 5363)如下:

推薦閱讀