常見漏洞挖掘技術
-
手工測試
-
補丁比對
- 定義:一種通過對比補丁之間的差異來挖掘漏洞的技術。
- 優點:發現速度快
- 缺點:已知漏洞
- 常見工具:PatchDiff2、bindiff
-
程序分析
-
靜態
- 定義:是指在不運行計算機程序的條件下,通過詞法分析、語法分析、語義分析、控制流分析、污點分析等技術對程序代碼進行掃描,驗證代碼是否滿足規范性、安全性等指標的一種代碼分析技術。
- 優點:覆蓋率100%,自動化程度高
- 缺點:漏報和誤報(RICE,程序分析問題不可判定)
-
動態
- 定義:在運行計算機程序的條件下,驗 證代碼是否滿足規范性、安全性等指標的一種代碼分析技術。一般通過插樁技術分析程序的異常行為。
- 插樁技術是指在保證被測程序邏輯完整性的基礎上在程序的關鍵位置插入一些“樁”,即加入一些測試代碼,然后執行插樁后的程序,通過“樁”的執行獲取程序的控制流和數據流信息,進而分析程序的異常行為。
- 優點:自動化程度高、覆蓋率較高
- 缺點:漏報和誤報(RICE,程序分析問題不可判定)
- 工具:Android:Xposed
-
-
二進制審核
- 定義:源代碼不可得,通過逆向獲取二進制代碼,在二進制代碼層次上進行安全評估
- 優點:缺點: 同靜態審核
- 逆向導致信息丟失,理解困難,甚至引入邏輯錯誤。
- 二進制及編輯工具:IDA Pro、Ollydbg、UltraEdit、Hex Workshop以及WinHex
-
模糊測試
- 定義:通過向被測目標輸入大量的畸形數據並監測其異常來發現漏洞
- 關鍵:測試用例構造,自動化。
- 優點:無須源碼、誤報低、自動化程度高
- 缺點:覆蓋率低
- 工具:Peach、Sulley、Autodafe、SPIKE等
漏洞挖掘示例
- 路由器協議漏洞挖掘
- NFC漏洞挖掘
- NFC(Near Field Communication)技術是一種近距離的雙向高頻無線通信技術,能夠在移動終端、智能標簽(Tag)等設備間進行非接觸式數據交換。
- NFC技術具有通信距離短、一次只和一台設備連接(1V1)、硬件安全模塊加密等特點,具有較好的保密性和安全性
- 微信XSS漏洞
Android常用工具
-
靜態分析工具
- JEB 收費
- Androwarn—靜態分析APK的Dalvik字節碼(smali),並把潛在的惡意行為提示給用戶。
- Androguard是一個靜態工具集。功能:反匯編/反編譯/靜態分析apk/相似度對比/測試混淆程度/惡意代碼檢測/
- DroidBox—Android應用程序動態分析工具
-
動態分析工具
- Mercury—是一個開源的Android APP應用安全評估框架,它最贊的功能是可以動態的與android設備中的應用進行IPC(組件通信)[包括Activity,Broadcast receivers,Content providers與Services]交互。
- Drozer是一款針對Android系統的安全測試框架。
- TaintDroid —是一動態實時的隱私監控工具。它是利用動態污點分析技術檢測隱私數據的。
-
逆向分析工具
- Smali/Baksmali:DEX文件匯編和反匯編工具。
- Apktool:是GOOGLE提供的APK編譯工具。可用於修改APK文件后,重新打包
- Dex2Jar:把apk文件轉換成.jar包,配合JD-GUI工具查看和分析java源代碼。
- JD、Dedexer、Redexer…
模糊測試階段
- 確定測試目標
- 確定輸入向量:是否能找到所有的輸入向量是模糊測試能否成功的關鍵。
- 生成模糊測試數據
- 執行模糊測試數據
- 監視異常:一定要對異常和錯誤有監視,否則不知道是什么數據觸發faults,則這次模糊測試就沒有意義
- 判定發現的漏洞是否可能被利用:這種過程是典型的手工過程,需要操作者具有特定的安全知識。
模糊測試的局限性
- 訪問控制漏洞:模糊測試無法識別應用程序本身的權限問題
- 糟糕的設計邏輯:模糊測試無法識別發現的問題是否是由於安全問題造成的
- 后門:模糊測試無法識別是否是后門功能
破壞:SIGSEGV信號會導致模糊測試無法識別是否觸發內存破壞 - 多階段安全漏洞:模糊測試對識別單個漏洞很有用,但對小的漏洞鏈構成的漏洞則作用不大
黑盒測試與模糊測試
黑盒測試的主要作用:
黑盒測試法注重於測試軟件的功能需求,主要試圖發現下列幾類錯誤。
- 1.功能不正確或遺漏;
- 2.界面錯誤;
- 3.輸入和輸出錯誤;
- 4.數據庫訪問錯誤;
- 5.性能錯誤;
- 6.初始化和終止錯誤等。
模糊測試
模糊測試(Fuzzing),是一種通過向目標系統提供非預期的輸入並監視異常結果來發現軟件漏洞的方法。
主要是通過輸入大量數據,發現程序中存在的問題。可以通過使程序某些內容溢出出現異常,或者輸入的是程序規定的范圍內的數據結果出現異常,從而找出程序的bug。
模糊測試技術的發展方向
模糊測試技術經過近20余年的發展,已逐步成為一種流行的被廣泛應用的漏洞挖掘技術.但是,模糊測試技術仍然存在許多的局限性.例如,通過模糊測試技術挖掘出的漏洞大多仍是傳統的溢出類錯誤,對於后門、鑒權繞過等邏輯上的錯誤依然無能為力.同時,模糊測試技術也不能准確的發現多條件觸發的漏洞. 更重要的是, 模糊測試技術不能保證畸形輸入數據能夠覆蓋到所有的分支代碼, 這就使得即使通過模糊測試檢驗的軟件仍可能存在不被發現的漏洞.如何克服缺陷、提高漏洞挖掘的效率是模糊測試技術未來的研究熱點.模糊測試技術未來的研究熱點可能包括以下幾個方面.
-
5.1 提高測試用例的通過率
以網絡協議的模糊測試為例,即使我們通過模糊測試技術生成了大量的畸形測試數據,但這些測試數據中的絕大部分會被網絡協議的校驗機制所拒絕,這樣的測試效率是極低的. 所以我們並不能用大量的純隨機數據來測試網絡協議,而是應該構建出通過率更高的測試用例, 例如, 可以將模糊測試配置成使用已知有效數據、故意錯誤數據和隨機數據的組合,這樣既可以提高測試用例的通過率也不會使測試用例過多的受測試人員的主觀影響. 再如,也可以在隨機測試數據后面增添校驗位, 或者在了解待測網絡協議的數據包格式后構造出符合規定的測試用例,這些方法可能大幅度提高測試用例的通過率. -
5.2 協議格式自動化分析
正如 5.1 小節所述,對文件、協議格式的深刻理解可以幫助測試人員構建出通過率很高的測試用例,但這繁瑣復雜的測前准備工作也給測試工具開發人員帶來很大的負擔, 可以設想,即使針對一個簡單的非公開協議也需要花費編程人員大量的時間研究目標協議的工作規范, 更何況,待測試的網絡協議規范很可能是未經公開的. 這就指明了模糊測試技術未來的另一個發展方向, 即實現文件、協議格式的自動化分析. -
5.3 引進並行和分布式技術
模糊測試技術最大的一個特點是可以生成數量巨大的測試用例, 從而使對軟件進行全方位測試成為可能. 但巨大的測試用例數量也帶來了執行效率低的缺點. 因此, 引進並行和分布式技術, 有效的減少測試時間. 這或許會為未來構造出更大量的測試用例提供良好基礎. -
5.4 基於知識庫構造測試用例
如何提高測試數據的針對性也是模糊測試技術未來發展必須解決的一個問題可以通過為模糊測試工具連接一個數據庫提高測試用例的針對性.假設這個數據庫中存儲着大量已知的攻擊模式,在構造測試用例時,通過從該數據庫調用能引起已知攻擊的測試數據並在后面加上隨機數據的方法來構造針對性強的測試用例. 也可以在該數據庫中存儲一些有用的資源,例如一些常見系統、數據庫和Web 應用的用戶名和密碼字典, 常用的腳本后門程序,服務器響應信息等,這些資源能有助於測試人員構造出能順利通過系統檢測的測試數據包, 也方便測試人員研究和發現應用程序的安全漏洞. -
5.5 提高代碼覆蓋率
在構造測試用例過程中無法估算代碼覆蓋率是模糊測試技術的重大缺陷之一.代碼覆蓋率是軟件測試中的一種度量, 描述程式中源代碼被測試的比例和程度. 代碼覆蓋率常常被拿來作為衡量測試用例好壞的指標, 所以提高代碼覆蓋率是提高模糊測試效率的一種有效方式. 同時, 如果在構建測試用例時不知道這些測試用例的代碼覆蓋率, 則很難判斷測試的完成情況, 更不清楚是否發現了軟件中的所有漏洞.可以通過引入遺傳算法達到提高代碼覆蓋率的目的,也可以在模糊測試工具中集成代碼覆蓋率計算工具,實現實時監測當前代碼覆蓋率的功能. -
5.6 更多平台的支持
目前, 幾乎所有的模糊測試工具都只能運行在桌面操作系統上, 而對於支持智能手機等嵌入式操作系統的模糊測試工具還需要進一步的研究.另外,大多的模糊測試工具還不具有跨平台的能力,大多只能測試單一操作系統的軟件漏洞.因此,研究具有跨平台,支持多種軟硬件平台的模糊測試工具非常有價值. -
5.7 模糊測試的智能化
不能發現鑒權繞過和后門等邏輯上的錯誤一直是模糊測試技術無法規避的一個重大缺點.可以研究在生成測試用例的過程中引入知識或一些人工智能算法,使得模糊測試工具具有學習的能力,從而在一定程度上具備發現邏輯漏洞的能力.模糊測試技術的另一個缺點是不能對漏洞進行准確定位,即通過模糊測試技術只能判斷出待測軟件中存在何種漏洞並不能准確的定位到程序源代碼中是哪一行引發了這個漏洞,可以研究通過結合動態二進制插裝或提高監視器的監測精度來克服這個問題. -
此外, 目前市場上的大多數模糊測試工具都需要借助其他工具來進行監控或測試評估,所以研究功能更為完善的測試工具也是模糊測試領域的一個重要方向. 這類測試工具應能自動完成文件或協議格式的解析並生成大量符合要求的測試用例,對用例執行情況進行實時監控, 方便地獲取用例執行信息,並能在發現漏洞時進行故障定位,完成測試結果的輸出.同時還要有高效的算法來協調各個功能模塊的執行,提升工具的運行效率.
總結
- 在這個專題中對模糊測試技術的研究成果進行了回顧和總結, 介紹了模糊測試技術的基本概念、理論基礎以及模糊測試技術的發展歷程,並展示了幾個模糊測試實際攻擊的實踐例子。也介紹講解了一些常見的Android攻擊方法與攻擊工具。
- 總體收獲很多,了解到了模糊測試這個新名詞,了解了模糊測試的整體攻擊流程,查看一些相關資料后知道模糊測試技術具有傳統漏洞挖掘技術無法比擬的優勢,被廣泛的應用, 是近年來軟件測試領域的
重要研究方向.總之,在未來的若干年中模糊測試技術仍將會是軟件測試領域的一個研究熱點,甚至可能延伸到硬件測試領域,該領域將會有大量的技術問題值得研究工作者開展進行一步的研究和探討.