一、 緒論
1.1 研究背景
在軟體工程流程中,軟體測試[1]的目的為找出軟體中可能存在的弱點、漏洞,
以避免軟體品質的下降。而有心人士也可能藉由這些漏洞製造出非程式本身以外 的功能,例如執行病毒程式、修改電腦設定等等。
軟體測試的方法有很多種,其中 Fuzzing[2, 3]是一種自動產生測試資料的技 術,Fuzzing 能夠根據受測程式需求產生非法的測試資料去測試程式,檢查是否 有漏洞存在。而 Fuzzing 有幾個簡單的步驟:
1. 根據測試程式所需產生測試資料,例如某部分程式需要輸入數字,則會產生 溢位的數值或是字串作為輸入的資料。
2. 將產生的測試資料送給測試程式執行。
3. 由 2,若是測試程式崩潰,則將此筆測試資料記錄下來以做後續分析,若沒 有則直接回到第一個步驟。
圖 1. Fuzzing 簡單流程
但是實際上 Fuzzing 時會遇到一些困難,加密演算法(Encryption
algorithm)時常運用在軟體當中,以保護內部的資訊,最常見的為一般的壓 縮軟體、網路傳輸的 Checksum,這些都會造成 Fuzzing 時需要額外耗費多 餘的成本去處理。而加密演算法也有其對應的解密演算法(Decryption algorithm),有些系統[4, 5]便是使用解密演算法來加快處理這些問題。
2
惡意軟體(Malware, Malicious Software)現今常出沒在各個地方,主要為竊
取使用者的私密資料,例如銀行、信用卡資訊以及帳號密碼等等[6],或是造成 系統崩潰損壞。而常見的惡意軟體除了一般電腦病毒之外,還有 bots、spyware、
worm 以及木馬等等,而像是殭屍網路(Botnet)[6-8]是由潛伏在系統中的 Bots 與 控制這些 Bots 的 C&C (Command and Control)Server 所組成,由於被 Botnet 所掌握的系統的規模都相當龐大,因此後續章節會將 Botnet 作為主要的惡意軟 體目標進行討論。
1.2 研究動機
由於軟體內可能會有使程式崩潰的漏洞,為了穩定以及可靠性,軟體測試是
非常重要的一環。同樣也是軟體的惡意軟體,當然也可能存在著漏洞,而惡意軟 體的作用是對目標產生攻擊性的行為,比起一般軟體是否更不注重安全性,更容 易存在著漏洞。
目前已經有許多對惡意軟體的研究,其中分為以防禦、分析角度[9, 10] [11]
[12-15]以及測試、攻擊角度。前者像是防毒軟體等等,觀察軟體是否具有攻擊 性的行為來辨識是否為惡意軟體,而後者則是藉由測試的技術,例如 Fuzzing[5, 16, 17],去測試這個軟體是否具有弱點。
圖 2. 惡意軟體的惡意行為分析 VS 惡意軟體的弱點分析
而像是 botnet 這類的惡意軟體,它們掌握的受感染電腦規模、災情都非常 的龐大[6, 18-21],因此許多組織機關都持續的發佈某個 botnet 的消息,包括其 類型、災情、規模以及如何檢測有無被感染的解決方法,但是 botnet 變種成長 的速度依舊讓整個網路有著隱藏的威脅。
1.3 研究目的
雖然 Fuzzing 已經廣泛應用在許多軟體上面,協助找出這些軟體的漏洞[22, 23],由於惡意軟體中常使用加密演算法來保護內部資訊以及與 C&C server 溝通
3
因為加密演算法會將內部資訊做加密,讓 fuzzing tools 無法直接產生符合的 資料格式,在探討相關文章後,整理如何辨認目標軟體中所使用的加密演算
4