十分鐘學會惡意樣本分析,一眼看透無所遁形

一、關於惡意軟件

惡意軟件是嘗試破壞計算機、蒐集敏感信息或者非法訪問其他計算機的軟件, 它對個人隱私信息、商業機密甚至是國家安全都會造成很大的威脅。

2017年WannaCry勒索病毒的爆發,是迄今為止最嚴重的勒索病毒事件,至少150個國家、30萬名用戶中招,造成損失達80億美元;Conficker蠕蟲病毒感染數千萬臺電腦,史上襲擊範圍最廣的Conficker蠕蟲病毒曾感染了全球200多個國家的數千萬臺Windows個人電腦。

本期“安仔課堂”,ISEC實驗室的老師跟大家一起針對惡意軟件進行分析,瞭解其行為特徵,十分鐘學會惡意樣本分析,一眼看透無所遁形。

十分鐘學會惡意樣本分析,一眼看透無所遁形

Cuckoo sandbox是一個開源的惡意文件自動化分析系統,採用Python和C/C++開發,跨越Windows、Android、Linux和Darwin四種操作系統平臺,支持二進制的PE文件(exe、dll、com)、PDF文檔、Office文檔、URL、HTML文件、各種腳本(PHP、VB、Python)、JAR包、Zip文件等等幾乎所有的文件格式,能分析惡意文件的靜態二進制數據和動態運行後的進程、網絡、文件等行為,對於惡意文件的初步分析定性具有很大幫助。

Cuckoo的分析結果包含如下內容:

(1)函數以及API調用的Call Trace;

(2)應用拷貝和刪除的文件;

(3)選定進程的內存鏡像;

(4)分析機的full memory dump;

(5)惡意軟件執行時的截屏;

(6)分析機產生的網絡流量。


二、Cuckoo的部署

下圖是Cuckoo的部署,分為host和guests。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖1

1.Host(管理機)

負責管理guests、啟動分析工作、網絡流量收集等。

host依賴一些開源軟件,例如tcpdump用於Guest網絡攔截、Volatility用於內存的dump。

2.Guest(虛擬機)

Guest是通用的虛擬機,Xen、VirtualBox等。它運行Cuckoo的Agent,接收Host發過來的任務(文件)運行後獲取信息。

Agent是跨平臺的Python腳本,可以在Windows、Linux和MAC OS上運行。它實際是一個XMLRPC server,等待連接。

三、Host環境搭建

1.安裝Cuckoo

$ sudo pip install -U pip setuptools

$ sudo pip install -U cuckoo

2.數據庫依賴庫

(1)如要使用Cuckoo sandbox自帶web程序,需安裝mongodb;

(2)Cuckoo sandbox默認使用sqlite數據庫,如要使用mysql,需安裝mysql和MySQL-python。

3.網絡數據包捕獲

Host使用tcpdump捕獲網絡數據包

(1)安裝tcpdump

$ sudo apt-get install tcpdump

(2)啟用root賬戶

$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

(3)驗證啟用是否成功

$ getcap /usr/sbin/tcpdump /usr/sbin/tcpdump=cap_net_admin,cap_net_raw+eip

4.虛擬機軟件

Cuckoo sandbox支持多種虛擬機,包括vmware、virtualbox、esx、kvm、vsphere、xenserver,選擇一種你最熟悉的。

此處簡單介紹virtualbox的安裝:

Virtualbox是開源軟件,功能可滿足Cuckoo sandbox的使用。

安裝命令:

$ sudo apt-get install virtualbox


四、Guest環境搭建

本文主要講Windows惡意文件分析環境,所以Guest為Windows操作系統。

Guest支持winxp和win7,使用win7時,需關閉User Access(用戶賬戶控制)。

下面以win7為例,講述安裝過程:

1.win7虛擬機安裝

使用Host中已安裝的虛擬機軟件,安裝win7虛擬機。

注:win7虛擬機無需打補丁,無需安裝殺毒軟件、安全衛士

2.Python運行環境

(1)2.7.6以上任何一個穩定的2.7版本都可以,

(2)PIL(Python Image Library)用於惡意文件運行過程中對桌面進行截屏,安裝版本需與Python庫版本一致。

3.win7環境配置

(1)關閉Windows自動更新;

(2)關閉Windwos防火牆;

(3)關閉用戶賬戶控制。

4.網絡環境配置

(1)使用Host-Only(僅主機模式)上網方式;

注: virtualbox需手動新建Host-Only模式,如下圖:

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖2

(2)將win7網絡地址配置到Host-Only模式網段;

(3)保證Host和Guest能正常通信,可使用ping命令測試 ;

(4)現在許多惡意文件都需要網絡環境才能運行,所以還需將win7配置到能訪問外部網絡環境。Cuckoo sandbox使用iptables配置轉發規則,假如:eth0為ubuntu連接外部網絡的網卡,vboxnet0虛擬機選擇Host-Only的虛擬網卡(virtualbox為vboxnet0)。

