惡意程式碼分析之行為分析及樣本收集

玻璃窗起霧了發表於2021-01-29

0x00 前言

之前講的內容,都是在以不執行樣本為前提進行分析,這種分析方法是最安全的,可以直接在真機上透過IDA進行分析,但是很多時候,我們不得不除錯樣本才能對樣本的惡意行為進行一個完整的分析,此外,除錯節結合IDA的分析方式,也能大大的加快樣本分析的速度。當我們決定要對樣本進行動態除錯或是行為分析的時候,由於會執行樣本,我們就需要在虛擬機器中執行此類操作。

在本節中,主要介紹一下我平時分析樣本的來源,以及分析樣本時候常用的一些行為檢查工具,透過行為分析,可以讓我們很快的瞭解樣本的大概功能。然後介紹如何透過在本地捕獲到的一些行為,去挖掘和尋找與樣本相關的情報。

0x01 分析樣本從哪兒來

目前來講,virustotal應該是全球最大的情報機構。
也是大家在樣本分析時,使用的最多的情報平臺。
但是很可惜,virustotal沒有對個人使用者提供下載介面。
免費使用者只能進行一些簡單的查詢,所以對於個人使用者來講,virustotal顯得不是那麼的”友好”。

app.any.run

app.any.run 是一款非常火的線上互動式沙箱。相比其他沙箱,app.any.run最大的優勢就是介面友好、可與使用者互動。即使用app.any.run分析樣本的時候,我們可以簡單操作沙箱機器的,比如我分析一個惡意樣本,樣本執行後會彈框,需要使用者單擊確定按鈕後,惡意功能才會觸發,此時普通的沙箱可能就跑不出惡意行為,但是使用app.any.run的話,我們就可以在執行過程中單擊彈框選項,從而執行後續的操作。

同樣的,app.any.run也分為免費使用者和付費使用者,但是在app.any.run中,個人使用者可使用的功能也非常多,是否需要開通付費可以自行斟酌。

app.any.run 的主頁面如下所示:

app.any.run 在主頁中心位置展示了一個Threat map,以表示全世界方位內當前惡意樣本的流行情況。

左邊的一排是工具欄,我們可以單擊<+ New task> 以新建一個分析任務
或是單擊<Public stask> 檢視app.any.run上公開的樣本資訊。

<History> 標籤記錄了當前賬號在app.any.run提交的樣本記錄。

首先是<+ New task> :

我們單擊New task之後,app.any.run就會彈框以提示使用者建立任務。左上角的框中可以對沙箱機器進行配置,如作業系統版本、作業系統位數、UAC等資訊。當然,這麼強大的功能是需要付費的,app.any.run給免費使用者提供了win7x32的作業系統,如果想要使用其他的作業系統,就需要升級為app.any.run的付費使用者。

右上角的選項框中表明瞭當前選擇的作業系統上所安裝的應用資訊以及補丁資訊。

左下角選項框讓使用者上傳待分析的檔案。

右下角的選項框中可以對此次分析進行配置,如沙箱執行時間、樣本是否公開(app.any.run預設會將所有使用者上傳的樣本作為開源情報公開,當然app.any.run保留了私有分析的功能,但是這得加錢。),以及網路是否使用匿名網路等。

當我們配置好這些資訊之後(通常只需要選擇上傳檔案,其他內容都預設),我們就可以單擊最右下角的Run開始執行任務。

沙箱執行之後,就會生成一個線上報告,以我們分析的一個樣本的報告為例:

同樣的,中央位置是沙箱的執行介面。

左下角顯示了樣本在執行過程中所有的網路行為,包括HTTP Request Connections DNS Requests 以及app.any.run檢測到的Threats請求。

右邊的視窗,是顯示了樣本執行後的程式資訊。
以及app.any.run提取出的IOCs資訊:

關於app.any.run沙箱的使用暫時就介紹到這裡,接下來我們看看如何透過app.any.run獲取一些特殊樣本。

我們在app.any.run的主頁介面單擊Public tasks。

可以進入到如下的介面:

這裡就預設顯示了app.any.run最新公開的樣本,也就是說,只要有人透過app.any.run的沙箱測試了樣本,基本上就能在這裡找到。

該頁面的右上角有一個搜尋框,我們可以在搜尋框中輸入樣本的hash或者標籤即可找到樣本。
搜尋hash是最基礎的一個功能,我們可以單擊搜尋框旁邊的filter開啟篩選框,在篩選框中進行條件篩選。包括檔案型別、請求地址、tag資訊等等。

我們甚至可以直接輸入apt以搜尋所有在app.any.run上被打上了APT標籤的樣本:

然後想要下載或是檢視某個樣本的分析報告,直接點進去即可。

關於app.any.run就暫時介紹到這裡,由於app.any.run沙箱的友好介面,以及app.any.run的開源情報共享,目前app.any.run的樣本量已經很大了,甚至有很多樣本vt上沒有的,app.any.run都會有。所以,在樣本分析中,可以多多去檢視app.any.run的Public submissions,說不定啥時候就能先人一步捕獲到新情報。

MalwareBazaar

還有一個個人比較常用情報來源是MalwareBazaar

MalwareBazaar 介面也非常簡潔,每天都會更新很多樣本,並且這些樣本基本上都帶了初始的tags

除此之外,MalwareBazaar還提供了API介面、搜尋、匯出功能。想要在MalwareBazaar下載樣本也非常簡單,只需要單擊某個md5,進入到詳情頁面,然後單擊Download sample即可,需要注意的是,國外的這種情報共享平臺,下載回來的樣本預設解壓密碼都是:infected

0x02 行為檢測

個人推薦多配置幾個虛擬機器環境,個人目前搭建了xp、win7x32、win7x64、win10x64等虛擬機器環境。行為檢測的工具推薦使用工SysTracer.exe、火絨劍、Procmon、sysmon等。

此外,在對樣本進行行為分析的時候,最好能夠斷網分析或是使用一個乾淨的網路。

首先是為什麼要斷網分析,我們在分析的時候,如果目標的伺服器還是存活的,那麼樣本執行之後,就會和目標伺服器建立通訊,然後進行互動。樣本大多會有收集當前主機資訊並上傳到伺服器的功能,如果虛擬機器的配置被打包上傳到攻擊者伺服器,一方面,攻擊者將會知道你的出口IP地址。另一方面,攻擊者將知道自己的樣本已經暴露,已經有分析人員在分析,從而導致攻擊者關閉伺服器或是採取其他行為。

還有一個重要的因素是,如果是在公司的網路環境進行分析的,公司一般都會有流量監控,如果檢測到連線了已經確認是惡意的C2伺服器,就會觸發警報,一方面公司可能請你喝茶,另一方面如果樣本具備其他的功能,可能會出現公司網路未授權訪問xxx的情況。

所以綜上所述,斷網分析惡意樣本是一個好習慣。

但是有時候,樣本會檢測網路是否正常,如果不正常就直接退出了,遇到這種情況,可以

1 修改樣本判定網路的條件,使得可以正常執行
2 搭建安全的網路進行分析

個人推薦使用fireeye的開源工具:fakenet:
在聯網的虛擬機器中安裝該工具後,將會構建一個虛擬網路,此時,透過主機產生的所有網路請求、流量將不會傳送出去,而是傳送到fakenet中。此外,fakenet還會根據請求的內容進行對應的響應。

0x03 SysTracer.exe

首先來說SysTracer.exe這款行為檢測工具,目前來說,個人最喜歡這款,因為非常簡潔,一目瞭然。

以我們靜態分析的第一個樣本為例,首先在虛擬機器(xp)中開啟SysTracer.exe,然後透過左上角的圖示選擇待分析的檔案:

選擇建立並且跟蹤一個新程式,然後點選執行開啟選擇視窗

選中我們待分析的檔案,選擇開啟:

最後點選確定,即可執行該程式並監控程式的行為:

可以看到,樣本行為很簡單,首先是進行了一次網路請求,然後就彈框顯示

點選彈框之後,程式退出:

由於該樣本過於簡單,我們可以隨便找一個其他的惡意樣本跑下行為試試:

這裡可以看到,該惡意樣本執行後,會不斷的進行網路請求,並且建立和銷燬程式,我們可以在左邊的選項中選中某一欄進行賽選,比如選中左邊的<網路>:

可以看到,程式不斷建立和銷燬程式的同時一直在迴圈請求firestormy.duckdns.org
目前雖然我們還不知道該地址是用來幹嘛的,但是可以猜測這是攻擊者的伺服器地址,我們可以透過開源的情報搜尋一下該地址。
首先是透過VT檢視該域名的關聯情況:

這裡可以很直觀的看到,與該地址通訊的檔案,基本全是確定惡意的木馬,所以我們可以確定該域名是一個惡意域名。

此外,我們可以嘗試透過各家的情報中心對該地址進行查詢。
個人常用的兩個威脅情報平臺是微步和奇安信的。

以微步的為例,在平臺上查詢我們透過行為分析工具跑出來的地址,得到如下結果:

透過查詢,我們知道該域名已經被打上了很多標間,如殭屍網路、Scar、DarkComet、遠控等。像這種已經和某些家族打上標籤的域名,我們可以嘗試直接在 搜尋引擎中搜尋該家族,看是否已經有分析報告,以及分析報告中的樣本程式碼結構是否與手裡的樣本匹配。在具體分析樣本的時候,可以參考這些資訊。

0x04 火絨劍

火絨劍是現在比較流行的一款行為分析工具,官方也提供了該工具的單獨下載。
火絨劍安裝好之後,以管理員身份啟動,開啟監控,然後進行過濾設定:

選擇程式過濾,新增,然後將待檢測的樣本名字複製進去

然後確定,設定好第一條過濾條件

然後選擇動作過濾

個人建議是可以把登錄檔監控取消勾選,因為正常情況下來講,一個程式執行之後,哪怕什麼都不做,都會大幅度的進行登錄檔操作。

所以如果不取消登錄檔監控,行為可能是如下:

這裡面的操作,很多不是惡意程式發起的,而是windows系統,載入這個pe檔案到記憶體執行的時候操作的。
當把登錄檔過濾了之後,就只顯示了51條記錄,但是這裡比較奇怪沒有跑出網路行為。

這個時候,我們可以嘗試結合Fakenet,看看是否能跑出網路行為。
解壓下載回來的fakenet,然後以管理員身份啟動fakenet:

此時,fakenet成功啟動,此電腦上的所有網路請求都將傳送到fakenet中:

接著重新使用火絨劍監控樣本行為:

可以看到,此時火絨劍已經成功捕獲到網路請求行為,並且在fakenet中也成功記錄請求內容,並且模擬伺服器返回了對應的資料。

0x05 Procmon

procmon 是微軟官方提供的行為監控工具,開啟之後預設會監測所有的程式:

可以選擇如下圖示或者Ctrl + L 進行過濾

根據個人選擇,第一個框可以選擇ProcessName對指定的程式進行過濾

然後在輸入框中填入需要過濾的ProcessName,點選Add,然後選擇OK

此時視窗中將會只剩下我們選擇的程式的相關行為

由於是微軟自己開發的行為監控工具,Procmon可以說是鉅細無遺,檢測能力相比其他來說也更全面,這裡尷尬的是Procmon檢測到了fakenet的流量欺騙,所以網路行為這裡顯示如下,沒有顯示真實的請求地址

Procmon 在使用的時候,會多出很多系統相關的行為,這裡需要分析的時候自行鑑別~

0x06 Sysmon

Sysmon 是一款輕量級的監視工具。屬於Windows Sysinternals出品的一款Sysinternals系列中的工具,用來監視和記錄系統活動,並記錄到windows事件日誌。

Sysmon 相比前面幾款工具,安裝要稍微麻煩一些,但同時也具備了一些優勢。

下載好之後,需要根據github上的配置檔案進行配置。

安裝過程如下
1 使用管理員啟動cmd
2 進入到下載的sysmon目錄下
3 將git下載下來的配置檔案和sysmon放在同一個目錄下
4 執行命令Sysmon64.exe -accepteula -i z-AlphaVersion.xml

將sysmon啟動起來之後,win+r 執行eventvwr開啟日誌管理器

