成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

研究”加固Windows 10的0day利用緩解措施”

安全 網站安全
DesktopVerifyHeapLargeUnicodeString是新的加固函數。它使用LargeUnicodeString地址為參數,這個包含了我們通過調用SetWindowLongPtr改變的指針。并且針對Desktop的tagWND對象的一個指向tagDESKTOP結構體的指針被使用。

 [[183464]]

0x00 前言

在兩周前,來自Windows攻擊安全研究團隊(OSR)發布的關于加固Windows 10對抗內核利用:https://blogs.technet.microsoft.com/mmpc/2017/01/13/hardening-windows-10-with-zero-day-exploit-mitigations/https://blogs.technet.microsoft.com/mmpc/2017/01/13/hardening-windows-10-with-zero-day-exploit-mitigations/

Windows上的內核利用幾乎總是需要原始內核讀或寫。因此OSR報告了Windows 10周年版更新如何加固來緩解原始操作的使用。問題來自與tagWND對象,在內核中表示一個窗口。讀了這個博文,我想起了我去年10月份做的一些研究。大約在Black Hat Europe 2016之前兩周,我在Windows10周年版更新上面查找利用tagWND對象來原始讀寫。但是在我準備寫些關于我發現的東西之前,在Black Hat Europe上通過窗口攻擊窗口的討論就發表了:https://www.blackhat.com/docs/eu-16/materials/eu-16-Liang-Attacking-Windows-By-Windows.pdf

因此我停止了寫作的想法,因為我的發現基本上和他們相同。然而在讀了OSR發布的博文后,來自Yin Liang 和 Zhou Li的演講只能在1511版本上面演示,這個版本不存在新的緩解措施。然而我做我的研究時發現了一些煩人的指針驗證,但是發現了一個繞過他們的方式,在當時并沒有想到它。現在我確認了這個指針驗證就是OSR發布的加固措施,并且他們非常容易繞過,重新帶回原始讀寫功能。

本文將瀏覽加固的過程,和它的問題,且如何繞過它。下面的分析是在2016年更新的Windows 10版本研究的。

0x01 原始PoC

我將復用來自Black Hat Europe的演講內容,因此如果你還沒有閱讀,我建議你現在看一下它。這個演講的本質是一個write-what-where漏洞的情況,結構體tagWND的cbwndExtra字段可能增長并且允許覆蓋內存。因此如果兩個tagWND對象緊挨著存放,覆蓋第一個tagWND對象的cbwndExtra字段可能允許利用來修改下一個tagWND對象的字段。這些當中有strName,包含了一個窗口標題位置的指針,修改這個能被利用來在內核內存中讀寫。下面的代碼片段展示了如何使用SetWindowLongPtr和NtUserDefSetText來做到這點:

這個創建了一個新的LargeUnicodeString對象和試圖在任意地址寫入內容。調用SetWindowLongPtr被用來改變窗口名字的指針,并且然后再次恢復它。這個在周年版之前的所有版本可以有效,現在會引起相面的bugcheck:

這個確實在OSR發布的博文中有描述。

0x02 深入挖掘

為了理解為什么會引起bugcheck,我開始調試函數DefSetText的流程。當進入這個函數,我們已經有了RCX存放的tagWND對象的地址和RDX存放的指向新的LargeUnicodeString對象的指針。第一部分的驗證如下:

這個僅僅確保tagWND對象和新的LargeUnicodeString對象格式正確。一點點深入函數:

DesktopVerifyHeapLargeUnicodeString是新的加固函數。它使用LargeUnicodeString地址為參數,這個包含了我們通過調用SetWindowLongPtr改變的指針。并且針對Desktop的tagWND對象的一個指向tagDESKTOP結構體的指針被使用。新函數的第一部分是驗證字符串的長度是不是正確的格式,并且不還有原始長度,因為他們應該是Unicode字符串:

然后校驗確保LargeUnicodeString的長度不是負數:

然后以指向tagDESKTOP的指針為參數調用DesktopVerifyHeapPointer,記住RDX已經包含了緩沖區地址。接下來發生的是觸發bugcheck。在結構體tagDESKTOP對象的偏移0x78和0x80處解引用了,這是桌面的堆和大小,比較地址我們試圖寫操作LargeUnicodeString。如果那個地址不在桌面堆中,則會引起bugcheck。OSR說的加固措施如下:

非常清晰,原始寫不再有效,除非在桌面堆中使用,但是被限制了。

0x03 新的希望

不是所有的都丟了,桌面堆的地址和它的大小都來自tagDESKTOP對象。然而沒有驗證指向tagDESKTOP對象的指針是否正確。因此如果我們創建一個假的tagDESKTOP對象,并且替換原始的,然后我們能控制0x78和0x80偏移。因為指向tagDESKTOP的指針被tagWND使用,我們也能使用SetWindowLongPtr修改它。下面是更新的函數:

g_fakeDesktop被分配的用戶層地址是0x2a000000。因為Windows10不采用SMAP所以這是可能的,然而如果這么做,我們能將它放到桌面堆上,因為仍然允許在哪里寫。運行更新的PoC來確保校驗通過了,并且回到下面的代碼片段:

因此另一個調用來做相同的校驗,還是tagDESKTOP作為第一個參數,現在緩沖區指針加上最大字符串的長度減1是第二個參數,而不是字符串緩沖區的開始。校驗將通過并執行到DefSetText。

當我們繼續執行,我們還會引起一個新的bugcheck:

這是因為下面的指令:

因為R9包含了0x1111111111111111,非常清楚是由假的tagDESKTOP對象填充的。使用IDA我們發現:

 

證實了R9的內容確實來自tagDESKTOP指針,并且是第二個QWORD。因此我們能更新代碼來設置這個值。如果設置為0,解引用被繞過。運行新的代碼不會導致崩潰,任意覆蓋如下:

0x04 總結

總結下OSR確實做了加固措施,但是還不夠。相同的方式也能通過使用InternalGetWindowText來作為原始讀。

代碼如下:https://github.com/MortenSchenk/tagWnd-Hardening-Bypass

責任編輯:武曉燕 來源: improsec
相關推薦

2021-09-10 11:41:20

漏洞Windows 微軟

2013-05-23 10:48:14

EPATHOBJ 0d0day漏洞

2021-07-14 17:17:45

0day漏洞惡意代碼

2019-05-28 15:55:18

2009-07-06 13:15:07

2015-07-14 10:53:19

Hacking Tea0Day漏洞

2010-09-01 15:18:04

2009-09-09 08:54:50

2011-03-15 15:14:22

2024-10-17 16:25:20

2013-12-02 14:50:25

2015-05-20 16:34:14

2021-07-16 10:30:53

Google漏洞Chrome

2012-06-19 15:16:05

2020-12-27 21:17:43

漏洞Google網絡攻擊

2009-02-25 16:28:46

2021-10-06 13:48:50

0day漏洞攻擊

2024-07-31 08:46:10

2013-05-06 15:15:23

2021-07-27 11:01:02

Windows
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天综合永久入口 | 一级黄色毛片子 | av片免费观看 | 九九九久久国产免费 | 国产高清毛片 | www.久久 | 国内精品视频免费观看 | 日本精品裸体写真集在线观看 | 久久久91精品国产一区二区三区 | 亚洲欧洲小视频 | 亚洲乱码国产乱码精品精98午夜 | 99久久精品国产一区二区三区 | 综合久久久 | 久热免费在线 | 久草新在线 | 一区二区电影网 | 中文字幕在线观看第一页 | 天天操夜夜操免费视频 | 狠狠久久 | 日韩高清国产一区在线 | 久久久精品网站 | 国产高清在线精品一区二区三区 | 999国产精品视频免费 | 日韩在线精品视频 | 国产一二区视频 | 国产午夜在线 | 国产在线观看 | 一级毛片在线播放 | 日韩欧美一区在线 | 久草院线 | 免费看黄色视屏 | 99久久精品一区二区毛片吞精 | 亚洲精品国产精品国自产在线 | 九九热这里 | 99热这里都是精品 | 国产男女视频网站 | 精品一区二区av | 欧美精品久久 | 国产日韩欧美 | 一级毛片视频免费观看 | 精品国产亚洲一区二区三区大结局 |