自動化代碼審計的四大思路及簡單實現參考


思路一

簡單正則匹配危險函數,跟入函數看輸入變量是否可控。

優點

簡單,可用程序完成不少工作。

缺點

  • 誤報多,需要一個個確認輸入變量。
  • 不容易發現二次注入之類二次漏洞。

參考

  1. seay代碼審計工具
  2. 自己寫的小Demo

思路二

解析程序語法樹,分析危險函數調用關系

優點

  • 純靜態分析,可全由程序處理
  • 可發現漏洞類型全,誤報少

缺點

  • 實現難
  • 無法直接處理面向對象類型的代碼

參考

RIPS

這個rips已經做的很好了,所以還沒有自己去實現

思路三

將程序當作黑盒,外部通過工具查找輸入,做出各種fuzz。觀察並記錄黑盒所有操作,如web請求,sql執行記錄/錯誤記錄,文件系統變更情況,php代碼執行記錄。而后和fuzz變量做比對,找出對應結果(或者可以通過時間來找出對應),記下fuzz請求即為漏洞點。

優點

  • 誤報較少
  • 無人工

缺點

  • 需要匹配fuzz請求和結果正則(可能需要正則)
  • 需要實現各種記錄工具,較難
  • 如何記錄fuzz請求和相應結果對應關系??目前可以想到時間或正則,但各有缺點
  • 效率極低

參考

http://cnki.scstl.org/KCMS/detail/detail.aspx?filename=1015528099.nh&dbcode=CMFD&dbname=CMFD2015
這個思路是之前忽然想到的,但是還沒有實現,因為覺得效率會極低,沒想到知網搜到一個文章……

思路四

通過Hook PHP底層函數,獲得PHP執行時的如下信息:

  • 當前函數名稱
  • 當前文件名稱
  • 當前參數

當執行到危險函數時,跟蹤執行流,找到危險函數的參數來源,如果來源可控,且沒有過濾函數,那么認為是有漏洞

優點

  • 可以直接分析任何架構的PHP代碼
  • 誤報低

缺點

  • 需要人工執行程序的各個功能
  • 開發難度高,需開發PHP擴展,目前的幾個有關擴展幾乎都存在問題

參考

最近寫了這個的Demo,不過還沒有完全完成,有興趣的可以跟我一起看看。

目前完成了函數棧追述,函數參數可控定位,但是還有一些小問題沒有解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM