?

Sep 03 2016

Bypass UAC的一個實例分析

首頁 » 滲透測試 » Bypass UAC的一個實例分析   

* 本文原創作者:zzz66686,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

1. 引言

關于Bypass UAC這個主題,早已有了很多很成熟的方法,但普遍是以demo的形式出現,讓大家參考學習的。在本文中,筆者拿出一個運用bypassUAC技術的病毒實例Cerber進行分析,通過逆向分析該實例讓各位讀者能夠對bypass UAC的完整執行過程有一個正確的認識。

Cerber是一款著名的勒索軟件,如果對勒索軟件有過一些研究,那一定聽說過這款勒索軟件。此外,本文可以作為www.freebuf.com/sectool/95661.html 的補充,該文只提到了一個工具的使用,而本文則深入討論了Cerber中用到的Bypass UAC的技術細節。

2. 整體概述

Cerber勒索軟件有多種運行模式,在啟動時傳遞不同參數會進入不同的模式,但本文并不對Cerber勒索軟件本身進行分析。如果啟動默認模式,即以無命令行參數啟動Cerber勒索軟件,那么其執行流程是這樣子的:1.jpg

 

其中,dropper是拿到的樣本;launcher隱藏在dropper內的另一個執行體,dropper會在內存中直接加載launcher。此后,launcher會檢測當前執行體的所在路徑,若不在其指定位置,則將其復制到指定位置即%APPDATA%\Roaming,然后重新加載運行自身;若已在其指定位置,則進行bypass UAC以管理員權限重新加載自身。最后,樣本會開始其惡意行為,如加密用戶文件等。

至于UAC的嚴格定義,可以參考msdn。這里僅僅摘抄下度娘:用戶帳戶控制(User Account Control, UAC)是Windows Vista的一個重要的新增安全功能。它可以防止惡意軟件獲取特權,就算用戶是以管理員帳戶登錄也可以起到保護作用。簡言之,可以把UAC理解為下圖內容:

2.jpg

 

 

本文的研究內容即為Cerber是如何靜默地過掉該提示,并以管理員身份運行自身。也就是研究第一幅圖中的Bypass UAC的環節。

3. 詳細分析

受限于篇幅原因,本文就不介紹bypass UAC之前的內容。按照第二章整體概述的說明,應該可以很快的找到bypass UAC的起始位置,這里直接開始分析其bypass UAC的過程。首先,在%SystemRoot%\system32目錄下尋找一個Windows白名單程序。這里所謂的Windows白名單程序特指有UAC權限且不觸發UAC對話框的系統程序:

3.jpg

 

其查找過程是通過FindFirstFile實現的,獲取文件之后取其后綴名,與.exe比較


4.jpg

 

進而在獲取的manifest中查找是否有autoElevate標簽,并判斷其標簽內容是否為true;然后查找是否有requestedExecutionLevel標簽,判斷其標簽的level屬性是否為requireAdministrator。

5.jpg

 樣本找到的AdapterTroubleshooter.exe顯然滿足以上條件,順利進入下一步。如果不滿足會繼續第一步的查找過程,找到一個新的可執行程序。

第三步,遍歷AdapterTroubleshooter.exe的導入表,找到一個可以被劫持的dll。其判斷是否可被劫持的方法是調用ZwOpenSection函數,判斷其返回值是否成功。如果ZwOpenSection返回成功,則該dll不可作為劫持dll;反之,則可劫持。

 

6.jpg 

 相關函數的作用以在上圖中標出。下圖展示了調用ZwOpenSection函數判斷是否可以劫持的邏輯流程。、

 7.jpg

 

在筆者的測試機中,Cerber發現了d3d9.dll可以被劫持。

第四步,將d3d9.dll復制到臨時的目錄中,并在結尾處追加一個新的段,可以用PEiD查看:

 

 8.jpg

 

 

其追加內容如圖所示:

9.jpg

 

此外,d3d9.dll的入口點也被修改:

10.jpg

 

 

由圖可見,原入口點被掛鉤,直接跳到新添加的段中執行,原有代碼不會再執行。

第五步,創建并掛起explorer.exe,向該進程寫入Cerber完整執行體,執行參數和小段shellcode,并通過hook原有代碼的方式執行shellcode,shellcode調用Cerber執行體中的文件復制函數,并將參數傳給該函數。

11.jpg

 

在explorer中申請空間,然后3個WriteProcessMemory函數分別寫入Cerber執行體,參數和shellcode:

12.jpg

 

上圖中的注釋已經寫明本次調用WriteProcessMemory寫入的內容。

第六步,在explorer.exe進程中可以看到寫入的shellcode內容:B8 00 10 30 00 50 B8 E1 55 2E 00 FF D0 C3,如下圖:

13.jpg

 

 

其中,0×301000是執行WriteProcesMemory之前確定的,其他的幾個字節是固定的。

explorer.exe的作用就是通過IFileOperation的COM對象將d3d9.dll和AdapterTroubleshooter.exe復制到system32目錄,并啟動AdapterTroubleshooter.exe,使被劫持的d3d9.dll被加載。

14.jpg

 

用COM對象進行復制操作的原因是為了避免因為復制文件到關鍵目錄而彈出UAC提示。

第六步,在d3d9.dll的執行過程中,可以看到之前增加的段作用:通過d3d9.dll加載時的參數,獲取d3d9.dll的基址,然后通過該基址查找新增加段的位置,最后調用WinExec函數。

15.jpg

 

上圖為獲取d3d9.dll的基址。新增加段的前8個字節分別為WinExec和ExitProcess函數的地址,如下圖:

 

16.jpg

 

最后,調用WinExec并將字符串參數傳入:

17.jpg

 

 

注意,在此前的步驟中,Cerber已將自己重命名為PnPutil.exe,希望讀者不要誤會這個奇怪的名字。至此,Cerber就已經bypass UAC了。此后還有一些清理工作,如果讀者有興趣的話,可以繼續分析,本文的分析就到此為止了。

4. 小結

本文展示了一種較為流行的bypass UAC方法,并以惡意軟件Cerber為實例,逆向分析了其bypass UAC的每一步細節,該方法也確實有不錯的實際效果。筆者忠心希望本文能給讀者一點啟發和幫助,但由于筆者知識有限,才疏學淺,文中不當或錯誤之處還請各位讀者包容和指正。最后,還希望本文僅作為技術討論,切勿用于非法目的。

* 本文原創作者:zzz66686,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

http://www.freebuf.com/articles/system/112823.html

 

如果您喜歡本博客,歡迎點擊圖片定訂閱到郵箱填寫您的郵件地址,訂閱我們的精彩內容:

正文部分到此結束

文章標簽: by uac

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «關于近期曝光的針對銀行SWIFT系統攻擊事件綜合分析 | Squid遠程拒絕服務漏洞分析»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