然後在:
應用程式和服務日誌->Microsoft->Windows目錄下會有一個SysMon資料夾
然後就能看到啟動sysmon之後的日誌。
新版本的sysmon有了dns查詢功能,非常實

可以看到每個事件之後都有一個事件ID

Event ID 1: Process creation
Event ID 2: A process changed a file creation time
Event ID 3: Network connection
Event ID 4: Sysmon service state changed
Event ID 5: Process terminated
Event ID 6: Driver loaded
Event ID 7: Image loaded
Event ID 8: CreateRemoteThread
Event ID 9: RawAccessRead
Event ID 10: ProcessAccess
Event ID 11: FileCreate
Event ID 12: RegistryEvent (Object create and delete)
Event ID 13: RegistryEvent (Value Set)
Event ID 14: RegistryEvent (Key and Value Rename)
Event ID 15: FileCreateStreamHash
Event ID 17: PipeEvent (Pipe Created)
Event ID 18: PipeEvent (Pipe Connected)
Event ID 19: WmiEvent (WmiEventFilter activity detected)
Event ID 20: WmiEvent (WmiEventConsumer activity detected)
Event ID 21: WmiEvent (WmiEventConsumerToFilter activity detected)
Event ID 22: DNSEvent (DNS query)
Event ID 255: Error

對應解析如下:

Event ID 1: 建立程式
Event ID 2: 程式更改了檔案建立時間
Event ID 3: 網路連線
Event ID 4: Sysmon 服務狀態已更改
Event ID 5: 程式終止
Event ID 6: 驅動程式載入
Event ID 7: 映象載入
Event ID 8: 建立遠執行緒
Event ID 9: 驅動器讀取
Event ID 10: 程式訪問
Event ID 11: 檔案建立
Event ID 12: 登錄檔事件(Object create and delete)
Event ID 13: RegistryEvent (Value Set)
Event ID 14: RegistryEvent (Key and Value Rename)
Event ID 15: 檔案流建立
Event ID 17: 管道事件(Pipe Created)
Event ID 18: PipeEvent (Pipe Connected)
Event ID 19: WmiEvent (WmiEventFilter activity detected)
Event ID 20: WmiEvent (WmiEventConsumer activity detected)
Event ID 21: WmiEvent (WmiEventConsumerToFilter activity detected)
Event ID 22: dns解析(DNS query)
Event ID 255: Error

使用一個簡單的木馬來測試Sysmon的功能.
啟動sysmon之後,啟動木馬檔案Cannon.exe

從圖中可以很清楚的看到Cannon.exe調起了cmd.exe執行b.bat檔案

包括bat檔案的建立:

登錄檔操作(加入開機自啟動以實現本地持久化):

以及dns查詢:

關於Sysmon,還有更多高階和強悍的用法,

0x07 總結

透過行為分析,可以讓我們從宏觀的角度瞭解樣本執行後,會做了哪些行為。
比如我們只在行為分析中看到樣本進行了網路請求,那麼我們可以猜測,樣本是否是一個簡單的Downloader,或是由於未成功建立連線導致樣本提前結束執行。
此外,我們還可以透過各個平臺對樣本的網路請求地址進行查詢,通常來說,只要該域名曾經被攻擊者使用過,那麼大機率是可以關聯到對應的家族的。畢竟域名的申請,還是有一定的成本在裡面,大多數情況下,攻擊者也不會那麼浪費的一個域名只使用一次就捨棄。

比如我們在行為分析中看到建立程式操作,那麼我們可以根據樣本建立的程式去推測樣本大概做了什麼操作,是帶引數重新啟動自身 還是去啟動了一個異常的程式。

比如我們在行為分析中看到檔案建立操作,那麼我們可以根據檔案建立的路徑去找到對應的檔案,看看樣本釋放的檔案到底什麼內容,是一個PE 還是 一個vbs指令碼。

根據行為檢測的內容,我們在除錯的時候,也可以針對性的設定斷點,大大加快我們的分析速度。

本文轉自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992957/viewspace-2754635/,如需轉載,請註明出處,否則將追究法律責任。

相關文章