5.win7偽裝環境

(1)安裝基礎的運行庫,如java、python、.net等;

(2)安裝2005-2015的vc運行庫;

(3)安裝MS-Office套件(office 2007/office 2010)、PDF閱讀器等文檔軟件 (Adobe Reader);

(4)安裝生活常用的聊天(QQ/微信)、聽歌(QQ音樂/酷狗/酷我)軟件。

6.安裝agent.py

(1)將agent目錄下的agent.py拷貝至win7文件系統,位置無嚴格要求;

(2)將agent.py修改成agent.pyw,並添加至開機啟動項,agent.pyw為無界面模式;

(3)運行agent.pyw。

7.保存win7快照

(1)在agent.pyw運行的狀態下,保存win7快照,記錄win7的ip地址和快照名稱;

(2)確認agent.pyw:在進程列表查看進程名為pythonw的進程。

五、樣本分析

1.啟動Cuckoo服務

$cuckoo

2.開啟web服務

另開一個指令窗口運行

$cuckoo web runserver

打開瀏覽器,輸入網址127.0.0.1:8000進入web操作界面。

網頁服務器運行起來後界面如下:

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖3

上傳測試樣本,操作如下圖:

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖4

跳轉到樣本分析設置界面,左側是分析參數設置,可以默認或修改參數;中間是要測試的樣本,需要選中;然後點擊右側“Analyze”按鈕,開始分析。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖5

提交測試後,有pending、running、completed、reported等多種狀態。運行完,會顯示reported狀態。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖6

點擊樣本,進入測試報告。紅框1,顯示可測試後樣本的行為,有數字的部分表示樣本有對應的行為;紅框2,展示樣本的基本信息;紅框3,樣本運行的基本信息;紅框4,樣本運行時的屏幕截圖。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖7

左側選擇“Dropped Files”,顯示如下圖。右側紅框2,顯示樣本釋放的文件。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖8

左側選擇“Process Memory”,顯示如下圖。右側紅框2,顯示樣本中所包含的URL鏈接。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖9

左側選擇“Behavioral Analysis”,顯示如下圖。紅框2展示了具體的行為,可通過紅框3中的搜索功能或紅框4進行篩選。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖10

惡意樣本一般包含創建文件和修改註冊表的行為。先試著查找創建文件的行為。在搜索框輸入“NtCreateFile”,搜索,如下圖。圖中有兩個明顯的可疑行為,紅框1中對自身樣本進行復制,紅框2中,釋放了一個beep.sys的驅動。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖11

嘗試搜索修改註冊表信息。在搜索框輸入“RegSetValueExA”,搜索,如下圖。紅框中,可以看到服務的鍵值指向了剛才釋放的exe程序路徑。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖12

六、Cuckoo行為監控工作原理

Cuckoo sandbox在樣本啟動的時候,注入了相關的監控代碼。

在process.py文件中,通過Process調用,調用inject-x86.exe或inject-x64.exe完成注入。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖13

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖14

這兩個工具是inject.c編譯的針對32位和64位系統的不同版本。

下面看一下inject.c的具體代碼:

在main中給出了可配置參數,需要帶參數運行。Pid是必須要包含的參數,其他參數視需要進行配置。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖15

Inj_mode由以下三個參數決定,然後執行相應的函數。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖16

加載完參數完成準備工作,開始DLL注入。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖17

函數write_data,通過VirtualAllocEx和WriteProcessMemory在遠程進程中申請空間的方式寫入參數,並返回申請的地址。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖18

APC注入,通過write_data向遠程進程中寫入DLL路徑、Loadlibrary()執行函數指針、執行加載函數的指針,然後利用QueueUserAPC()在軟中斷時向線程的APC隊列插入Loadlibrary()執行函數指針,達到注入DLL的目的。當線程再次被喚醒時,此線程會首先執行APC隊列中被註冊的函數。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖19

注入成功。

另一種CRT注入:

同樣通過write_data向遠程進程中寫入DLL路徑、Loadlibrary()執行函數指針、執行加載函數的指針,之後在create_thread_and_wait中調用CreateRemoteThrea。當目標進程中執行load_library_woker(已事先寫入進程空間)加載DLL,之後調用free_data清理現場,釋放空間。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖20

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖21

注入的DLL在加載時執行初始化和Hook動作。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖22

在monitor_init中

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖23

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖24

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖25

在monitor_hook中,通過sig_hooks獲取到需要hook的函數信息,調用hook函數進行hook。

十分鐘學會惡意樣本分析,一眼看透無所遁形

圖26

Hook完之後,樣本調用系統函數時,會先跳到事先準備好的API中,記錄好API的相關信息後,再正常調用原API,保證樣本正常運行。


分享到:


相關文章: