DOIT 發(fā)表于:13年09月28日 13:00 [來(lái)稿] DOIT.com.cn
簡(jiǎn)要概述
9月24日亞洲知名安全技術(shù)峰會(huì)SyScan在北京召開(kāi)。在大會(huì)上Instruder做了《深入思考UAC背后的安全問(wèn)題》演講。會(huì)后筆者針對(duì)這一議題做了詳細(xì)分析與測(cè)試,就UAC提升用戶權(quán)限的的問(wèn)題做了總結(jié)與分析。
研究背景
現(xiàn)在WIN7操作系統(tǒng)以經(jīng)大量普及,UAC的安全機(jī)制以成為滲透過(guò)程中最為明顯的絆腳石,UAC會(huì)使大量滲透工具失效,木馬無(wú)法運(yùn)行,如何突破UAC的層層防護(hù)是一直以來(lái)研究的重點(diǎn)。
研究目的
經(jīng)過(guò)學(xué)習(xí)與研究應(yīng)該實(shí)現(xiàn),在當(dāng)前用戶權(quán)限下,繞過(guò)UAC提示直接運(yùn)行程序,并可以實(shí)現(xiàn)修改啟動(dòng)項(xiàng),釋放文件到系統(tǒng)目錄等功能,而這一過(guò)程必須在用戶沒(méi)有任意察覺(jué)的情況下完成。
研究方案
白名單機(jī)制
從用戶賬戶控制對(duì)權(quán)限進(jìn)行保護(hù)的基本過(guò)程可以看到,在用戶以管理員權(quán)限運(yùn)行程序的 過(guò)程中,用戶賬戶控制在向用戶進(jìn)行提權(quán)詢問(wèn)前,將會(huì)先查詢本地系統(tǒng)中的白名單以決定是 否直接放行,因此,白名單機(jī)制是用戶賬戶控制中的一個(gè)重要部分。用戶賬戶控制限制著程 序使用高級(jí)權(quán)限才能進(jìn)行的操作,但是,這樣的機(jī)制同樣也會(huì)對(duì)系統(tǒng)本身的程序造成影響,微軟也不希望系統(tǒng)程序的運(yùn)行也詢問(wèn)用戶,因?yàn)樗麄儽旧硎前踩。因此,微軟則在 UAC 中添加了白名單機(jī)制,即在系統(tǒng)中記錄有一張表單,對(duì)于表單中的系統(tǒng)程序,將不限 制其直接提升到管理員權(quán)限。系統(tǒng)中的白名單程序有多個(gè),其中,msconfig、taskmgr、perfmon、cleanmgr 等平時(shí)常用的程序都在其中。
實(shí)現(xiàn)直接提權(quán)
比較常用的利用系統(tǒng)程序的方法是利用系統(tǒng)動(dòng)態(tài)加載 DLL的特性,在系統(tǒng)中還有一份名單為 KnownDlls,當(dāng)一個(gè)程序需要?jiǎng)討B(tài)加載 DLL 的時(shí)候,會(huì)先在這份名單之中進(jìn)行查找,如果找到則加載相應(yīng)路徑的DLL 文件,如果沒(méi)有找到則依照當(dāng)前目錄、 System32 目錄的順序進(jìn)行查找,因此如果能找到一個(gè)程序動(dòng)態(tài)調(diào)用的 DLL 文件不在KnownDlls 中,而在 System32 下面,則可以偽造一個(gè)相應(yīng)的 DLL,來(lái)實(shí)現(xiàn)借助其他程序來(lái) 執(zhí)行需要的操作。在所有白名單程序中,正好有這樣一個(gè)程序,即 sysprep.exe,它的位置為 System32/sysprep/,而它在啟動(dòng)時(shí),會(huì)動(dòng)態(tài)加載一個(gè) CRYPTBASE.DLL,這個(gè) DLL 在 System32 下面,因此 sysprep.exe 會(huì)在當(dāng)前目錄尋找的時(shí)候加載失敗,繼而轉(zhuǎn)到 System32 目錄查找, 試著臨時(shí)生成一個(gè)假的 CRYPTBASE.DLL 放在 sysprep 文件夾下,在 sysprep.exe啟動(dòng)時(shí),將加載假的 CRYPTBASE.DLL,從而執(zhí)行我們需要的操作。sysprep.exe 加載假 CRYPTBASE.DLL線程注入白名單中的程序全部都在系統(tǒng)目錄當(dāng)中,因此要把生成的假 DLL 復(fù)制到程序目錄中, 將會(huì)由于權(quán)限問(wèn)題而觸發(fā) UAC,這樣便失效了。因此,需要特別的方法來(lái)把假 DLL 給復(fù)制到系統(tǒng)目錄內(nèi),并且不會(huì)觸發(fā)系統(tǒng)的權(quán)限控制。這一步的操作也需要系統(tǒng)白名單的程序來(lái)實(shí)現(xiàn),選用的程序?yàn)镋XPLORER進(jìn)程,首先使用遠(yuǎn)程線程的方法把DLL注入到EXPLORER進(jìn)程,然后再通過(guò)EXPLORER把CRYPTBASE.DLL復(fù)制到指定目錄UAC不會(huì)提示。所有操作完成后啟動(dòng)sysprep.exe我們的DLL就會(huì)被加載,從而繞過(guò)成功。但這個(gè)方法缺點(diǎn)也很明顯,在注入EXPLORER進(jìn)程時(shí),殺毒軟件已經(jīng)開(kāi)始關(guān)注了。
SyScan大會(huì)中的方法
與傳統(tǒng)方法也有類(lèi)似之處,議題作者Instruder采用的方法也是白名單的方法但又有不同之處,頗為巧妙,作者使用的方法為利用操作系統(tǒng)自己的升級(jí)程序WUSA.EXE,讀取釋放文件,這個(gè)過(guò)程是不會(huì)觸發(fā)UAC的,利用這個(gè)機(jī)制可以輕松突破UAC限制,下面我們一步一步演示實(shí)現(xiàn),首先把wusa.exe找出來(lái),此文件位于 c:\windows\syswow64目錄如圖1所示。
圖1
找到這個(gè)文件后,運(yùn)行一下,看一下它的具體使用方法,具體情況如圖2所示。
圖2
找到WUSA.EXE后我們還要找一個(gè) MSU的文件用來(lái)做測(cè)試用,我從自己電腦中隨便搜索一些MSU文件出來(lái)如圖3所示。
圖3
到目前為至準(zhǔn)備工具基本就需了,我們來(lái)做實(shí)驗(yàn),使用WUSA.EXE把一個(gè)MSU文件釋放一下,看能否成功,實(shí)驗(yàn)方法如下,復(fù)制一個(gè)MSU文件到D:\TEMP目錄,然后在CMD下切換目錄到c:\windows\syswow64,最后運(yùn)行wusa.exe d:\temp\msu.msu /extract:d:\temp 這時(shí)看到一個(gè)很快的進(jìn)度一閃而過(guò),我比較愚鈍沒(méi)能抓下圖來(lái),去D:\TEMP目錄看一下是什么情況如圖4所示。
圖4
可以看出文件以成功釋放,這樣很好,下一步繼續(xù)實(shí)驗(yàn),把釋放目錄修改一下,直接釋放到系統(tǒng)目錄WINDOWS下,看會(huì)如何表現(xiàn),執(zhí)行wusa.exe d:\temp\msu.msu /extract:c:\windows
結(jié)果很理想,成功釋放而且沒(méi)有觸發(fā)UAC提示,而我此時(shí)的UAC設(shè)置如圖5所示。
圖5
到目前為至我們可以考慮一些邪惡的事情了,比如釋放一些木馬病毒DLL劫持的文件到系統(tǒng)目錄這樣子,不會(huì)觸發(fā)UAC程序,同時(shí)木馬與病毒也會(huì)開(kāi)機(jī)啟動(dòng)了,再繼續(xù)向下實(shí)驗(yàn)吧目前思路上是沒(méi)問(wèn)題了,那么要考慮的是MSU文件了,這個(gè)文件看一下是有微軟數(shù)字簽名的如圖6、7所示。
圖6、7
問(wèn)題隨之而來(lái),WUSA.EXE會(huì)對(duì)MSU文件進(jìn)行簽名校驗(yàn)嗎?這個(gè)我們可以通過(guò)破壞數(shù)字簽名來(lái)驗(yàn)證一下,使用16進(jìn)制編輯工具把MSU文件隨便添加幾個(gè)字節(jié)如圖8所示。
圖8
現(xiàn)在數(shù)字簽名以經(jīng)被破解,無(wú)效了,如圖9所示。
圖9
清理之前釋放的文件后,再運(yùn)行一下進(jìn)行釋放檢測(cè),看下結(jié)果,呵呵結(jié)果非常理想,依然成功釋放,這說(shuō)明 WUSA.EXE對(duì)MSU文件是沒(méi)有簽名校驗(yàn)的,我們可以隨便偽造MSU文件了。
取代MSU文件
經(jīng)過(guò)一系列的測(cè)試,已經(jīng)知道,只要搞定MSU文件就成大功告成了,msu 文件擴(kuò)展名與 Windows 更新獨(dú)立安裝程序相關(guān)聯(lián)。msu 文件中包含以下內(nèi)容:
Windows Update 元數(shù)據(jù),此元數(shù)據(jù)描述了 .msu 文件包含的每個(gè)更新包。一個(gè)或多個(gè) .cab 文件,每個(gè) .cab 文件代表一個(gè)更新。一個(gè) .xml 文件,此 .xml 文件對(duì) .msu 更新包進(jìn)行描述。
看起來(lái)還是蠻復(fù)雜的樣子,呵呵能不能偷偷懶,想其它方法進(jìn)行繞過(guò)呢,微軟的工具對(duì)自己的文件格式兼容性,應(yīng)該是不錯(cuò)的,既然是文件包,那就測(cè)試微軟的CAB包。繼續(xù)實(shí)驗(yàn),把MSU文件,換成CAB文件測(cè)試,結(jié)果很理想,依然可以成功,那么我們的后續(xù)工作就很簡(jiǎn)單了,只要把想釋放的文件壓縮到CAB包,再利用上述方法就可以成功釋放了,而且整個(gè)過(guò)程非常安逸,不會(huì)有UAC提示。
此外作者也提供了其實(shí)利用方法,總體來(lái)看,并不復(fù)雜,只要掌握繞過(guò)原理,其實(shí)現(xiàn)過(guò)程都是可以實(shí)現(xiàn)的,由于時(shí)間關(guān)系,沒(méi)有一一試驗(yàn),有興趣的朋友可以自行測(cè)試一下。
公司簡(jiǎn)介 | 媒體優(yōu)勢(shì) | 廣告服務(wù) | 客戶寄語(yǔ) | DOIT歷程 | 誠(chéng)聘英才 | 聯(lián)系我們 | 會(huì)員注冊(cè) | 訂閱中心
Copyright © 2013 DOIT Media, All rights Reserved. 北京楚科信息技術(shù)有限公司 版權(quán)所有.