開始看 PracticalMalwareAnalysis 中文版, vm 是 win10 跟書中的實驗環境有點差別…希望可以順利做實驗 ><
如果書中任何技術已經很熟悉,我應該會快快做完簡單做個紀錄就好,沒見過的再詳細記錄
malware
主要教授幾種分析方法:
最常見的做法就是丟到 virustotal 上面給眾多防毒引擎檢驗,不過這種只能針對比較爛的惡意程式,很多針對性的惡意程式特徵是防毒引擎沒有的(不過這種惡意程式應該也不會把目標放在一般群眾)
上述方法稍稍更改一下 code 就可以免殺了
將惡意程式 hash 過後再比對已經知道的惡意程式 hash
strings 工具可以查看檔案所有 printable strings ,特別關注 API, DLL, IP 等等相關字串或是任何可以當作線索的字串
PE 是 windows 可執行文件的簡稱,通常一個正常的 PE 包含各種 header ,這些 header 一樣可以提供各種資訊,後面會介紹
常見的 Windows API 命名慣例:
常見的 DLL
通常一般程式不太會用到 export api ,只有 dll 這種會被其他程式用到裡面的 function 的才用 export 出去
很不幸的是…我找不到任何 example ,所以只能看著書本記錄一下
今天先到這邊 2020/1/19
這個例子主要是講述如何透過觀察呼叫的 windows api 猜測 malware 目的是什麼
程式沒有加殼所以可以直接分析
另外因為做練習,所以會先把裡面的 api 都放上來然後自己判別
呼叫 api 列表:
kernel32.dll
user32.dll
跳出視窗
註冊 hot key
hook window
event
GDI32.dll
Shell32.dll
Advap32.dll
東西很多我也沒全部看完 (是說有些東西找了也看不是很懂就是了),大概猜測一下這個 malware 可能的動作:
最重要的 keylogger 我反而看不太出來,不過猜測是跟 MapVirtualKeyW 有關
SetWindowHookW 可以監視系統上特定的事件,當然也就包括紀錄按鍵的部分了,這也是常見的 key logger api
另外註冊表的部分,搜尋整個檔案可以發現以下內容 "Software\Microsoft\Window\CurrentVersion\Run" ,這是常見的 windows 啟動時就執行程式的資料夾,也是 malware 常攻擊的地方
export api 的部分雖然沒給出來,不過有個特別的 api 要注意: LowLevelKeyboardProc, LowLevelMouseProc ,這是兩個 callback function ,也就是說當發生鍵盤或滑鼠事件則這兩個 callback function 會被調用
Anyway, 最重要的就是 key logger 通常會 call SetWindowHookEx 來記錄 keyboard
又是一個沒有執行檔的範例…
發現該程式 import api 遠少於正常程式,可以判定應該是有加過殼的,不過要確認的話還是得靠其他專業工具
這次分析更多資訊的 PE header
一般來說 PE header 可以分為幾個區:
這些名稱其實可以隨便改,不要太相信XD
分析 header 可以靠 PEview 這個工具,裡面會列出各個 section header 的資料,其中 IMAGE_DOS_HEADER, IMAGE_NT_HEADER 不重要,看其他資訊即可:
IMAGE_FILE_HEADER
IMAGE_OPTIONAL_HEADER
IMAGE_SECTION_HEADER
區段名稱
if .text 原始大小為 0
使用 resource hacker 分析 rsrc 區段,找出會被用到的 window gui 素材且使用時長什麼樣子
下面這張圖沒有 gui 素材,不過倒是找到一個奇怪的 raw_data 內容,感覺是塞了個執行檔在裡面…?
有些程式或惡意軟體會把 code, driver 塞在 .rsrc 中,透過 resource hacker 可以提取出來
每個章節背後都有幾個練習,沒意外的話都是作者自己寫或找來的 malware 範例,可以拿來做練習,以下就根據作者的引導盡量完成每個問題
該小題使用 lab1-1.exe 和 lab1-1.dll 兩個檔案做練習
有,而且大家都知道這是 practicalmalwareanalysis 的樣本了…,下面是分析結果:
lab1-1.exe
lab1-1.dll
兩者比較後, exe 被比較多防毒軟體檢測出來 dll 相對較少
之前上傳的時候好像沒有那麼多 av 有檢查出來,怎麼今天上傳特別多 = = ?
另外發現 virustotal 有個很酷的功能可以用別的 av 公司的行為檢測來分析該 malware 執行後做了哪些事,目前提供騰訊和瑞星行為檢測引擎
我個人比較信騰訊的,瑞星的沒有註冊表行為有點爛
這個問題其實可以 virustotal 就有:
不過還是用之前學到的手動做一下:
可以看到跟上面的 creation time 相符
至於 lab1-1.dll 也是一樣做法:
之前學到用 import api 數量判斷有沒有加殼是個選擇,於是我用 peview 打開 lab1-1.exe 後觀察 .rdata 段中的 IAT
雖然數量不多,但感覺應該沒有加殼…?
因為不放心所以又額外用了 PEid 和 detect it easy 查看
DIE
PEid
兩個都沒檢查出來應該是沒有八…
換 lab1-1.dll 試試看:
透過 PEview 查看 IAT ,雖然 api 也很少,不過 dll 的 api 好像本來就不用很多?
再用 DIE 和 PEid 查看
看起來都沒什麼問題
根據分析該 malware 具備以下幾種目的:
map file
創建、複製檔案
搜尋文件
創建 process
CreateProcessA 和 Sleep 常在後門程式中出現,若還出現 exec, sleep 字串需要特別關注, exec 可能被拿來下指令而 sleep 則用來命令後門睡眠
因為 CreateFileA 和 CopyFileA 兩個 API ,可以確定應該有檔案被這個 malware 創建、複製
這兩個 api 都需要檔名字串,透過 PEview 尋找存在的字串發現以下:
第二個要注意 kernel 的 l 其實是 1 ,也就是說該 malware 創了一個檔跟 kernel32.dll 很像的 dll 放在 system32 中,十分可疑
從 string 有無 ip 和 import api 來看,都沒有跟網路相關,推測沒有
第一次分析的時候沒看到有 IP 字串…
單純看上述資料看不太出來,我決定出動 ghidra ,分析過後(雖然大半看不懂)猜測是在 system32 上把 lab1-1.dll 內容複製到 kerne132.dll 裡面
經過提點,仔細分析一下 lab01-1.dll 內的內容,其中一個 function 是透過 socket 做 connect 和 CreateProcessA 做 command execute
透過 PEview 打開馬上就看到 Section UPX0 這種字眼,很明顯有加 UPX 殼
既然知道是 upx 殼那應該可以直接用 upx 脫殼
其他跡象:
可以看到 Virtual Size 為 0x4000 但是 raw Data 卻是 0 且該 section 還是可執行的 section
脫殼前
脫殼後
脫殼前和脫殼後有如此大的不同原因可能是 upx 先開闢空間放置被解壓縮的 code 然後復原原本的權限
根據線索,可以看出可能建立 service object 並且用 url 開啟對外網路連接,而 url 也可以在 data section 找到
直接開 ghidra 分析:
在 main 的部分用 MalService 的字串開啟 service thread ,該 service 採用的服務流程是 0x401040
0x401040:
可以看到建立 Mutex 、設定 WaitableTimer ,收到 signal 轉而開啟 thread 執行 0x401151
0x401151:
用 IE 8 連到 http://www.malwareanalysisbook.com
根據上一個線索,如果發現自己電腦有跟 url 連接的話應該可以判定有被感染,此外分析 service 名稱是否為 MalService 也可以判定
可以看到這個被多個 AV 偵測到,特徵有 Packer, Trojan,
以下跡象表明應該是有 packer
根據 DIE 顯示,應該是一個 FSG 1.0 的殼,根據這篇的超簡單教學找到脫完殼的地方
因為不知道怎麼 dump ,我先找到 OEP 然後分析下程式流程,前面大多在初始化,直到 0x40116e 跳到 function 利用 ole32.dll 和 OLEAUT32.dll 創建空間存放可疑 url
OleInitialize() -> apphelp() -> VariantInit() -> SysAllocString() -> ieproxy 某個 function() -> SysFreeString()
從結果來看應該是將硬編碼的 url 當參數傳送給 IE 然後開啟
TODO
從 Ollydbg 的 referenced text string 可以看到一個網址:
應該可以當作一個特徵
識別出 malware 的有 56 個 AV
特徵有:
從 IAT 導入的 API 分析,感覺很正常:
section header 的實際大小和 virtual size 好像也沒有異常:
最後透過 DIE 分析看有沒有加殼,結果是沒有
這部分跟允許特權有關…
綜合以上,猜測該 malware 會創建檔案、寫入檔案和移動檔案,這部分可能跟建立後門有關,此外還有大量跟 resource 相關的 api ,合理懷疑有藏東西再 reousrce 內,最後 advapi.dll 的部分有跟權限訪問相關的 api ,不確定幹嘛
advapi.dll 跟權限相關的部分很可能是要訪問被權限保護起來的 process 或 program
根據 .data 內的字串:
以下這幾個文件名稱都應該被檢查
從 Resource Hacker 可以看到 lab1-4.exe 藏了一個 bin 檔案在 .rsrc section:
保存下來再用 PEview 分析其導入 api:
Kernel32.dll
urlmon.dll
猜測應該是透過 urldowntofilea 下載檔案然後用 winexec 執行
從 .data 分析其字串:
應該是從 http://www.practicalmalwareanalysis[.]com/updater.exe 下載惡意程式
至於 \system32\wupdmgrd.exe 和 winup.exe 是用來幹嘛的就沒什麼線索了
透過模擬外部環境來執行不安全的程式以避免傷害到主機的分析方式
優點:
缺點:
動態分析最重要的就是把程式跑起來,不跑起來算什麼動態分析 XD
大致上可以分為:
應用程式比較簡單,點擊圖標或是用 cmdline 就能搞定, dll 比較麻煩一點,因為通常 dll 就不是設計來直接執行而是要用程式去呼叫裡面的 api 用的, windows 提供了 rundll32.exe
這個程式去跑 dll 檔
執行方式:
rundll32.exe <dllname>, <export argument>
參數的部分可以填函數名稱或是編號為多少的函數
很多惡意 dll 會在 DllMain 的地方放置惡意代碼,因為 dll 載入時一定會先到 DllMain 內,所以用 rundll32.exe 就能得知惡意 dll 的一些訊息
另外比較 trick 的方法可以用來強制 dll 執行 DllMain() ,只要把 IMAGE_FILE_HEADER 的 IMAGE_FILE_DLL (0x2000) 清掉, dll 就會透過 DllMain() 開始執行,不過可能會搞垮 dll 檔,但分析的到惡意指令就好了
若惡意程式用 service 包裝起來( ServiceMain )則可以用:
run32.dll <dll name>,InstallService <service name>
用以下指令啟動服務
net start <service name>
很不幸的有些情況 service 沒有 InstallService 導出函數,則可以使用:
sc start <service name>
HKLM/SYSTEM/CurrentControlSet/Services
But
Process Monitor 會監控所有 syscall 並存在記憶體中,若存取過多可能導致崩潰
圖中的 Operation 顯示操作, Path 應該是參數, Result 則說明有沒有成功,藉此可以達到行為分析
因為同時間在電腦上跑的程式太多,所以需要過濾器幫忙
可以看到可以用很多種方法區分
旁邊要過濾的項目會隨著 display entries 的不同而改變
選好後用旁邊的 Add 添加過濾條件上去,最後用 Apply 套用
現在好像又多了一個 profiling events ,不過我看不出所以然,好像單純的在跑自己的程式而已…
動態分析必備,功能非常強大!可以看到 process 相關的資訊: dll 載入、 thread 、 process attribute 、 child process 等等,當然也可以刪除、啟動 process
這年頭連分析都要看顏色,要是色盲怎麼辦 = =?
裡面滿多東西可以挖掘,等之後用到再紀錄
Process Explorer 還有個功能可以比對硬碟上的檔案的字串和記憶體中的檔案的字串,這樣可以防止 process replacement (我覺得是有限度的拉,如果有心應該能用同樣的 string 經過運算得到想要的結果)
可以用來查看 dll 被那些 process import ,不過 win10 不能裝,幹
有些文件可能夾帶惡意程式,可以用 Process Explorer 打開然後打開文件,看是否有啟動其他程式,然後用 Image 定位其位置
用 RegShot 工具先做一次快照,執行惡意程式後再 snapshot 一次,然後比對哪裡不同
有些惡意程式偵測到有網路才會執行,所以模擬網路是有必要的, flarevm 有 fakenet 不過沒用過…
監聽 udp 53 port (dns request 的 port ),遇到 DNS request 就發出虛假的響應,而且可以設定解析的 IP ,或者乾脆發送不存在 domain name 的選項,讓惡意程式嘗試其他 domain name
網路瑞士刀,我都是拿來快速搭 server ,如果惡意程式會連到 80 port 的話可以先用 ApateNet 發送假的 ip 127.0.0.1 然後本地開啟監聽 80 port ,等惡意程式傳資料過來
nc -vlp 80
wireshark 分析封包的工具, Palto 的 Brad 有出過一系列教學很實用,不過因為出過很多漏洞,所以使用上要小心
linux 上用來模擬多種網路服務的軟體,可以保證惡意程式繼續執行,此外紀錄 connection
這章大多數都在講哪些工具可以用…
我一打開就被終止,半點事情都沒幹…,不知道是不是環境因素…
不過由於提問的部分都算是靜態分析的範疇,我就姑且用靜態分析看一下
這次嘗試用 PE studio
只呼叫 ExitProcess 也太奇怪,可能用別的技術執行這個 malware (packer 之類?)
從中可以推斷由 http 連線的跡象,還有一些猜測是 registry file 的路徑,另外有個 url: www.practicalmalwareanalysis[.]com
多了個沒看過的 vmx32to64.exe ,一搜尋發現都是 PMA 這本書的內容…
在字串中的幾個地址需要詳加檢查
檢查連線到 www.practicalmalwareanalysis[.]com 的封包
上面的內容都只是最粗淺的推斷,由於 win10 下 lab3-1.exe 執行不起來,姑且看著書中的說明
以下為書中提供的分析過程
基本上不會有程式打開只有 ExitProcess ,可以合理懷疑這個程式有加殼
再者居然沒有 .rdata 等 sections 也是滿可疑的
因為程式有加殼的關係,推斷 strings 可能被混淆過,但是:
可以看到有意義的字串在其中,這邊我猜測 packer 應該只是 pack 了 IAT 、 .text 的部分
這邊因為著重在動態分析上,所以書中沒有針對 packer 做調查,不過閒著也是閒著我就打開 PEid 、 DIE 查看
DIE:
DIE 來看是沒啥問題的 (應該啦)
PEid:
PEid 找到 PEncrypt3.1 的蹤跡
我一直以為 DIE 是更進階版的查殼工具的說 QQ