基於模糊測試的漏洞挖掘及攻防技術

常見漏洞挖掘技術

  • 手工測試html

  • 補丁比對
    • 定義:一種經過對比補丁之間的差別來挖掘漏洞的技術。
    • 優勢:發現速度快
    • 缺點:已知漏洞
    • 常見工具:PatchDiff二、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信號會致使模糊測試沒法識別是否觸發內存破壞
  • 多階段安全漏洞:模糊測試對識別單個漏洞頗有用,但對小的漏洞鏈構成的漏洞則做用不大

黑盒測試與模糊測試

黑盒測試的主要做用:

黑盒測試法注重於測試軟件的功能需求,主要試圖發現下列幾類錯誤。java

  • 1.功能不正確或遺漏;
  • 2.界面錯誤;
  • 3.輸入和輸出錯誤;
  • 4.數據庫訪問錯誤;
  • 5.性能錯誤;
  • 6.初始化和終止錯誤等。
模糊測試

模糊測試(Fuzzing),是一種經過向目標系統提供非預期的輸入並監視異常結果來發現軟件漏洞的方法。
主要是經過輸入大量數據,發現程序中存在的問題。能夠經過使程序某些內容溢出出現異常,或者輸入的是程序規定的範圍內的數據結果出現異常,從而找出程序的bug。android

模糊測試技術的發展方向

模糊測試技術通過近20餘年的發展,已逐步成爲一種流行的被普遍應用的漏洞挖掘技術.可是,模糊測試技術仍然存在許多的侷限性.例如,經過模糊測試技術挖掘出的漏洞大多還是傳統的溢出類錯誤,對於後門、鑑權繞過等邏輯上的錯誤依然無能爲力.同時,模糊測試技術也不能準確的發現多條件觸發的漏洞. 更重要的是, 模糊測試技術不能保證畸形輸入數據可以覆蓋到全部的分支代碼, 這就使得即便經過模糊測試檢驗的軟件仍可能存在不被發現的漏洞.如何克服缺陷、提升漏洞挖掘的效率是模糊測試技術將來的研究熱點.模糊測試技術將來的研究熱點可能包括如下幾個方面.算法

  • 5.1 提升測試用例的經過率
    以網絡協議的模糊測試爲例,即便咱們經過模糊測試技術生成了大量的畸形測試數據,但這些測試數據中的絕大部分會被網絡協議的校驗機制所拒絕,這樣的測試效率是極低的. 因此咱們並不能用大量的純隨機數據來測試網絡協議,而是應該構建出經過率更高的測試用例, 例如, 能夠將模糊測試配置成使用已知有效數據、故意錯誤數據和隨機數據的組合,這樣既能夠提升測試用例的經過率也不會使測試用例過多的受測試人員的主觀影響. 再如,也能夠在隨機測試數據後面增添校驗位, 或者在瞭解待測網絡協議的數據包格式後構造出符合規定的測試用例,這些方法可能大幅度提升測試用例的經過率.
  • 5.2 協議格式自動化分析
    正如 5.1 小節所述,對文件、協議格式的深入理解能夠幫助測試人員構建出經過率很高的測試用例,但這繁瑣複雜的測前準備工做也給測試工具開發人員帶來很大的負擔, 能夠設想,即便針對一個簡單的非公開協議也須要花費編程人員大量的時間研究目標協議的工做規範, 更況且,待測試的網絡協議規範極可能是未經公開的. 這就指明瞭模糊測試技術將來的另外一個發展方向, 即實現文件、協議格式的自動化分析.
  • 5.3 引進並行和分佈式技術
    模糊測試技術最大的一個特色是能夠生成數量巨大的測試用例, 從而使對軟件進行全方位測試成爲可能. 但巨大的測試用例數量也帶來了執行效率低的缺點. 所以, 引進並行和分佈式技術, 有效的減小測試時間. 這或許會爲將來構造出更大量的測試用例提供良好基礎.
  • 5.4 基於知識庫構造測試用例
    如何提升測試數據的針對性也是模糊測試技術將來發展必須解決的一個問題能夠經過爲模糊測試工具鏈接一個數據庫提升測試用例的針對性.假設這個數據庫中存儲着大量已知的攻擊模式,在構造測試用例時,經過從該數據庫調用能引發已知攻擊的測試數據並在後面加上隨機數據的方法來構造針對性強的測試用例. 也能夠在該數據庫中存儲一些有用的資源,例如一些常見系統、數據庫和Web 應用的用戶名和密碼字典, 經常使用的腳本後門程序,服務器響應信息等,這些資源能有助於測試人員構造出能順利經過系統檢測的測試數據包, 也方便測試人員研究和發現應用程序的安全漏洞.
  • 5.5 提升代碼覆蓋率
    在構造測試用例過程當中沒法估算代碼覆蓋率是模糊測試技術的重大缺陷之一.代碼覆蓋率是軟件測試中的一種度量, 描述程式中源代碼被測試的比例和程度. 代碼覆蓋率經常被拿來做爲衡量測試用例好壞的指標, 因此提升代碼覆蓋率是提升模糊測試效率的一種有效方式. 同時, 若是在構建測試用例時不知道這些測試用例的代碼覆蓋率, 則很難判斷測試的完成狀況, 更不清楚是否發現了軟件中的全部漏洞.能夠經過引入遺傳算法達到提升代碼覆蓋率的目的,也能夠在模糊測試工具中集成代碼覆蓋率計算工具,實現實時監測當前代碼覆蓋率的功能.數據庫

  • 5.6 更多平臺的支持
    目前, 幾乎全部的模糊測試工具都只能運行在桌面操做系統上, 而對於支持智能手機等嵌入式操做系統的模糊測試工具還須要進一步的研究.另外,大多的模糊測試工具還不具備跨平臺的能力,大多隻能測試單一操做系統的軟件漏洞.所以,研究具備跨平臺,支持多種軟硬件平臺的模糊測試工具很是有價值.
  • 5.7 模糊測試的智能化
    不能發現鑑權繞過和後門等邏輯上的錯誤一直是模糊測試技術沒法規避的一個重大缺點.能夠研究在生成測試用例的過程當中引入知識或一些人工智能算法,使得模糊測試工具具備學習的能力,從而在必定程度上具有發現邏輯漏洞的能力.模糊測試技術的另外一個缺點是不能對漏洞進行準肯定位,即經過模糊測試技術只能判斷出待測軟件中存在何種漏洞並不能準確的定位到程序源代碼中是哪一行引起了這個漏洞,能夠研究經過結合動態二進制插裝或提升監視器的監測精度來克服這個問題.編程

  • 此外, 目前市場上的大多數模糊測試工具都須要藉助其餘工具來進行監控或測試評估,因此研究功能更爲完善的測試工具也是模糊測試領域的一個重要方向. 這類測試工具應能自動完成文件或協議格式的解析並生成大量符合要求的測試用例,對用例執行狀況進行實時監控, 方便地獲取用例執行信息,並能在發現漏洞時進行故障定位,完成測試結果的輸出.同時還要有高效的算法來協調各個功能模塊的執行,提高工具的運行效率.安全

總結

  • 在這個專題中對模糊測試技術的研究成果進行了回顧和總結, 介紹了模糊測試技術的基本概念、理論基礎以及模糊測試技術的發展歷程,並展現了幾個模糊測試實際攻擊的實踐例子。也介紹講解了一些常見的Android攻擊方法與攻擊工具。
  • 整體收穫不少,瞭解到了模糊測試這個新名詞,瞭解了模糊測試的總體攻擊流程,查看一些相關資料後知道模糊測試技術具備傳統漏洞挖掘技術沒法比擬的優點,被普遍的應用, 是近年來軟件測試領域的
    重要研究方向.總之,在將來的若干年中模糊測試技術仍將會是軟件測試領域的一個研究熱點,甚至可能延伸到硬件測試領域,該領域將會有大量的技術問題值得研究工做者開展進行一步的研究和探討.

參考

模糊測試:強制發掘安全漏洞的利器服務器

模糊測試技術研究微信

相關文章
相關標籤/搜索