1. 程式人生 > >病毒分析教程第六話--高階病毒分析(上)

病毒分析教程第六話--高階病毒分析(上)

高階病毒分析(上)


教程參考自《惡意程式碼分析實戰》
程式來自:http://www.nostarch.com/malware.htm


Lab 11-1

本節實驗使用樣本Lab11-01.exe。

這個惡意程式碼向磁碟釋放了什麼?

檢視匯入表,有資源操作相關的API,直覺告訴我們該病毒會從資源節中讀取並釋放檔案。
1

果不出其然,病毒讀取資源節中的資料後,將其寫入當前路徑的msgina32.dll檔案中。
2

這個惡意程式碼如何進行駐留?

定位到登錄檔API,發現病毒對HKLM…\Winlogon\GinaDLL進行了篡改,與Run啟動項不同,該登錄檔項的利用過程相較複雜點,
3

GINA(微軟圖形識別和驗證介面)設計的初衷是作為一個給第三方DIY登陸過程的介面,只要在GinaDLL鍵值中配置自己的dll,該dll就能在開機時被Winlogon自動載入。所以,病毒常使用這種方法來載入惡意dll,如下,將msgina32.dll(這名字起到了混淆作用)設定為GinaDll的值,就達到了持久化攻擊的目的。
4

這個惡意程式碼如何竊取使用者登入憑證?

我們對msgina32.dll進行除錯,發現它首先會載入真的那個msgina.dll(C:\Windows\system32\MSGina.dll),然後匯入該DLL的Wlx開頭的函式。
5

在匯出表中可以清晰地看到很多Wlx開頭的函式,其中WlxLoggedOutSAS與其他函式不太一樣,原因下面會說。6

我們隨意點開一個函式,比如WlxLogoff,結構很簡單,一個push、一個call和一個jmp,其他匯出函數出了WlxLoggedOutSAS都是這種結構。
7

我們來看看0x10001000函式,主要功能就是呼叫GetProcAddress從msgina.dll(hLibModule)獲取相對應的函式地址,儲存在exa中並返回,然後通過剛剛的jmp eax跳過去。
8

WlxLoggedOutSAS函式的結構一看就不一樣,多了兩個call。
9

先來看第一個call,地址為edi,而網上回溯,edi等於eax,而eax又來自0x10001000函式的返回值,所以call edi的功能就跟其他函式一樣,目的是呼叫原來的API。
10

然後,惡意程式碼會將劫持到的敏感資訊(就是push的那些edx、ecx、eax)填充到“UN %s DM %s PW %s OLD %s”字串中。
11

這個惡意程式碼對竊取的證書做了什麼處理?

惡意程式碼隨後會獲取時間和日期資訊,拼湊到上面的字串中,最後將這些資訊寫入到“msutil32.sys”中,由於當前DLL被Winlogon程序所載入,所以該檔案的路徑被寫入到了C:\Windows\system32路徑下。
12

如何在你的測試環境讓這個惡意程式碼獲得使用者登入憑證?

由於該惡意操作是在WlxLoggedOutSAS函式中,所以要重新登陸才能觸發該惡意程式碼。我們重啟一下,OK,惡意程式碼運行了,我們找到了msutil32.sys,其內容中顯示了竊取的資訊(由於我沒有設定密碼,所以PW這一欄為空)。
13