針對UAC安全的研究與思考

簡要概述:9月24日亞洲知名安全技術峯會SyScan在北京召開。在大會上Instruder做了《深入思考UAC背後的安全問題》演講。會後筆者針對這一議題做了詳細分析與測試,就UAC提升用戶權限的的問題做了總結與分析。

  研究背景:現在WIN7操作系統以經大量普及,UAC的安全機制以成爲滲透過程中最爲明顯的絆腳石,UAC會使大量滲透工具失效,木馬無法運行,如何突破UAC的層層防護是一直以來研究的重點。

  研究目的:經過學習與研究應該實現,在當前用戶權限下,繞過UAC提示直接運行程序,並可以實現修改啓動項,釋放文件到系統目錄等功能,而這一過程必須在用戶沒有任意察覺的情況下完成。

  研究方案

  1、白名單機制:從用戶賬戶控制對權限進行保護的基本過程可以看到,在用戶以管理員權限運行程序的過程中,用戶賬戶控制在向用戶進行提權詢問前,將會先查詢本地系統中的白名單以決定是 否直接放行,因此,白名單機制是用戶賬戶控制中的一個重要部分。用戶賬戶控制限制着程序使用高級權限才能進行的操作,但是,這樣的機制同樣也會對系統本身的程序造成影響,微軟也不希望系統程序的運行也詢問用戶,因爲他們本身是安全的。因此,微軟則在 UAC 中添加了白名單機制,即在系統中記錄有一張表單,對於表單中的系統程序,將不限 制其直接提升到管理員權限。系統中的白名單程序有多個,其中,msconfig、taskmgr、perfmon、cleanmgr 等平時常用的程序都在其中。

  2、實現直接提權:比較常用的利用系統程序的方法是利用系統動態加載 DLL的特性,在系統中還有一份名單爲 KnownDlls,當一個程序需要動態加載 DLL 的時候,會先在這份名單之中進行查找,如果找到則加載相應路徑的DLL 文件,如果沒有找到則依照當前目錄、 System32 目錄的順序進行查找,因此如果能找到一個程序動態調用的 DLL 文件不在KnownDlls 中,而在 System32 下面,則可以僞造一個相應的 DLL,來實現藉助其他程序來 執行需要的操作。在所有白名單程序中,正好有這樣一個程序,即 sysprep.exe,它的位置爲 System32/sysprep/,而它在啓動時,會動態加載一個 CRYPTBASE.DLL,這個 DLL 在 System32 下面,因此 sysprep.exe 會在當前目錄尋找的時候加載失敗,繼而轉到 System32 目錄查找, 試着臨時生成一個假的 CRYPTBASE.DLL 放在 sysprep 文件夾下,在 sysprep.exe啓動時,將加載假的 CRYPTBASE.DLL,從而執行我們需要的操作。sysprep.exe 加載假 CRYPTBASE.DLL線程注入白名單中的程序全部都在系統目錄當中,因此要把生成的假 DLL 複製到程序目錄中, 將會由於權限問題而觸發 UAC,這樣便失效了。因此,需要特別的方法來把假 DLL 給複製到系統目錄內,並且不會觸發系統的權限控制。這一步的操作也需要系統白名單的程序來實現,選用的程序爲EXPLORER進程,首先使用遠程線程的方法把DLL注入到EXPLORER進程,然後再通過EXPLORER把CRYPTBASE.DLL複製到指定目錄UAC不會提示。所有操作完成後啓動sysprep.exe我們的DLL就會被加載,從而繞過成功。但這個方法缺點也很明顯,在注入EXPLORER進程時,殺毒軟件已經開始關注了。

  SyScan大會中的方法

  與傳統方法也有類似之處,議題作者Instruder採用的方法也是白名單的方法但又有不同之處,頗爲巧妙,作者使用的方法爲利用操作系統自己的升級程序WUSA.EXE,讀取釋放文件,這個過程是不會觸發UAC的,利用這個機制可以輕鬆突破UAC限制,下面我們一步一步演示實現,首先把wusa.exe找出來,此文件位於 c:\windows\syswow64目錄如圖1所示。

