您的位置:首頁(yè) > 菜鳥學(xué)院 > Win10安全特性之執(zhí)行流保護(hù)

Win10安全特性之執(zhí)行流保護(hù)

來源:互聯(lián)網(wǎng) | 時(shí)間:2015-02-12 15:09:01 | 閱讀:119 |    | 分享到:

還有一點(diǎn),如果這時(shí)候漏洞觸發(fā)成功,間接調(diào)用的寄存器值已經(jīng)被攻擊者修改了,這時(shí)候從bitmap中取值的時(shí)候可能造成內(nèi)存訪問無效。請(qǐng)看LdrpValidateUserCallTargetBitMapCheck符

號(hào)處的這條指令:mov edx,dword ptr [edx+eax*4] edx是bitmap地址,eax是索引,但如果eax不可信了,這個(gè)很有可能,則會(huì)導(dǎo)致內(nèi)存訪問異常,并且這個(gè)函數(shù)并沒有異常處理。這是因?yàn)槲④洖榱诵士紤](畢竟這個(gè)校驗(yàn)函數(shù)的調(diào)用十分頻繁,一個(gè)開啟CFG的模塊可能會(huì)有上萬個(gè)調(diào)用處),微軟在ntdll! RtlDispatchException中對(duì)該地址發(fā)生的異常做了一個(gè)處理:

Win10安全特性之執(zhí)行流保護(hù)

如果異常發(fā)生的地址命中LdrpValidateUserCallTargetBitMapCheck,則進(jìn)行一個(gè)單獨(dú)處理,RtlpHandleInvalidUserCallTarget會(huì)校驗(yàn)當(dāng)前進(jìn)程的DEP狀態(tài)和要間接調(diào)用的地址(ecx)的內(nèi)存屬性,如果當(dāng)前進(jìn)程關(guān)閉了DEP并且要間接調(diào)用的地址有可執(zhí)行屬性,則觸發(fā)CFG異常,否則通過修改pContext把EIP修正到ret返回處,并且表明異常已被處理。

最后再說下這個(gè)原始的bitmap,在系統(tǒng)初始化的時(shí)候,內(nèi)存管理器初始化中會(huì)創(chuàng)建一個(gè)Section(MiCfgBitMapSection32),這個(gè)Section在Win8.1上的大小是通過MmSystemRangeStart(32位下是0x80000000)計(jì)算的,前面提到過bitmap里面1位代表8字節(jié),計(jì)算完后正好是32MB

Win10安全特性之執(zhí)行流保護(hù)

而在Win10上MiCfgBitMapSection32的大小有了變化,直接寫死成了0x3000000(48MB)

Win10安全特性之執(zhí)行流保護(hù)

Section創(chuàng)建完成后在每個(gè)進(jìn)程啟動(dòng)的時(shí)候會(huì)映射進(jìn)去

(NtCreateUserProcess-> PspAllocateProcess-> MmInitializeProcessAddressSpace-> MiMapProcessExecutable-> MiCfgInitializeProcess)

映射的時(shí)候作為shared view,除非某一個(gè)進(jìn)程修改了這片內(nèi)存。

在一個(gè)CFG模塊映射進(jìn)來的時(shí)候,重定位過程中會(huì)重新解析PE文件LOADCONFIG中的Guard Function Table以重新計(jì)算該模塊對(duì)應(yīng)的bitmap(MiParseImageCfgBits),最后更新到MiCfgBitMapSection32中去(MiUpdateCfgSystemWideBitmap)。

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)