引子:Windows 操作系統(tǒng)的發(fā)展歷程也符合既有的規(guī)律,**即初期攻強(qiáng)守弱,,中期攻守焦灼,,后期防守方占優(yōu)。**
英文鏈接:[https://blogs.technet.microsoft.com/iftekhar/2017/08/28/threat-mitigation-in-windows-10/](https://blogs.technet.microsoft.com/iftekhar/2017/08/28/threat-mitigation-in-windows-10/)
過去,,微軟操作系統(tǒng)版本的發(fā)布間隔周期很長,,在這段窗口期內(nèi),相應(yīng)平臺(tái)上的許多漏洞利用技術(shù)都得到了長足發(fā)展,,但系統(tǒng)卻沒有提供任何的防護(hù)措施,。
比如,一些現(xiàn)有的漏洞利用技術(shù)多年前還是不存在的,。
多年前就存在的利用技術(shù):
- 堆棧溢出
- 返回地址覆蓋
- Shellcode
后面發(fā)展的利用技術(shù):
- ARW(Arbitrary Read/Write)
- 沙盒繞過
- 堆噴
- 內(nèi)存破壞
- CFG 繞過
- ASLR 繞過
- DEP 繞過
- ROP Shellcode
鑒于此類威脅正不斷增多,,如果非要等上幾年才能給出漏洞利用解決方案的話,那么這種情況就太不理想了,,會(huì)使得用戶和企業(yè)的系統(tǒng)處于風(fēng)險(xiǎn)之中,。隨著 Win10 的推出,系統(tǒng)每隔 6 個(gè)月就會(huì)發(fā)布新的功能和特性,,從而壓縮了漏洞利用的窗口期,。
![0](https://msdnshared.blob.core.windows.net/media/2017/08/image_thumb447.png)
下面的內(nèi)容將詳細(xì)介紹 Win10 中啟用的那些安全緩解措施。
簡單來說,,Win10 中的防護(hù)功能實(shí)際上就是一堆特性,,它們有助于緩解漏洞利用技術(shù),并且使得漏洞的利用變得更加困難,。
**1. User Mode Font Driver (UMFD)**
Win10 在初始版本中就引入了 User Mode Font Driver 方案,,主要用于實(shí)現(xiàn)隔離保護(hù)。原先字體的處理是在內(nèi)核模式下完成的,,相關(guān)的內(nèi)存 bug 可以通過精心構(gòu)造的字體文件來遠(yuǎn)程觸發(fā),。而字體處理部分的代碼都非常老了,而且還是由多位開發(fā)者編寫的,。啟用 UMFD 保護(hù)后,,字體會(huì)被放到用戶模式下的 App Container 中進(jìn)行處理,這實(shí)際上使得字體漏洞的利用不再有效,,像利用字體漏洞來提權(quán)或者沙箱逃逸這些操作都變得不可能了,。當(dāng)然,,還可以通過 ProcessFontDisablePolicy 函數(shù)禁止程序處理不被信任的字體,。
**2. Win32k Syscall Filtering**
Win32k 子系統(tǒng)是攻擊者用于實(shí)現(xiàn)沙箱逃逸的首選目標(biāo)組件,。由于功能方面的關(guān)系,這個(gè)組件還是非常龐大的,,圖形顯示功能大都是基于 Win32k 模塊實(shí)現(xiàn)的,,因此漏洞利用的攻擊面自然也就多了,其中大約有 1200 個(gè)導(dǎo)出的 API,。借助過濾方案,,Edge 瀏覽器會(huì)維護(hù)所需的 Win32k API 列表,并且僅會(huì)允許頁面處理過程中的調(diào)用,,從而減小了攻擊面,。這些被過濾掉的 Win32k API 很可能會(huì)導(dǎo)致內(nèi)存方面的錯(cuò)誤。
**3. Less Privileged App Container (LPAC)**
在 App Container 中可訪問的資源是受 ALL APPLICATION PACKAGES SID 保護(hù)的,,其在默認(rèn)情況下對(duì)所有的文件都具有讀權(quán)限,。而 LPAC 在此基礎(chǔ)上進(jìn)行了更嚴(yán)格的限制,默認(rèn)是拒絕所有的訪問,,只有那些被 LPAC 認(rèn)為是安全的對(duì)象才能進(jìn)行訪問,。
**4. Structured Exception Handling Overwrite Protection (SEHOP)**
此特性旨在阻止借助 SEH(Structured Exception Handler)覆蓋技術(shù)實(shí)現(xiàn)漏洞利用的 Exp。由于這種保護(hù)機(jī)制是在程序運(yùn)行時(shí)提供的,,因而不論編譯時(shí)是否添加了此保護(hù)選項(xiàng),,系統(tǒng)都會(huì)為程序提供該保護(hù)。
**5. Address Space Layout Randomization (ASLR)**
通過 ASLR 保護(hù),,系統(tǒng)會(huì)對(duì)進(jìn)程中加載的 DLL 模塊起始地址進(jìn)行隨機(jī)化處理,。一些特定 DLL 模塊會(huì)被加載到可預(yù)測的地址空間上,該防護(hù)措施能夠有效避免惡意程序?qū)Υ诉M(jìn)行的利用,。
**6. Heap protections**
Win10 包含了堆利用方面的防護(hù),,比如用于內(nèi)部堆數(shù)據(jù)結(jié)構(gòu)的 Heap metadata hardening 保護(hù),還有 Heap allocation randomization 保護(hù),,即在堆分配時(shí)會(huì)對(duì)分配的起始地址和大小進(jìn)行隨機(jī)化處理,,使得攻擊者無法預(yù)測需要覆蓋的堆內(nèi)存地址。此外,,在內(nèi)存頁面的前后會(huì)有 Tripwire,,也就是 Heap guard pages 保護(hù),如果攻擊者試圖向堆塊之外的地址進(jìn)行寫入(如緩沖區(qū)溢出技術(shù)),,那么就必須覆蓋作為 Tripwire 的內(nèi)存頁,,而對(duì)這些頁面的修改會(huì)觸發(fā)內(nèi)存錯(cuò)誤,系統(tǒng)會(huì)立即終止相關(guān)的程序,。
**7. Kernel pool protections**
Win10 也為內(nèi)核中用到的 pool 提供了防護(hù),,例如,,內(nèi)核模式下的 DEP 和 ASLR 保護(hù)、避免 pool 被濫用的 safe unlinking 機(jī)制等,。
**8. Control Flow Guard**
CFG(Control Flow Guard)保護(hù)不需要我們對(duì)操作系統(tǒng)進(jìn)行額外的配置,,Microsoft Edge、IE11 和 Win10 中的其它功能都包含此特性,。另外,,在程序編譯時(shí)會(huì)有相關(guān)的可選項(xiàng),該特性可被應(yīng)用于 C/C++ 編寫的程序,,或使用 Visual Studio 編譯的程序,。CFG 保護(hù)的作用是檢測攻擊者對(duì)程序執(zhí)行流程的更改,如果出現(xiàn)這種情況,,CFG 機(jī)制會(huì)終止程序的運(yùn)行,。
**9. Protected Processes**
借助 Protected Processes 特性,Win10 可阻止非信任進(jìn)程與已驗(yàn)證進(jìn)程間的交互,。Protected Processes 機(jī)制為進(jìn)程定義了不同的信任級(jí)別,,不同信任級(jí)別間的進(jìn)程禁止交互,從而避免信任級(jí)別高的進(jìn)程被信任級(jí)別低的進(jìn)程所攻擊,。該特性在 Win10 系統(tǒng)中被廣泛使用,,并且首次實(shí)現(xiàn)了將反惡意程序的解決方案應(yīng)用到保護(hù)的進(jìn)程中。
**10. Universal Windows apps protections**
當(dāng)用戶從 Windows 應(yīng)用商店下載程序時(shí),,他們不太可能會(huì)碰到惡意軟件,,商店中的所有應(yīng)用程序在提供下載前都經(jīng)過了仔細(xì)的篩選,以確保其符合安全要求,。
**11. No Child Proc**
攻擊者可通過在沙盒中創(chuàng)建子進(jìn)程來繞過各種防護(hù)措施,,此特性能阻止這類攻擊。
最后,,我們給出 Win10 系統(tǒng)在各階段特性更新中引入的保護(hù)措施示意圖:
![1](https://msdnshared.blob.core.windows.net/media/2017/08/Pic_thumb1.png)
這些防護(hù)方案的主要目標(biāo)是:
- 減小 Windows 系統(tǒng)的攻擊面
- 消除現(xiàn)有的漏洞利用技術(shù)
- 通過隔離機(jī)制弱化漏洞的影響
- 增加漏洞利用開發(fā)的難度和代價(jià)