二、 文獻探討、相關研究
2.2 Malware Fuzzer
在了解 botnet 的架構後,由於惡意軟體中時常使用加密演算法來保護內部 的資訊而不容易被分析,接著要介紹一些與惡意軟體內相關的解加密演算法的文 獻。Fuzzing 是一種軟體測試的技術,能夠自動產生測試資料對目標程式進行測 試,而使用這種技術的工具便稱為 fuzzing tools 或是 fuzzer。本論文收集了兩篇 相關的文章,一篇為專對惡意軟體所實作的系統,另一篇則是專對一般軟體中使 用 Checksum 加密的系統。
2.2.1 BitFuzz
BitFuzz[5]為一個以 BitBlaze[32, 33]為框架的 malware fuzzer,這系統使用 了 Dynamic Symbolic Execution[34]技術追蹤程式流程,加上為了辨認惡意軟體 內部的加密演算法而可以重複的產生不同測試資料所提出 Stitching 技術,主要 想法分為以下三點:
1. 1. Identify the Potential Encoding Function(加密演算法)
在追蹤程式流程時,藉由 Path Constraint 系統會找出其中的加密演算法以及 其反函數。
圖 6. BitFuzz 找出 path constraint 中的加密演算法 2. Decompose the Path Constraint
在找出使用了哪一些加密演算法後,由於要解這一些演算法較為困難,因此 系統會從 Path Constraint 中選出與加密演算法無關的部分,並且著手去解這 一些地方。
圖 7. BitFuzz 解 path constraint 中較為容易的部分
8
3. Re-stitching
在解出與加密演算法無關的部分之後,若是這些值與加密演算法有關連,則 最後系統會將這些解出的值,藉由各個加密演算法的反函數取得各種不同的 輸入值。
圖 8. BitFuzz 使用 Re-stitching 經由不同 X 解出不同的輸入值 如此一來 BitFuzz 能夠藉由解出較簡易的部分,搭配解密演算法來加速整個 流程,當然若是遇到無法找出解密演算法,或是 Path Constraint 沒有較簡易部 分可以利用,那麼整個程式仍然要耗費許多時間。
9
2.2.2 TaintScope
TaintScope[16]同樣為一個 Fuzzer,它主要針對的是使用 Checksum 做加 密的軟體。Checksum 常用於網路傳輸的資料上,雖然此篇文章實作的系統只以 一般軟體作為目標,不過也可以運用在同樣為軟體一員的惡意軟體上面。
有些 Fuzzer 產生測試資料時是隨意的更動已知的正常輸入資料,但是這樣 並不能保證每筆測試資料都是有用的,可能很早就被驗證的機制給阻擋下來,例 如先前所提到的 Checksum,若是任意更動數值,那麼 checksum 的檢查機制會 立即判斷出來。因此為了不重複製造出沒有價值的測試資料,TaintScope 主要 的核心技術為只修改測試資料中較重要的部分。
TaintScope 主要專注於改動測試資料中的兩個部分,如圖:
1. Hot Bytes
由於 TaintScope 有興趣的是 API 中的參數部分,因此他們將與 API 有 接觸的資料部分稱為 hot bytes。
2. Checksum information
第二則是與 jump instruction 有關,也就是可能為判斷 checksum 的地 方。
藉由這兩個部分 TaintScope 能夠快速的產生有效的測試資料。
圖 9. Hot bytes and checksum information
10
2.3 2.3 Malware specific function identification and handling
許多軟體撰寫時,常使用加密演算法來保護內部的資訊,尤其是會與外界溝 通、傳輸資料的軟體,例如網路的封包、資料壓縮等等,而惡意軟體為了規避防 毒軟體的檢查,像是 Bots 同樣也用了加密演算法來保護與 C&C server 溝通的 訊息。因此這邊將列出一些針對惡意軟體中加密演算法的保護機制,進行處理的 文獻。
在對加密演算法作處理之前,系統必須要能夠辨識出目標程式使用了哪種加 密演算法,這一小節要介紹三篇[4, 24, 35]能夠自動的辨識出惡意軟體所使用的 加密演算法,以及重要的相關參數。
2.3.1 Identification Cryptographic Primitives
第一篇所實作的系統,主要分為兩部分,第一追蹤整個程式的流程,將其所 有的指令以及使用到的資料還有狀態都記錄下來,這部份他們使用 DBI(dynamic binary instrumentation)技術。第二部分使用 Heuristic 去辨識前一部分所收集的 資訊,最後輸出使用那些加密演算法,以及相關的參數資訊。
圖 10. 主要流程
11
2.3.2 Aligot
第二篇則是實作了一個 Aligot[35]系統,它主要想法是以 I/O parameter 來判 斷屬於哪種加密演算法,也就是說如果有個 Input 以及 Output,假設它是使用演 算法 F,那麼要是 Output = F(Input)就能得知所使用的加密演算法即為 F。而與 上篇類似,Aligot 也是動態收集 Execution Trace,將這些 trace 以 Loop Data Flow 表示,接著以 I/O parameters 來與事先所準備好的演算法做比較,它是選擇 Tiny Encryption、RC4 algorithm、Advanced Encryption Standard、MD5 algorithm 以及 RSA。主要流程如圖 13。
圖 11. Aligot 主要流程
2.3.3 CIS
CIS[4]也是收集了的程式執行流程,利用不同指令的組合代表使用不同加密 演算法來判斷。而他們在挑選這些 heuristic 時則是從總計八種中選擇了四種來 做為系統的 heuristic function。
圖 12. CIS 判斷的簡易架構圖
12
接著比較以上所介紹的系統中,他們所使用的辨識方法、用了哪些 Heruistic 以 及能夠辨認出那些加密演算法。
由表所示,這三個系統都使用了三至四種的 heuristic 來判斷,而辨識的內容主 要以 instruction 以及 input-output 為主。最後能夠辨認出來的加密演算法也不完全 相同。
(instruction, const) input-out
Curl HTTPS Aescrypt File Encrypter Aphex Crypter AES File Crypter
13