惡意軟件是嘗試破壞計算機、搜集敏感信息或者非法訪問其他計算機的軟件, 它對個人隱私信息、商業機密甚至是國家安全都會造成很大的威脅。
2017年WannaCry勒索病毒的爆發,是迄今為止最嚴重的勒索病毒事件,至少150個國家、30萬名用戶中招,造成損失達80億美元;Conficker蠕蟲病毒感染數千萬臺電腦,史上襲擊范圍最廣的Conficker蠕蟲病毒曾感染了全球200多個國家的數千萬臺Windows個人電腦。
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的部署,分為host和guests。
圖1
負責管理guests、啟動分析工作、網絡流量收集等。
host依賴一些開源軟件,例如tcpdump用于Guest網絡攔截、Volatility用于內存的dump。
Guest是通用的虛擬機,Xen、VirtualBox等。它運行Cuckoo的Agent,接收Host發過來的任務(文件)運行后獲取信息。
Agent是跨平臺的Python腳本,可以在Windows、Linux和MAC OS上運行。它實際是一個XMLRPC server,等待連接。
$ sudo pip install -U pip setuptools
$ sudo pip install -U cuckoo
(1)如要使用Cuckoo sandbox自帶web程序,需安裝mongodb;
(2)Cuckoo sandbox默認使用sqlite數據庫,如要使用mysql,需安裝mysql和MySQL-python。
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
Cuckoo sandbox支持多種虛擬機,包括vmware、virtualbox、esx、kvm、vsphere、xenserver,選擇一種你最熟悉的。
此處簡單介紹virtualbox的安裝:
Virtualbox是開源軟件,功能可滿足Cuckoo sandbox的使用。
安裝命令:
$ sudo apt-get install virtualbox
本文主要講Windows惡意文件分析環境,所以Guest為Windows操作系統。
Guest支持winxp和win7,使用win7時,需關閉User Access(用戶賬戶控制)。
下面以win7為例,講述安裝過程:
使用Host中已安裝的虛擬機軟件,安裝win7虛擬機。
注:win7虛擬機無需打補丁,無需安裝殺毒軟件、安全衛士
(1)2.7.6以上任何一個穩定的2.7版本都可以,
附下載鏈接:
(2)PIL(Python Image Library)用于惡意文件運行過程中對桌面進行截屏,安裝版本需與Python庫版本一致。
附下載鏈接:
(1)關閉Windows自動更新;
(2)關閉Windwos防火墻;
(3)關閉用戶賬戶控制。
(1)使用Host-Only(僅主機模式)上網方式;
注:virtualbox需手動新建Host-Only模式,如下圖:
圖4
(2)將win7網絡地址配置到Host-Only模式網段;
(3)保證Host和Guest能正常通信,可使用ping命令測試;
(4)現在許多惡意文件都需要網絡環境才能運行,所以還需將win7配置到能訪問外部網絡環境。Cuckoo sandbox使用iptables配置轉發規則,假如:eth0為ubuntu連接外部網絡的網卡,vboxnet0虛擬機選擇Host-Only的虛擬網卡(virtualbox為vboxnet0)。
(1)安裝基礎的運行庫,如java、python、.net等;
(2)安裝2005-2015的vc運行庫;
(3)安裝MS-Office套件(office 2007/office 2010)、PDF閱讀器等文檔軟件?(Adobe Reader);
(4)安裝生活常用的聊天(QQ/微信)、聽歌(QQ音樂/酷狗/酷我)軟件。
(1)將agent目錄下的agent.py拷貝至win7文件系統,位置無嚴格要求;
(2)將agent.py修改成agent.pyw,并添加至開機啟動項,agent.pyw為無界面模式;
(3)運行agent.pyw。
(1)在agent.pyw運行的狀態下,保存win7快照,記錄win7的ip地址和快照名稱;
(2)確認agent.pyw:在進程列表查看進程名為pythonw的進程。
$cuckoo
另開一個指令窗口運行
$cuckoo web runserver ?
打開瀏覽器,輸入網址127.0.0.1:8000進入web操作界面。
跳轉到樣本分析設置界面,左側是分析參數設置,可以默認或修改參數;中間是要測試的樣本,需要選中;然后點擊右側“Analyze”按鈕,開始分析。
圖7
提交測試后,有pending、running、completed、reported等多種狀態。運行完,會顯示reported狀態。
圖8
點擊樣本,進入測試報告。紅框1,顯示可測試后樣本的行為,有數字的部分表示樣本有對應的行為;紅框2,展示樣本的基本信息;紅框3,樣本運行的基本信息;紅框4,樣本運行時的屏幕截圖。
圖9
左側選擇“Dropped Files”,顯示如下圖。右側紅框2,顯示樣本釋放的文件。
圖10
左側選擇“Process Memory”,顯示如下圖。右側紅框2,顯示樣本中所包含的URL鏈接。
圖11
左側選擇“Behavioral Analysis”,顯示如下圖。紅框2展示了具體的行為,可通過紅框3中的搜索功能或紅框4進行篩選。
圖12
惡意樣本一般包含創建文件和修改注冊表的行為。先試著查找創建文件的行為。在搜索框輸入“NtCreateFile”,搜索,如下圖。圖中有兩個明顯的可疑行為,紅框1中對自身樣本進行復制,紅框2中,釋放了一個beep.sys的驅動。
圖13
嘗試搜索修改注冊表信息。在搜索框輸入“RegSetValueExA”,搜索,如下圖。紅框中,可以看到服務的鍵值指向了剛才釋放的exe程序路徑。
圖14
Cuckoo sandbox在樣本啟動的時候,注入了相關的監控代碼。
在process.py文件中,通過Process調用,調用inject-x86.exe或inject-x64.exe完成注入。
圖15
這兩個工具是inject.c編譯的針對32位和64位系統的不同版本。
下面看一下inject.c的具體代碼:
在main中給出了可配置參數,需要帶參數運行。Pid是必須要包含的參數,其他參數視需要進行配置。
圖17
Inj_mode由以下三個參數決定,然后執行相應的函數。
加載完參數完成準備工作,開始DLL注入。
函數write_data,通過VirtualAllocEx和WriteProcessMemory在遠程進程中申請空間的方式寫入參數,并返回申請的地址。
圖20
APC注入,通過write_data向遠程進程中寫入DLL路徑、Loadlibrary()執行函數指針、執行加載函數的指針,然后利用QueueUserAPC()在軟中斷時向線程的APC隊列插入Loadlibrary()執行函數指針,達到注入DLL的目的。當線程再次被喚醒時,此線程會首先執行APC隊列中被注冊的函數。
注入成功。
另一種CRT注入:
同樣通過write_data向遠程進程中寫入DLL路徑、Loadlibrary()執行函數指針、執行加載函數的指針,之后在create_thread_and_wait中調用CreateRemoteThrea。當目標進程中執行load_library_woker(已事先寫入進程空間)加載DLL,之后調用free_data清理現場,釋放空間。
注入的DLL在加載時執行初始化和Hook動作。
在monitor_init中
在monitor_hook中,通過sig_hooks獲取到需要hook的函數信息,調用hook函數進行hook。
Hook完之后,樣本調用系統函數時,會先跳到事先準備好的API中,記錄好API的相關信息后,再正常調用原API,保證樣本正常運行。