WINDOWS 7 RC 7100 GDI驅(qū)動Win32k.sys內(nèi)核D.O.S漏洞

感謝:Iceboy發(fā)現(xiàn)此問題并提供DUMP
漏洞廠商及產(chǎn)品:Microsoft Windows 7 rc 7100 090421
存在漏洞組件:win32k.sys Timestamp :49ee8dc8
存在漏洞函數(shù):NtUserGetDc/NtUserGetDcEx
漏洞描述:Win32k.sys是WINDOWS的GDI驅(qū)動程序,包含大量復(fù)雜的圖形界面處理,由于其中大量代碼是從WIN3.1中修改過來,因此成了WINDOWS漏洞多發(fā)之地。
這個漏洞主要是因為Windows 7 在其NtUserGetDc/NtUserGetDcEx函數(shù)中(也許不僅僅是這兩個函數(shù))不正確地使用了共享臨界鎖,導(dǎo)致了任何權(quán)限下的GDI程序可以引發(fā)內(nèi)核BSOD,從而進(jìn)行DOS攻擊
漏洞分析:
在WINDOWS VISTA中,在這兩個函數(shù)進(jìn)入前,會調(diào)用UserEnterUserCirtSec,進(jìn)入臨界區(qū),同時會將gptiCurrent設(shè)置為當(dāng)前線程的WIN32THREAD
UserEnterUserCritSec的實現(xiàn)如下:
PWIN32THREAD UserEnterUserCritSec()
{
PWIN32THREAD pwin32Thread;
pwin32Thread = ExEnterPriorityRegionAndAcquireResourceExclusive(gpresUser);
gptiCurrent = pwin32Thread;
gbValidateHandleForIL = 1;
return pwin32Thread;
}
ExEnterPriorityRegionAndAcquireResourceShared是NTOSKRNL 導(dǎo)出一個提供給WIN32K使用的共享資源鎖函數(shù),這個函數(shù)將共享鎖住gpresUser這個資源,同時返回當(dāng)前線程的Win32Thread,即 KeGetCurrentThread->Win32Thread
同時內(nèi)核函數(shù)ExEnterPriorityRegionAndAcquireResourceExclusive也與其類似。
(XP則是調(diào)用KeEnterCriticalRegion后,用ExAcquireResourceExclusiveLite鎖住 gpresUser,然后用PsGetCurrentThread->PsGetThreadWin32Thread獲得當(dāng)前線程 win32kthread,存放到gptiCurrent)
而在windows 7 中,這兩個函數(shù)進(jìn)入前,改為了調(diào)用UserEnterSharedCrit,進(jìn)入共享臨界區(qū)
UserEntrySharedCirt的實現(xiàn)很簡單
PWIN32THREAD EnterSharedCrit()
{
return ExEnterPriorityRegionAndAcquireResourceShared(gpresUser);
}
可以注意到,這里并不設(shè)置gptiCurrent,事實上,NtUserGetDc/NtUserGetDcEx會將這個函數(shù)保存在寄存器中以便使用CurrentWin32Thread中存放的數(shù)據(jù)
從關(guān)鍵臨界轉(zhuǎn)為共享臨界,無疑這樣的修改將提升NtUserGetDc/NtUserGetDcEx的效率,減少了鎖競爭的可能,但是在這里這樣修改是錯誤的.
因為在共享臨界中,沒有修改gptiCurrent,那么就很可能遇到gptiCurrent非法的狀態(tài),比如遇到一個沒有做PsConvertToGuiThread的線程導(dǎo)致了gptiCurrent為空.
WIN32K中有大量內(nèi)部例程(經(jīng)常以zzz,xxx開頭),他們都認(rèn)為在調(diào)用自己之前,gptiCurrent是一個有效的狀態(tài)。這其中就包括了xxxDestoryWindow
一個BSOD的例子是:NtUserGetDc->GetWindowDc->GetDcEx->SpbCheckDce->SpbCheckRect->SpbCheckRect2->FreeSpb
調(diào)用到FreeSpb時,這里要釋放一個spb對象了
接著就到
FreeSpb->HMAssigmentUnlock->HMUnlockObject->HMUnlockObjectInternal->HMDestroyUnlockedObject, 最終調(diào)用到了ganti表中的函數(shù),由于這里是GetWindowDc,所以將調(diào)用xxxDestroyWindow,xxxDestroyWindow 第一句代碼就無檢查引用了gptiCurrent指針中的數(shù)據(jù),自然直接導(dǎo)致BSOD
解決方案:
等待微軟更新官方補丁.
微軟可能的更新手段:
犧牲效率將NtUserGetDc等中的不正確共享鎖替換為關(guān)鍵臨界鎖,或者將所有NtUserGetDc等函數(shù)可能用到的內(nèi)部函數(shù)中的gptiCurrent引用去掉或換為不引用gptiCurrent的其他函數(shù)
相關(guān)文章
深度花園 Ghost Windows7 旗艦裝機版 2010(附可激活工具)
本系統(tǒng)以適合電腦公司和維護(hù)人員快速裝機為目的,以微軟090602官方發(fā)布的Windows XP SP3免激活VOL原版為母盤,精心制作而成,采用微軟內(nèi)部封裝技術(shù),實現(xiàn)Longhorn的detecth2010-04-06Windows Vista Ultimate SP1簡體中文精簡ghost極速安裝版下載
windows2003 IIS占用CPU資源100%的解決辦法
機器正在調(diào)試或允許IIS時,被異常中斷服務(wù)(比如停電),然后再次IIS運行頁面時,CPU資源占用100%,即使重新啟動也無效2008-09-08- 抵制微軟,支持開源。Ubuntu是從Debian Linux派生出來的Linux操作系統(tǒng)發(fā)布包。每6個月發(fā)布新的版本。使用 APT 包管理系統(tǒng)優(yōu)雅地解決了依賴問題,并且可以從容的在線安裝升級2008-11-03
QQ電腦管家 2合1殺毒版 v8.4(10040) 全面兼容windows8 中文官方安裝版
QQ電腦管家安全保護(hù)全面可靠可查殺能力全面升級,云查殺和可疑智能檢測技術(shù)二合一,強力查殺各類流行木馬。2013-09-04Solaris10之加載Windows/EXT等分區(qū)數(shù)據(jù)
1、下載工具包: FSWpart http://www.genunix.org/distribut ... iles/FSWpart.tar.gz FSWfsmisc http://www.genunix.org/distribut ... es/FSWfsmisc.t2008-09-08竹林蹊徑 深入淺出Windows驅(qū)動開發(fā) 張佩等著 中文 PDF版 [106M]
本書是作者根據(jù)多年的工作學(xué)習(xí)經(jīng)驗,總結(jié)的第一手驅(qū)動開發(fā)資料。本書更多的是經(jīng)驗之談,一些實踐中的小發(fā)現(xiàn)小意外,頗為書中內(nèi)容添彩。2012-11-21- SQLiteManager是一個支持多國語言基于Web的SQLite數(shù)據(jù)庫管理工具。它的特點包括多數(shù)據(jù)庫管理,創(chuàng)建和連接;表格,數(shù)據(jù),索引操作;視圖,觸發(fā)器,和自定義函數(shù)管理。數(shù)據(jù)導(dǎo)2012-02-27
- WINDOWS7-7100RC簡體中文純凈安裝版封裝時用了最先進(jìn)的工具,所以鏡像大?。?.43G 說明一下幾點: 想裝雙系統(tǒng)或多系統(tǒng)用這個最合適 1、本鏡像由于制作時間短,安裝過程2009-07-13
- 據(jù)國外媒體報道,微軟新操作系統(tǒng)Windows 7發(fā)布期限日益臨近,業(yè)內(nèi)分析師認(rèn)為Windows 7雖然承載了許多期望,但是它要想獲得成功還必須解決下面一些問題.2009-10-18