# 惡意代碼分析
開始看 PracticalMalwareAnalysis 中文版, vm 是 win10 跟書中的實驗環境有點差別...希望可以順利做實驗 ><
如果書中任何技術已經很熟悉,我應該會快快做完簡單做個紀錄就好,沒見過的再詳細記錄
###### tags: `malware`
## 靜態分析基本技術
主要教授幾種分析方法:
1. anti-virus engine scan
2. check hash
3. check file infomation (header, function, string)
### 反病毒引擎分析
最常見的做法就是丟到 virustotal 上面給眾多防毒引擎檢驗,不過這種只能針對比較爛的惡意程式,很多針對性的惡意程式特徵是防毒引擎沒有的(不過這種惡意程式應該也不會把目標放在一般群眾)
* 作法
* 特徵引擎資料庫
* 行為模式匹配分析
上述方法稍稍更改一下 code 就可以免殺了
### Hash
將惡意程式 hash 過後再比對已經知道的惡意程式 hash
### Strings
strings 工具可以查看檔案所有 printable strings ,特別關注 **API**, **DLL**, **IP** 等等相關字串或是任何可以當作線索的字串
### Packed and Obfuscated Code:
* 特徵:
* 很少 string
* 透過 PEid 檢查 pack
* 比較新的殼應該無法...
* 流程:
1. 跳到脫殼代碼
2. 執行脫殼代碼
3. 跳回 OEP (original entry point)
### PE 文件格式
PE 是 windows 可執行文件的簡稱,通常一個正常的 PE 包含各種 header ,這些 header 一樣可以提供各種資訊,後面會介紹
### 函式庫和函數
* IAT/API/DLL
* static link
* dynamic link
* runtime link
* LoadLibrary
* GetProcAddress
常見的 Windows API 命名慣例:
1. 結尾帶有 Ex
通常這種 API 有被再開發過,為了相容舊版所以有
3. 結尾帶有 W/A
這種代表參數是字串類型
常見的 DLL
* kernel32.dll
* export windows api
* 通常跟文件、記憶體、硬體操作有關
* Advapi32.dll
* 安全性、註冊表、事件紀錄有關
* User32.dll
* interface
* Gdi32.dll
* GUI 相關
* GUI 不一定要顯示出來 :exclamation:
* Ntdll.dll
* 通常是被 kernel32.dll import
* 如果直接 import ntdll.dll 很可疑
* Wsock.dll
* socket 相關
* Wininet.dll
* 高級一點的 protocol 相關
* FTP, HTTP, NTP
通常一般程式不太會用到 export api ,只有 dll 這種會被其他程式用到裡面的 function 的才用 export 出去
### 靜態分析技術實踐
很不幸的是....我找不到任何 example ,所以只能看著書本記錄一下
~~今天先到這邊 2020/1/19~~
### Potential Keylogger.exe
這個例子主要是講述如何透過觀察呼叫的 windows api 猜測 malware 目的是什麼
**程式沒有加殼所以可以直接分析**
另外因為做練習,所以會先把裡面的 api 都放上來然後自己判別
呼叫 api 列表:
![](https://i.imgur.com/fKUCTy9.png)
* kernel32.dll
* 文件操作
* CreateFileW
* DeleteFileW
* FindExistFileW
* FindNextFileW
* ReadFile
* WriteFile
* MapViewOfFile (將 file map 到 memory 中 )
* SetFilePointer
* CreateDirectoryW
* FindClose (從任何找到 file 的 handler 關掉該 file)
* GetModuleHandleW (返回指定的 dll/exe handle)
* process 操作
* ExitProcess
* GetCurrentProcess
* GetProcessHeap
* OpenProcess
* Anti debug
* IsDebuggerPresent
* thread 操作
* CreateThread
* GetCurrentThread
* user32.dll
* 跳出視窗
* MessageBoxW
* BeginDeferWindowPos (為 window 分配多個窗位)
* CreateDialogParaW
* CreateWindowExW
* GetWindowLongW (改變 window 屬性 ?)
* GetWindowRect (第二個參數返回 window 的座標)
* GetWindowTextW (返回 window 內的 title 字串)
* InvalidRect (將某 rectangle 變為無效區域)
* SetWindowTextW
* ShowWindow
* 註冊 hot key
* RegisterClassExW
* RegisterHotKey
* hook window
* SetWindowHookEx
* event
* GetMessageW
* MapVirtualKeyW (將 input key 轉換成 virtual key)
* GDI32.dll
* GetStockObject (獲取畫筆、調色板等 object....這啥鬼)
* SetTextColor
* SetBkMode
* Shell32.dll
* ShellExecuteW
* ShellExecuteExW
* Advap32.dll
* 註冊表相關
* RegOpenKeyExW
* RegOpenCurrentUser
* RegSetValueExW
* etc...
東西很多我也沒全部看完 (是說有些東西找了也看不是很懂就是了),大概猜測一下這個 malware 可能的動作:
1. 創建、開啟文件
2. 操作 process (很可能是當前 process)
3. 防止 debug
4. 跳出視窗
5. 註冊快捷鍵
6. 執行其他 program
7. 修改、刪除註冊表內容
最重要的 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
### packedprogram.exe
又是一個沒有執行檔的範例...
#### 分析 import api
發現該程式 import api 遠少於正常程式,可以判定應該是有加過殼的,不過要確認的話還是得靠其他專業工具
#### 分析 PE header
這次分析更多資訊的 PE header
一般來說 PE header 可以分為幾個區:
* .text
* 存放指令的段
* 也可能叫做 CODE (看編譯器)
* .rdata
* 唯讀資料段
* 存放 import api, dll 等
* .data
* 全域變數段
* .rsrc
* 存放 GUI 的資源: 圖片、字串等等
**這些名稱其實可以隨便改,不要太相信XD**
分析 header 可以靠 PEview 這個工具,裡面會列出各個 section header 的資料,其中 ~~IMAGE_DOS_HEADER, IMAGE_NT_HEADER~~ 不重要,看其他資訊即可:
* IMAGE_FILE_HEADER
* 主要是看編譯時間判斷攻擊的新舊程度
* 這個可以偽造且如果用 Delphi 的話編譯時間都是很奇怪
![](https://i.imgur.com/ThLGoxQ.png)
* IMAGE_OPTIONAL_HEADER
* Subsystem
* IMAGE_SUBSYSTEM_WINDOWS_GUI 圖形化
* IMAGE_SUBSYSTEM_WINDOWS_CLI 命令行
![](https://i.imgur.com/MYp7wY3.png)
* IMAGE_SECTION_HEADER
* 比較 virtual size 和硬碟所占空間
* 可能因為對齊問題硬碟空間會略大
* if virtual_size > actual space: 可能有 pack
* 不過 data 中 virtual size 大於 actual space 是合理的 ( :question:
![](https://i.imgur.com/CgD1E11.png)
* 區段名稱
* 無意義的字串名稱很可疑
* if .text 原始大小為 0
* 代表脫殼器會將脫殼後的指令存回 .text
#### 分析 .rsrc
使用 resource hacker 分析 rsrc 區段,找出會被用到的 window gui 素材且使用時長什麼樣子
下面這張圖沒有 gui 素材,不過倒是找到一個奇怪的 raw_data 內容,感覺是塞了個執行檔在裡面...?
![](https://i.imgur.com/XjRgIys.png)
**有些程式或惡意軟體會把 code, driver 塞在 .rsrc 中,透過 resource hacker 可以提取出來**
## Lab
每個章節背後都有幾個練習,沒意外的話都是作者自己寫或找來的 malware 範例,可以拿來做練習,以下就根據作者的引導盡量完成每個問題
### lab1-1
該小題使用 lab1-1.exe 和 lab1-1.dll 兩個檔案做練習
#### 將檔案上傳到 virustotal 並看分析報告,有 AV 找到匹配的特徵嗎?
有,而且大家都知道這是 practicalmalwareanalysis 的樣本了...,下面是分析結果:
lab1-1.exe
![](https://i.imgur.com/fld3Gc8.png)
lab1-1.dll
![](https://i.imgur.com/XyIskbO.png)
兩者比較後, exe 被比較多防毒軟體檢測出來 dll 相對較少
:::info
之前上傳的時候好像沒有那麼多 av 有檢查出來,怎麼今天上傳特別多 = = ?
:::
另外發現 virustotal 有個很酷的功能可以用別的 av 公司的行為檢測來分析該 malware 執行後做了哪些事,目前提供騰訊和瑞星行為檢測引擎
![](https://i.imgur.com/c0oWecW.png)
我個人比較信騰訊的,瑞星的沒有註冊表行為有點爛
#### 這兩個文件什麼時候編譯的
這個問題其實可以 virustotal 就有:
![](https://i.imgur.com/1NJ1yod.png)
不過還是用之前學到的手動做一下:
1. 用 PEview 打開 lab1-1.exe
2. 點擊 IMAGE_NT_HEADERS
3. 點擊 IMAGE_FILE_HEADER
![](https://i.imgur.com/dc5z0Ro.png)
可以看到跟上面的 creation time 相符
至於 lab1-1.dll 也是一樣做法:
![](https://i.imgur.com/r895Ten.png)
#### 這兩個文件是否有被加殼的跡象?如果有是那些?
之前學到用 import api 數量判斷有沒有加殼是個選擇,於是我用 peview 打開 lab1-1.exe 後觀察 .rdata 段中的 IAT
![](https://i.imgur.com/MT95pX7.png)
雖然數量不多,但感覺應該沒有加殼.....?
因為不放心所以又額外用了 PEid 和 detect it easy 查看
DIE
![](https://i.imgur.com/lgm1GcX.png)
PEid
![](https://i.imgur.com/uqkcnT7.png)
兩個都沒檢查出來應該是沒有八...
換 lab1-1.dll 試試看:
透過 PEview 查看 IAT ,雖然 api 也很少,不過 dll 的 api 好像本來就不用很多?
![](https://i.imgur.com/8FJ560F.png)
再用 DIE 和 PEid 查看
![](https://i.imgur.com/mvJoJ3s.png)
![](https://i.imgur.com/JMUgAJW.png)
看起來都沒什麼問題
#### 分析 import api 並觀察其目的
根據分析該 malware 具備以下幾種目的:
* map file
* UnMapOfView
* MapOfView
* CreateFileMapping
* 創建、複製檔案
* CreateFileA
* CopyFileA
* ~~FindNextFileA~~
* ~~FindFirstFileA~~
* 搜尋文件
* FindNextFileA
* FindFirstFileA
* 創建 process
* CreateProcessA
**CreateProcessA 和 Sleep 常在後門程式中出現,若還出現 exec, sleep 字串需要特別關注, exec 可能被拿來下指令而 sleep 則用來命令後門睡眠**
![](https://i.imgur.com/p4DMAlj.png)
:::danger
* 網路功能
* WS2_32.dll 負責 windows websocket interface
:::
#### 是否有跡象讓你可以在受感染的主機上查找
因為 CreateFileA 和 CopyFileA 兩個 API ,可以確定應該有檔案被這個 malware 創建、複製
這兩個 api 都需要檔名字串,透過 PEview 尋找存在的字串發現以下:
* "C:\"
* "C:\Windows\system32\kerne132.dll"
* "C:\Windows\System32\kernel32.dll"
* "Warning, this will destroy your computer"
第二個要注意 kernel 的 l 其實是 1 ,也就是說該 malware 創了一個檔跟 kernel32.dll 很像的 dll 放在 system32 中,十分可疑
#### 是否有基於網路的跡象
~~從 string 有無 ip 和 import api 來看,都沒有跟網路相關,推測沒有~~
:exclamation:
在 lab01-1.dll 的 string 發現有 127.26.152.13 這個字串,此外 dll 還 import WS2_32.dll 這個 windows socket interface dll
![](https://i.imgur.com/0P7FvXU.png)
![](https://i.imgur.com/RCM3T8s.png)
:::warning
第一次分析的時候沒看到有 IP 字串...
:::
#### 你猜這些檔案目的是什麼
單純看上述資料看不太出來,我決定出動 ghidra ,分析過後(雖然大半看不懂)猜測是在 system32 上把 lab1-1.dll 內容複製到 kerne132.dll 裡面
經過提點,仔細分析一下 lab01-1.dll 內的內容,其中一個 function 是透過 socket 做 connect 和 CreateProcessA 做 command execute
![](https://i.imgur.com/FYFnCQM.png)
![](https://i.imgur.com/1YqfXEW.png)
### lab1-2
#### 上傳到 virustotal ,多達 45 個 AV 偵測到
![](https://i.imgur.com/Q0YTCc0.png)
:exclamation: 要仔細寫出偵測到那些特徵
#### 是否有加殼跡象?如果有,請脫殼
透過 PEview 打開馬上就看到 Section UPX0 這種字眼,很明顯有加 UPX 殼
![](https://i.imgur.com/WvXXpWe.png)
既然知道是 upx 殼那應該可以直接用 upx 脫殼
其他跡象:
* SECTION_UPX_0 大小對不上
![](https://i.imgur.com/rI2BC4B.png)
可以看到 Virtual Size 為 0x4000 但是 raw Data 卻是 0 且該 section 還是可執行的 section
#### 導入函數
脫殼前
* kernel32.dll
* LoadLibraryA
* 動態載入 dll
* VirtualAlloc
* VirtualFree
* VirtualProtect
* advapi.dll
* CreateServiceA
* 開啟 service object ( :question:
* wininet.dll
* InternetOpenA
* 開啟應用程式網路相關的 api
脫殼後
* kernel32.dll
* SystemTimeToFileTime
* GetModuleFileNameA
* CreateWaitableTimer
* ExitProcess
* OpenMutexA
* SetWaitableTimerA
* WaitForSingleObject
* CreateMutexA
* CreateThread
* advapi.dll
* CreateServiceA
* StartServiceCtrlDispatcherA
* OpenSCManager
* 在特定電腦上建立和 service manager 的連接
* wininet.dll
* InternetOpenUrlA
* 根據特定的 url 開啟網路
* InternetOpenA
脫殼前和脫殼後有如此大的不同原因可能是 upx 先開闢空間放置被解壓縮的 code 然後復原原本的權限
根據線索,可以看出可能建立 service object 並且用 url 開啟對外網路連接,而 url 也可以在 data section 找到
![](https://i.imgur.com/AnQNaHw.png)
直接開 ghidra 分析:
![](https://i.imgur.com/l8dnpoi.png)
在 main 的部分用 MalService 的字串開啟 service thread ,該 service 採用的服務流程是 0x401040
0x401040:
![](https://i.imgur.com/NhEjRqR.png)
可以看到建立 Mutex 、設定 WaitableTimer ,收到 signal 轉而開啟 thread 執行 0x401151
0x401151:
![](https://i.imgur.com/m3IFH3A.png)
用 IE 8 連到 http://www.malwareanalysisbook.com
#### 有哪些基於主機或網路的跡象可以用來確定機器是否被感染?
根據上一個線索,如果發現自己電腦有跟 url 連接的話應該可以判定有被感染,此外分析 service 名稱是否為 MalService 也可以判定
### lab1-3
#### 上傳到 virustotal
可以看到這個被多個 AV 偵測到,特徵有 Packer, Trojan,
![](https://i.imgur.com/EpRLjWR.png)
#### 是否有加殼跡象
以下跡象表明應該是有 packer
* AV 偵測有 packer
* section 名稱被拔掉
* 有 LoadLibraryA, GetProcessA 等函數
* section 大小未顯示
根據 DIE 顯示,應該是一個 FSG 1.0 的殼,根據[這篇](https://bbs.pediy.com/thread-37958.htm)的超簡單教學找到脫完殼的地方
![](https://i.imgur.com/nKDgqf5.png)
#### 導入函數
因為不知道怎麼 dump ,我先找到 OEP 然後分析下程式流程,前面大多在初始化,直到 0x40116e 跳到 function 利用 ole32.dll 和 OLEAUT32.dll 創建空間存放可疑 url
OleInitialize() -> apphelp() -> VariantInit() -> SysAllocString() -> ieproxy 某個 function() -> SysFreeString()
從結果來看應該是將硬編碼的 url 當參數傳送給 IE 然後開啟
**TODO**
* dump the binary
#### 有哪些基於主機或網路的跡象可以用來確定機器是否被感染?
從 Ollydbg 的 referenced text string 可以看到一個網址:
![](https://i.imgur.com/TaXdSAr.png)
應該可以當作一個特徵
### lab1-4
#### 上傳到 virustotal
識別出 malware 的有 56 個 AV
特徵有:
* Trojan
* Trojan downloader
* backdoor
* packer
![](https://i.imgur.com/2YM8GGe.png)
#### 有加殼跡象嗎?
從 IAT 導入的 API 分析,感覺很正常:
![](https://i.imgur.com/6v0y6db.png)
section header 的實際大小和 virtual size 好像也沒有異常:
![](https://i.imgur.com/FdWdIvd.png)
![](https://i.imgur.com/6JErahU.png)
![](https://i.imgur.com/AkG12xD.png)
![](https://i.imgur.com/QInqGhu.png)
最後透過 DIE 分析看有沒有加殼,結果是沒有
![](https://i.imgur.com/je6giOf.png)
#### 導入函數
* ADVAPI32.dll
* OpenProcessToken
* 得到 process token
* LookupPrivilegeValueA
* 回傳 LUID
* AdjustTokenPrivileges
* 允許某個 token 提權 ?
這部分跟允許特權有關...
* Kernel32.dll
* GetProcAddress
* LoadLibraryA
* 額外 load dll
* WinExec
* 執行其他程式
* WriteFile
* 寫檔
* CreateFileA
* 創建檔案
* SizeofResource
* .rsrc 資源相關
* CreateRemoteThread
* 為目標程式開啟一個 thread ,常用於 dll injection
* FindResourceA
* 用名稱、類型、 module 找到特定的 reousrce
* GetModuleHandleA
* 取得 module 的 handle
* GetWindowsDirectoryA
* 返回 window 的目錄
* MoveFileA
* 移動檔案
* GetTempPathA
* 返回專門存放暫存檔的目錄
* GetCurrentProcess
* 返回當前 process 的 pseudo handle ?
* OpenProcess
* 打開 process object
* CloseHandle
* LoadResource
* 根據 module 和 resource info 載入 resource
綜合以上,猜測該 malware 會創建檔案、寫入檔案和移動檔案,這部分可能跟建立後門有關,此外還有大量跟 resource 相關的 api ,合理懷疑有藏東西再 reousrce 內,最後 advapi.dll 的部分有跟權限訪問相關的 api ,不確定幹嘛
:::info
advapi.dll 跟權限相關的部分很可能是要訪問被權限保護起來的 process 或 program
:::
#### 有哪些跡象可以判別電腦是否被感染
根據 .data 內的字串:
![](https://i.imgur.com/81dACsJ.png)
以下這幾個文件名稱都應該被檢查
* winlogon.exe
* \system32\wupdmgr.exe
* sfc_os.dll
* winup.exe
* psapi.dll
#### .rsrc 分析
從 Resource Hacker 可以看到 lab1-4.exe 藏了一個 bin 檔案在 .rsrc section:
![](https://i.imgur.com/rSsXRGg.png)
保存下來再用 PEview 分析其導入 api:
![](https://i.imgur.com/JuJJFwU.png)
* Kernel32.dll
* WinExec
* GetTempPathA
* GetWindowDirectoryA
* urlmon.dll
* URLDownloadToFileA
猜測應該是透過 urldowntofilea 下載檔案然後用 winexec 執行
從 .data 分析其字串:
![](https://i.imgur.com/pubknpS.png)
應該是從 http://www.practicalmalwareanalysis[.]com/updater.exe 下載惡意程式
至於 \system32\wupdmgrd.exe 和 winup.exe 是用來幹嘛的就沒什麼線索了
## 動態分析基本技術
### 沙箱 (sandbox) 分析
透過模擬外部環境來執行不安全的程式以避免傷害到主機的分析方式
* 優點:
* 快速、方便
* 進行初步的行為分析
* 缺點:
* 有些 malware 會檢測是否在沙盒內
* 需要避免將重要資料一併上傳到網路上
* 後門程式、命令行程式比較難執行 ( any.run 應該可以克服 cli 程式)
* 有可能需要特殊文件才能啟動但沙盒沒有 QQ
* dll 可以在沙盒裡面執行不起來
* 沙盒環境可能不符合 malware 執行環境導致執行不起來
### 執行惡意程式
動態分析最重要的就是把程式跑起來,不跑起來算什麼動態分析 XD
大致上可以分為:
* 應用程式
* dll
應用程式比較簡單,點擊圖標或是用 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 檔,但分析的到惡意指令就好了
:::info
1. 根據網路上其它資料指出如果 dll 單純導出資源則可以不要有 DllMain() 這個 function()
2. DllMain() 在靜態或動態載入時會呼叫到
:::
若惡意程式用 service 包裝起來( ServiceMain )則可以用:
`run32.dll <dll name>,InstallService <service name>`
用以下指令啟動服務
`net start <service name>`
很不幸的有些情況 service 沒有 InstallService 導出函數,則可以使用:
1. sc 指令
* 開啟指令: `sc start <service name>`
3. 修改沒使用的服務的 register file 手動安裝
* 位於 `HKLM/SYSTEM/CurrentControlSet/Services`
### Process Monitor
* Process Monitor
* 用來監控註冊表、文件、 process 、 thread 等
* 基本上是 FileMon + RegMon
**But**
1. 通過 device IO 進行通訊的監控不到
2. 特定圖形調用監控不到
* SetWindowsHookEx
3. 不要拿來監控網路
* 不同版本的 windows 下使用 process monitor 有版本問題
Process Monitor 會監控所有 syscall 並存在記憶體中,若存取過多可能導致崩潰
圖中的 Operation 顯示操作, Path 應該是參數, Result 則說明有沒有成功,藉此可以達到行為分析
![](https://i.imgur.com/P5lseAL.png)
因為同時間在電腦上跑的程式太多,所以需要過濾器幫忙
可以看到可以用很多種方法區分
![](https://i.imgur.com/iwALi49.png)
![](https://i.imgur.com/3QBDi1A.png)
旁邊要過濾的項目會隨著 display entries 的不同而改變
![](https://i.imgur.com/LC2AzXb.png)
選好後用旁邊的 Add 添加過濾條件上去,最後用 Apply 套用
* 事件分類
* proc mon 貼心的把四大事件分類放在 toolbar ,可以馬上看到
* regfile
* 註冊表相關
* network
* 網路相關
* process
* process 相關
* file system
* 文件系統相關
:::info
現在好像又多了一個 profiling events ,不過我看不出所以然,好像單純的在跑自己的程式而已...
:::
* 開機啟動
基於有些惡意程式開機就在偷跑, proc mon 也可以設定成開機就追蹤,[教學](https://www.msigeek.com/6231/how-to-enable-system-boot-time-logging-using-process-monitor-tool)
### Process Explorer
動態分析必備,功能非常強大!可以看到 process 相關的資訊: dll 載入、 thread 、 process attribute 、 child process 等等,當然也可以刪除、啟動 process
![](https://i.imgur.com/yg850xk.png)
* 顏色
* 粉紅: services
* 藍色: process
* 綠色: new process
* 紅色:被終止
> 這年頭連分析都要看顏色,要是色盲怎麼辦 = =?
裡面滿多東西可以挖掘,等之後用到再紀錄
* Verify
* 驗證硬碟上的檔案的數字簽名,確保是微軟公司所發行的 (其他合法公司不知道行不行)
* **防止不了 process replacement** ,因為該技術利用替換掉記憶體的內容,跟硬碟無關
![](https://i.imgur.com/4KCf0By.png)
* 比較 strings
Process Explorer 還有個功能可以比對硬碟上的檔案的字串和記憶體中的檔案的字串,這樣可以防止 process replacement (我覺得是有限度的拉,如果有心應該能用同樣的 string 經過運算得到想要的結果)
![](https://i.imgur.com/DgMErW8.png)
* Dependency Walker
可以用來查看 dll 被那些 process import ,不過 win10 不能裝,幹
* 分析惡意文檔
有些文件可能夾帶惡意程式,可以用 Process Explorer 打開然後打開文件,看是否有啟動其他程式,然後用 Image 定位其位置
* 比對註冊表
用 RegShot 工具先做一次快照,執行惡意程式後再 snapshot 一次,然後比對哪裡不同
### 模擬網路
有些惡意程式偵測到有網路才會執行,所以模擬網路是有必要的, flarevm 有 fakenet 不過沒用過...
* ApateNet
監聽 udp 53 port (dns request 的 port ),遇到 DNS request 就發出虛假的響應,而且可以設定解析的 IP ,或者乾脆發送不存在 domain name 的選項,讓惡意程式嘗試其他 domain name
* NetCat
網路瑞士刀,我都是拿來快速搭 server ,如果惡意程式會連到 80 port 的話可以先用 ApateNet 發送假的 ip 127.0.0.1 然後本地開啟監聽 80 port ,等惡意程式傳資料過來
`nc -vlp 80`
* wireshark
wireshark 分析封包的工具, Palto 的 Brad 有出過一系列教學很實用,不過因為出過很多漏洞,所以使用上要小心
* INetSim
linux 上用來模擬多種網路服務的軟體,可以保證惡意程式繼續執行,此外紀錄 connection
### 實踐
1. proc mon 執行並設定過濾條件
2. proc explorer 打開準備觀察
3. RegShot 設定第一個 snapshot
4. Inetsim 和 Apate 設定假的網路
5. wireshark 紀錄封包
### 總結
這章大多數都在講哪些工具可以用...
## Lab3
### Lab3-1
我一打開就被終止,半點事情都沒幹...,不知道是不是環境因素...
不過由於提問的部分都算是靜態分析的範疇,我就姑且用靜態分析看一下
1. 找出 lab3-1.exe 的導入函數和字串列表
這次嘗試用 PE studio
![](https://i.imgur.com/gCSipFs.png)
* import API
* ExitProcess
只呼叫 ExitProcess 也太奇怪,可能用別的技術執行這個 malware (packer 之類?)
* 字串
![](https://i.imgur.com/xnXjRLn.png)
從中可以推斷由 http 連線的跡象,還有一些猜測是 registry file 的路徑,另外有個 url: www.practicalmalwareanalysis[.]com
多了個沒看過的 vmx32to64.exe ,一搜尋發現都是 PMA 這本書的內容...
3. 感染跡象為何
在字串中的幾個地址需要詳加檢查
5. 是否存在網路特徵碼?
檢查連線到 www.practicalmalwareanalysis[.]com 的封包
上面的內容都只是最粗淺的推斷,由於 win10 下 lab3-1.exe 執行不起來,姑且看著書中的說明
**以下為書中提供的分析過程**
1. 透過 PE view 打開發現只有一個 ExitProcess
基本上不會有程式打開只有 ExitProcess ,可以合理懷疑這個程式有加殼
再者居然沒有 .rdata 等 sections 也是滿可疑的
2. 查看字符串內容
因為程式有加殼的關係,推斷 strings 可能被混淆過,但是:
![](https://i.imgur.com/uLYer0t.png)
可以看到有意義的字串在其中,這邊我猜測 packer 應該只是 pack 了 IAT 、 .text 的部分
這邊因為著重在動態分析上,所以書中沒有針對 packer 做調查,不過閒著也是閒著我就打開 PEid 、 DIE 查看
DIE:
![](https://i.imgur.com/f6yyreN.png)
DIE 來看是沒啥問題的 (應該啦)
PEid:
![](https://i.imgur.com/WyE9G44.png)
PEid 找到 PEncrypt3.1 的蹤跡
> 我一直以為 DIE 是更進階版的查殼工具的說 QQ
>