本文介紹惡意代碼常規(guī)分析流程。(待更)
菜鳥一枚征椒,可能寫的不好或存在錯(cuò)誤娇哆,歡迎指正。
首先勃救,惡意代碼的生命周期分為三個(gè)——植入前碍讨、植入中、植入后
攻擊途徑
攻擊途徑有很多蒙秒,大致有:
1.網(wǎng)頁(yè)漏洞方式——0day
2.郵件方式——附件勃黍、社工釣魚等
3.聊天工具
4.U盤交叉使用等等
形式
常見為exe、dll
分析
前:
1.建立虛擬環(huán)境(安全)
2.靜態(tài)分析
- 指通過反病毒引擎掃描識(shí)別已知的惡意代碼家族和變種名
- 逆向分析惡意代碼模塊構(gòu)成晕讲,內(nèi)部數(shù)據(jù)結(jié)構(gòu)覆获,關(guān)鍵控制流程等,理解惡意代碼的機(jī)理瓢省,并提取特征碼用于檢測(cè)弄息。
- 常用工具包括PEview、PEID 勤婚、IDA(加殼的能脫殼就脫摹量,利用工具能得到結(jié)論的是沒加殼的惡意代碼)
中:
3.脫不了就動(dòng)態(tài)分析
- 指通過在受控環(huán)境中執(zhí)行目標(biāo)代碼,以獲取目標(biāo)代碼的行為及運(yùn)行結(jié)果蛔六。
目標(biāo):
- 為網(wǎng)絡(luò)入侵事件的響應(yīng)提供所需信息
- 確定到底發(fā)生了什么
- 確保定位出所有受感染的主機(jī)和文件
- 確定惡意代碼可以做什么
- 分析出主機(jī)特征和網(wǎng)絡(luò)特征,以便檢測(cè)
例如:動(dòng)態(tài)分析a.exe废亭。
假如釋放新的c.dll或c.exe国章,再對(duì)釋放的代碼進(jìn)行靜態(tài)動(dòng)態(tài)分析(目標(biāo)惡意代碼是下載器之類的)
惡意代碼是否自啟動(dòng)——資源配置(文件釋放,修改注冊(cè)表豆村、注冊(cè)服務(wù)等等)——網(wǎng)絡(luò)行為(連接web服務(wù)器下載東西等等)
把a(bǔ).exe運(yùn)行起來(lái)液兽,要針對(duì)a.exe中PID 2503(注入到explorer.exe中)的進(jìn)程行為進(jìn)行分析監(jiān)控,對(duì)進(jìn)程行為分析processmonitor(進(jìn)程行為掌动、注冊(cè)表四啰、文件、API調(diào)用(IAP hook)粗恢、端口(專門列舉端口的應(yīng)用程序)等等)
針對(duì)c.exe——如果注冊(cè)成服務(wù)柑晒,以內(nèi)核態(tài)運(yùn)行——到內(nèi)核層用hook(API調(diào)用)
后:
持久控制(可靠控制)、隱蔽控制
完成
(1)自啟動(dòng):修改注冊(cè)表眷射、注冊(cè)服務(wù)——sys(內(nèi)核中做hook)
(2)資源配置:文件釋放
(3)網(wǎng)絡(luò)行為:連接web服務(wù)器匙赞,下載
實(shí)例
本次分析的為樣本下載鏈接:
一佛掖、首先建立安全的虛擬環(huán)境,這里使用win10虛擬機(jī)進(jìn)行樣本分析涌庭。
二芥被、1.拿到樣本首先進(jìn)行靜態(tài)分析,用PEid分析樣本坐榆,觀察其是否為加殼的惡意代碼拴魄。如下圖:
觀察到其并沒有加殼,病毒本身是利用C#進(jìn)行編寫席镀。入口點(diǎn)為0003008E匹中。
2.接下來(lái)我們進(jìn)一步查看擴(kuò)展信息,如下圖:
可見其的確是未經(jīng)過加殼的病毒愉昆。
三职员、然后我們利用PEview查看這個(gè)PE文件頭信息以及各分節(jié)信息,如下圖:
1.先解釋一下各部分的信息:
- DOS_HEADER:DOS頭
- MS-DOS Stub Program:DOS環(huán)境下執(zhí)行的指令跛溉,輸出該程序不能再dos下運(yùn)行的提示焊切。
- NT_HEADERS:PE文件頭,其包含了標(biāo)準(zhǔn)與擴(kuò)展PE頭
- NT_HEADERS下屬的4個(gè)表(.text等):各節(jié)(section)的摘要信息芳室,又稱節(jié)表专肪。
- SECTION .text:存儲(chǔ)程序中的代碼節(jié)
- SECTION .rdata:存儲(chǔ)程序中引用的所有外部符號(hào)的數(shù)據(jù)節(jié),該節(jié)包含導(dǎo)入的DLL名稱表堪侯,其中的函數(shù)相對(duì)虛擬地址表嚎尤,如果是DLL,則還有導(dǎo)出表
- SECTION .data:存儲(chǔ)程序中用到的所有全局變量伍宦,符號(hào)常量芽死,字符串等數(shù)據(jù)的節(jié),這些數(shù)據(jù)通常是由程序員自定義的次洼,并且沒有引用外部文件的內(nèi)容关贵。
- SECTION .rsrc:存儲(chǔ)程序中用到的所有資源,例如圖標(biāo)卖毁,窗口菜單揖曾,按鈕等的節(jié),該節(jié)通常只存在于圖形界面的程序中亥啦。
- SECTION .reloc:就是重定位區(qū)段炭剪,可執(zhí)行文件的基址重定位。
2.首先分析IMAGE_FILE_HEADER字段翔脱,如下圖:
可以看出該字段的值為014C(對(duì)應(yīng)符號(hào)常量為IMAGE_FILE_MACHINE_I386) ,
所有編譯為可以在Intel 80386以及后續(xù)兼容處理器平臺(tái)上運(yùn)行的PE文件,應(yīng)該都具有相同的值奴拦。
- IMAGE_FILE_EXECUTABLE_IMAGE表示這是一個(gè)可執(zhí)行文件
- IMAGE_FILE_32BIT_MACHINE表示這是一個(gè)在32位機(jī)器上運(yùn)行的程序
3.然后是IMAGE_OPTIONAL_HEADER字段,如下圖:
由Subsystem可以看出這是一個(gè)具有windows圖形化界面的惡意代碼
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE可知允許在載入的時(shí)候進(jìn)行重定位
IMAGE_DLLCHARACTERISTICS_NX_COMPAT届吁,表示程序采用了/NXCOMPAT編譯
IMAGE_DLLCHARACTERISTICS_NO_SEH表示不使用結(jié)構(gòu)化異常處理
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE表示支持終端服務(wù)器
4..text代碼段分析粱坤,如下圖:
- Size of Raw Data指向的是代碼起始處
- IMAGE_SCN_MEM_EXECUTE表示該節(jié)加載到內(nèi)存后的所有頁(yè)面可執(zhí)行
- IMAGE_SCN_MEM_READ表示該節(jié)加載到內(nèi)存后的所有頁(yè)面可讀
5.接下來(lái)是.data字節(jié)隶糕,存儲(chǔ)程序中用到的所有全局變量,符號(hào)常量站玄,如下圖
6.在SECTION .sdata字段中我們看到value中有Auto clicker typer的字樣枚驻,推測(cè)這是一個(gè)自動(dòng)點(diǎn)擊記錄器。如下圖
四株旷、使用Dependency Walker掃描32位或64位Windows模塊(exe再登,dll,ocx晾剖,sys等)锉矢,如下圖:
1.首先可以看到該程序調(diào)用MSCOREE.DLL,mscoree.dll是.NET Framework相關(guān)組件齿尽。在KERNEL32.DLL中我們可以看到導(dǎo)出函數(shù)中有如RegDeleteKey字樣的函數(shù)沽损,說(shuō)明該可執(zhí)行文件會(huì)刪除注冊(cè)表鍵和注冊(cè)表鍵值,如下圖:
2.在NTDLL.DLL中還發(fā)現(xiàn)了RtlIpv4AddressToString字眼的函數(shù)循头,很可能和網(wǎng)絡(luò)服務(wù)有關(guān)绵估,如下圖:
3.同時(shí),看到了UnmapViewOfFile函數(shù)卡骂,該函數(shù)可以對(duì)修改后的文件保存国裳,如下圖:
五、接下來(lái)用IDA進(jìn)行反編譯全跨,但卻出現(xiàn)如下圖界面:
發(fā)現(xiàn)IDA無(wú)法反編譯用C#編寫的.NET程序建峭,因此這里嘗試使用其他工具酥诽,上網(wǎng)搜索后,決定使用dotPeek
1.利用dotPeek進(jìn)行反編譯后脾歇,結(jié)果如下圖:
need-to-insert-img
2.我們可以看到這個(gè)惡意代碼調(diào)用了哪些庫(kù)音半,如下圖:
need-to-insert-img
3.可以看到在這個(gè)惡意代碼中有4個(gè)Form松捉,應(yīng)該對(duì)應(yīng)4個(gè)界面河质,如下圖:
need-to-insert-img
4.在Form1中往下看店煞,可以看到許多引人注目的API,如下圖:
need-to-insert-img
need-to-insert-img
這些函數(shù)的功能再明顯不過了诵原,如KeyPress()應(yīng)該是鍵盤記錄的作用英妓,MouseDown()應(yīng)該是記錄鼠標(biāo)點(diǎn)擊的動(dòng)作挽放,MouseWheel()應(yīng)該是記錄鼠標(biāo)滾輪的操作等等绍赛。
5.然后我們來(lái)看看Button1,如下圖:
need-to-insert-img
可見點(diǎn)擊button1后辑畦,應(yīng)該是讓其他按鈕無(wú)效DisableAll()吗蚌,如下圖。然后安裝鉤子InstallHooks()
need-to-insert-img
在進(jìn)入InstallHooks()這個(gè)函數(shù)后纯出,可以看到其實(shí)現(xiàn)了對(duì)用戶鼠標(biāo)行為的監(jiān)控蚯妇,比如獲取鼠標(biāo)button的flag敷燎,如下圖:
need-to-insert-img
獲取用戶點(diǎn)擊鼠標(biāo)的次數(shù),如下圖:
need-to-insert-img
創(chuàng)建鼠標(biāo)事件箩言,如下圖:
need-to-insert-img
其中的X硬贯、Y用來(lái)記錄鼠標(biāo)的位置,通過POINTAPI來(lái)實(shí)現(xiàn)陨收,如下圖:
need-to-insert-img
接下來(lái)就是很明顯的鍵盤記錄行為饭豹,通過GetKeyboardState()函數(shù)來(lái)獲取鍵盤狀態(tài),然后轉(zhuǎn)換成ASCII碼务漩。如下圖:
need-to-insert-img
6.Button2的按鈕的功能應(yīng)該是和Button1的功能相呼應(yīng)拄衰,重新激活各個(gè)按鈕,移除鉤子饵骨,如下圖:
need-to-insert-img
7.注意到Button5有保存文件翘悉,且有寫文件的功能。先是通過ShowDialog()顯示目錄居触,然后寫文件妖混。因此可能這個(gè)按鈕會(huì)觸發(fā)釋放文件。如下圖:
need-to-insert-img
8.Button7饼煞、Button9等應(yīng)該就是觸發(fā)其他Form的功能源葫。如下圖:
need-to-insert-img
9.我們來(lái)到Form2看一下幾個(gè)button的功能,絕大部分是與Form1相關(guān)砖瞧,例如打開目錄等等息堂,如下圖:
need-to-insert-img
10.再來(lái)看看Form3,F(xiàn)orm3中有許多ComboBox块促,也有包括創(chuàng)建注冊(cè)表鍵(名為AutoClickerTyper)荣堰,如下圖:
need-to-insert-img
11.Form4中看到設(shè)置了注冊(cè)表項(xiàng)中的開機(jī)自啟項(xiàng),因此推測(cè)可以有開機(jī)自啟的功能竭翠,如下圖:
need-to-insert-img
12.在Keyboard中振坚,我們可以看到列舉了Keys的各個(gè)枚舉值常量,如下圖:
need-to-insert-img
13.在Win32中我們同樣可以看到剛剛的關(guān)鍵性函數(shù)GetKeyboardState()斋扰,如下圖:
need-to-insert-img
動(dòng)態(tài)分析
- 準(zhǔn)備好軟件工具包和惡意代碼樣本渡八,放到Windows10虛擬機(jī)
need-to-insert-img
- 對(duì)改虛擬機(jī)拍攝快照,建立安全的運(yùn)行環(huán)境传货,以便虛擬機(jī)出現(xiàn)問題時(shí)快速恢復(fù)屎鳍。
need-to-insert-img
- 運(yùn)行process monitor,界面如圖问裕,可以對(duì)Windows下的高級(jí)監(jiān)視工具逮壁,提供監(jiān)控注冊(cè)表、文件系統(tǒng)粮宛、網(wǎng)絡(luò)窥淆、線程卖宠、進(jìn)程和線程行為。
· 結(jié)合了文件監(jiān)視器FileMon和注冊(cè)表監(jiān)視器RegMon的功能忧饭。
· 監(jiān)控所有能捕獲的系統(tǒng)調(diào)用-> 容易耗盡內(nèi)存
· 通常不用于記錄網(wǎng)絡(luò)行為
need-to-insert-img
- 可以只針對(duì)惡意代碼或特定的系統(tǒng)調(diào)用設(shè)置過濾扛伍。如圖我們指定對(duì)測(cè)試的惡意代碼進(jìn)行測(cè)試。
need-to-insert-img
- 運(yùn)行該惡意代碼词裤,因?yàn)槭?exe文件蜒秤,直接雙擊運(yùn)行即可。界面如下:
need-to-insert-img
點(diǎn)擊record亚斋,發(fā)現(xiàn)我的鍵盤輸入以及鼠標(biāo)的點(diǎn)擊都被顯示出來(lái)作媚,鍵盤是以ASCII碼形式記錄,鼠標(biāo)點(diǎn)擊的方式等都被記錄帅刊。
need-to-insert-img
點(diǎn)擊stop停止運(yùn)行
need-to-insert-img
點(diǎn)擊option有開機(jī)自啟動(dòng)等選項(xiàng)
need-to-insert-img
點(diǎn)擊play可以對(duì)整個(gè)被記錄的過程進(jìn)行復(fù)現(xiàn)纸泡。
點(diǎn)擊clear清除現(xiàn)有記錄。
need-to-insert-img
save list 可以將現(xiàn)有的鍵盤記錄存儲(chǔ)在電腦上赖瞒,如圖:
need-to-insert-img
open list 可以打開現(xiàn)有的鍵盤記錄女揭,如圖:
need-to-insert-img
點(diǎn)擊auto list 可以打開如下界面進(jìn)行誠(chéng)摯keys
need-to-insert-img
hot key 用于設(shè)置快捷鍵,如圖:
need-to-insert-img
change delay 可以設(shè)置延遲時(shí)間栏饮,如下圖:
need-to-insert-img
- 過濾之后可以看到該惡意代碼的進(jìn)程行為吧兔。
need-to-insert-img
- 首先查看注冊(cè)表。通過檢查注冊(cè)表變化袍嬉,發(fā)現(xiàn)惡意程序?qū)ψ?cè)表的操作境蔼。
need-to-insert-img
need-to-insert-img
后來(lái)查資料發(fā)現(xiàn).pf文件是預(yù)讀文件,可以加快程序的加載速度。
need-to-insert-img
發(fā)現(xiàn)很多修改注冊(cè)表的行為
新建刪選條件如下:
need-to-insert-img
need-to-insert-img
wininet.dll是Windows應(yīng)用程序網(wǎng)絡(luò)相關(guān)模塊伺通,與網(wǎng)絡(luò)的連接有關(guān)箍土。
WSOCK32.dll和WS2_32.dll,是用來(lái)創(chuàng)建套接字的dll庫(kù)罐监,顯然吴藻,如果這個(gè)程序所介紹的功能中不應(yīng)該有網(wǎng)絡(luò)連接部分,那么在其動(dòng)態(tài)鏈接庫(kù)中還存在這2個(gè)庫(kù)就顯得尤為可疑了
msvcrt.dll是提供C語(yǔ)言運(yùn)行庫(kù)執(zhí)行文件弓柱,提供了printf,malloc,strcpy等C語(yǔ)言庫(kù)函數(shù)的具體運(yùn)行實(shí)現(xiàn)沟堡,并且為使用C/C++(Vc)編譯的程序提供了初始化(如獲取命令行參數(shù))以及退出等功能。
need-to-insert-img
上圖為writefile函數(shù)的情況
通過這些函數(shù)我們可以猜測(cè)惡意代碼進(jìn)行了修改注冊(cè)表矢空、修改內(nèi)存信息航罗、建立網(wǎng)絡(luò)連接等行為。
need-to-insert-img
進(jìn)程瀏覽器(****Process Explore****)
主要功能
· 列出所有活躍的進(jìn)程妇多、被進(jìn)程載入的DLL伤哺、各種進(jìn)程屬性和整體系統(tǒng)信息燕侠。
· 殺死一個(gè)進(jìn)程者祖、退出用戶登錄立莉、啟動(dòng)或激活進(jìn)程。
need-to-insert-img
嘗試查看我們的惡意代碼七问,如下圖
need-to-insert-img
發(fā)現(xiàn)他的詳細(xì)信息被隱藏了
Regshot
運(yùn)行惡意代碼前 打開Regshot進(jìn)行1st shot并保存其快照
如圖所示:
need-to-insert-img
另存為:
need-to-insert-img
need-to-insert-img
接下來(lái)運(yùn)行惡意代碼蜓耻,運(yùn)行一段時(shí)間后進(jìn)行第二個(gè)拍照,對(duì)比兩次注冊(cè)表信息的變化情況械巡。如下圖:
need-to-insert-img
比較前后注冊(cè)表的不同刹淌,對(duì)比結(jié)果用記事本打開
need-to-insert-img
對(duì)比結(jié)果如下:
need-to-insert-img
結(jié)論:
Auto Clicker Typer的主要功能為擊鍵記錄和鼠標(biāo)操作記錄,同時(shí)包含有復(fù)現(xiàn)記錄下的操作讥耗,保存記錄文件等功能有勾。