針對UAC安全的研究與思考
▲圖1

  找到這個文件後,運行一下,看一下它的具體使用方法,具體情況如圖2所示。

針對UAC安全的研究與思考
▲圖2

  找到WUSA.EXE後我們還要找一個 MSU的文件用來做測試用,我從自己電腦中隨便搜索一些MSU文件出來如圖3所示。

針對UAC安全的研究與思考
▲圖3

  到目前爲至準備工具基本就需了,我們來做實驗,使用WUSA.EXE把一個MSU文件釋放一下,看能否成功,實驗方法如下,複製一個MSU文件到D:\TEMP目錄,然後在CMD下切換目錄到c:\windows\syswow64,最後運行wusa.exe d:\temp\msu.msu /extract:d:\temp 這時看到一個很快的進度一閃而過,我比較愚鈍沒能抓下圖來,去D:\TEMP目錄看一下是什麼情況如圖4所示。

針對UAC安全的研究與思考
▲圖4

  可以看出文件以成功釋放,這樣很好,下一步繼續實驗,把釋放目錄修改一下,直接釋放到系統目錄WINDOWS下,看會如何表現,執行wusa.exe d:\temp\msu.msu /extract:c:\windows

  結果很理想,成功釋放而且沒有觸發UAC提示,而我此時的UAC設置如圖5所示。

針對UAC安全的研究與思考

到目前爲至我們可以考慮一些邪惡的事情了,比如釋放一些木馬病毒DLL劫持的文件到系統目錄這樣子,不會觸發UAC程序,同時木馬與病毒也會開機啓動了,再繼續向下實驗吧目前思路上是沒問題了,那麼要考慮的是MSU文件了,這個文件看一下是有微軟數字簽名的如圖6、7所示。

針對UAC安全的研究與思考
▲圖6

針對UAC安全的研究與思考
▲圖7

  問題隨之而來,WUSA.EXE會對MSU文件進行簽名校驗嗎?這個我們可以通過破壞數字簽名來驗證一下,使用16進制編輯工具把MSU文件隨便添加幾個字節如圖8所示。

針對UAC安全的研究與思考
▲圖8

  現在數字簽名以經被破解,無效了,如圖9所示。

針對UAC安全的研究與思考
▲圖9

  清理之前釋放的文件後,再運行一下進行釋放檢測,看下結果,呵呵結果非常理想,依然成功釋放,這說明 WUSA.EXE對MSU文件是沒有簽名校驗的,我們可以隨便僞造MSU文件了。

  取代MSU文件

  經過一系列的測試,已經知道,只要搞定MSU文件就成大功告成了,msu 文件擴展名與 Windows 更新獨立安裝程序相關聯。msu 文件中包含以下內容:

  Windows Update 元數據,此元數據描述了 .msu 文件包含的每個更新包。一個或多個 .cab 文件,每個 .cab 文件代表一個更新。一個 .xml 文件,此 .xml 文件對 .msu 更新包進行描述。

  看起來還是蠻複雜的樣子,呵呵能不能偷偷懶,想其它方法進行繞過呢,微軟的工具對自己的文件格式兼容性,應該是不錯的,既然是文件包,那就測試微軟的CAB包。繼續實驗,把MSU文件,換成CAB文件測試,結果很理想,依然可以成功,那麼我們的後續工作就很簡單了,只要把想釋放的文件壓縮到CAB包,再利用上述方法就可以成功釋放了,而且整個過程非常安逸,不會有UAC提示。

  此外作者也提供了其實利用方法,總體來看,並不複雜,只要掌握繞過原理,其實現過程都是可以實現的,由於時間關係,沒有一一試驗,有興趣的朋友可以自行測試一下。

原文鏈接:http://safe.it168.com/a2013/0929/1540/000001540450_all.shtml

發佈了49 篇原創文章 · 獲贊 49 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章