0×01 簡介php
工欲善其事,必先利其器。mysql
在源代碼的靜態安全審計中,使用自動化工具代替人工漏洞挖掘,能夠顯著提升審計工做的效率。學會利用自動化代碼審計工具,是每個代碼審計人員必備的能力。在學習PHP源代碼審計的過程當中,本人蒐集使用了多款自動化工具。本文將簡要介紹其中三款比較實用的工具:RIPS、VCG、Fortify SCA。web
RIPS是一款開源的,具備較強漏洞挖掘能力的自動化代碼審計工具。它使用PHP語言編寫的,用於靜態審計PHP代碼的安全性。sql
VCG(VisualCodeGrepper),是一款支持C/C++、C#、VB、PHP、Java和PL/SQL的免費代碼安全審計工具。它是一款基於字典的檢測工具,功能簡潔,易於使用。數據庫
Fortify SCA(Static Code Analyzer)是由Fortify軟件公司(已被惠普收購)開發的一款商業版源代碼審計工具。它使用獨特的數據流分析技術,跨層跨語言地分析代碼的漏洞產生,目前支持全部的主流開發語言。瀏覽器
本文結合一個應用實例的分析,介紹三款工具的使用方法以及特性。安全
0×02 RIPS服務器
RIPS的主要功能特色以下:cookie
1) 可以檢測XSS、SQL注入、文件泄露、本地/遠程文件包含、遠程命令執行以及更多種類型的漏洞。ide
2) 有5種級別選項用於顯示以及輔助調試掃描結果。
3) 標記存在漏洞的代碼行。
4) 對變量高亮顯示。
5) 在用戶定義函數上懸停光標能夠顯示函數調用。
6) 在函數定義和調用之間靈活跳轉。
7) 詳細列出全部用戶定義函數(包括定義和調用)、全部程序入口點(用戶輸入)和全部掃描過文件(包括include的文件)。
8) 以可視化的圖表展現源代碼文件、包含文件、函數及其調用。
9) 僅用幾個鼠標點擊就可使用CURL建立針對檢測到漏洞的EXP實例。
10) 詳細列出每一個漏洞的描述、舉例、PoC、補丁和安全函數。
11) 7種不一樣的語法高亮顯示模式。
12) 使用自頂向下或者自底向上的方式追溯顯示掃描結果。
13) 一個支持PHP的本地服務器和瀏覽器便可知足使用需求。
14) 正則搜索功能。
最新版本的RIPS是0.55,下載連接以下:
https://sourceforge.net/projects/rips-scanner/
解壓下載的zip文件到Web服務器網站目錄下便可。在瀏覽器中輸入Web服務器地址和對應目錄,RIPS工具的用戶使用界面以下:
最上方是全部功能按鈕菜單。
掃描任務結束後,菜單中會出現4個新的按鈕,分別用來顯示/隱藏4個掃描結果窗口:被掃描文件、用戶輸入點、掃描狀態信息和被掃描函數。
如今以一個簡單的實例來講明RIPS的使用方法,下載連接以下:
http://jsdx.down.chinaz.com/201603/webjoker_v2.2.0.zip
該PHP應用程序用來統計某網站的用戶訪問狀況,登陸到程序後臺能夠查看詳細訪問信息。將下載後的程序解壓,在RIPS的「path/file」選項中填入程序解壓目錄,其它選項保持默認,點擊「scan」按鈕開始掃描任務。
掃描結束後,點擊window菜單的4個按鈕能夠顯示任務的詳細狀況。
正文部分顯示掃描出漏洞的詳細狀況,點擊「hide all」按鈕能夠查看/隱藏每一個文件的詳細漏洞結果列表。
讓咱們來看其中某一個漏洞詳情,init.php源代碼中存在SQL注入漏洞。
未過濾的$procookie參數直接被cheakcookie()函數調用。將光標懸停在cheakcookie()函數上方,便可顯示cheakcookie()函數是如何定義的。
cheakcookie()函數在main.php文件中被定義,能夠看出未被過濾的參數直接帶入SQL語句被執行。
在漏洞的詳細狀況中顯示$procookie參數由$_COOKIE[count_admin]傳遞,從init.php源代碼的上下文可知,該參數是爲了後臺登陸的cookie值校驗。當count_admin值沒法匹配數據庫中的數據時,校驗失敗。
將POST包中Cookie中的count_admin改成「’ or 1=1 #」,便可繞過cookie校驗,直接進入後臺。
0×03 VCG
VCG是一個基於字典的自動化源代碼掃描工具,能夠由用戶自定義須要掃描的數據。它能夠對源代碼中全部可能存在風險的函數和文本作一個快速的定位。
VCG的下載連接以下:
http://sourceforge.net/projects/visualcodegrepp/
雙擊下載的msi文件進行安裝便可。
在Settings->Options->ConfigFiles選項中能夠對每種語言的掃描配置文件進行編輯。
點擊Settings選項,選擇掃描的目標語言類型。點擊File->New Target Directory選項,選擇須要掃描的源代碼文件存放目錄,咱們選擇上文提到的應用實例存放目錄。點擊Scan->Full Scan選項,掃描開始。
掃描結果以圖標的形式對被掃描文件的數據作一個統計,這個功能有點雞肋。咱們重點關注Results和Summary Table兩個面板顯示的內容。
Results面板顯示全部存在安全風險的源碼,右鍵點擊能夠對結果進行排序過濾。
Summary Table面板是對Results面板內容的總結展現。
VCG是經過匹配字典的方式查找可能存在風險的源代碼片斷。它的掃描原理較爲簡單,跟RIPS側重點不一樣,並不深度發掘應用漏洞。VCG能夠做爲一個快速定位源代碼風險函數的輔助工具使用。
0×04 Fortify SCA
Fortify SCA是一款商業軟件,價格較爲昂貴,所以我只找到了一個早期的版本進行試用。由於是商業軟件,它有詳細的使用文檔,查閱很是方便。它支持一些IDE的插件功能,在安裝的時候會有選項。
Fortify SCA的代碼審計功能依賴於它的規則庫文件,咱們能夠下載更新的規則庫,而後放置在安裝目錄下相應的位置。bin文件放置在安裝目錄下Core\config\rules文件夾,xml文件放置在Core\config\ExternalMetadata文件夾(若是該文件夾沒有則新建一個)。
打開AuditWorkbench,點擊Start New Project->Advanced Scan選項就能夠快速開始一個審計任務。選擇須要審計的應用程序根目錄,在Additional Options選項中選擇使用的規則庫,在Audit Guide提出的四個問題中選擇對應的選項,點擊Run Scan便可。
審計的結果由5個面板來呈現。
咱們來看跟RIPS審計結果一樣的SQL注入問題。點擊左側問題,源代碼面板自動定位到出現問題的源代碼行。
分析跟蹤面板顯示了詳細的數據走向。從COOKIE讀入->賦值給變量$procookie->帶入cheakCookie()函數->賦值給變量$sql->帶入mysqli_query()函數執行。
左側每個圖標的含義在使用手冊上能夠查到。點擊其中每一行,自動定位到對應的源代碼行。同時在問題審計面板的Diagram中,有更爲形象的數據流向圖,直觀展現了漏洞產生的緣由。
審計面板的其餘標籤詳細說明了漏洞信息,相對於RIPS這種開源軟件,Fortify SCA審計結果展現更爲詳細。Tools->Generate Report功能還能夠根據用戶的需求生成審計結果的報告。
0×05 總結
VCG與其餘兩款工具不一樣,它是一個簡潔的風險函數掃描定位工具,基於字典實現掃描功能。而RIPS和Fortify SCA則是靜態深度分析源代碼漏洞的利器,它們使用各自的技術對應用程序執行過程進行了追蹤分析,作了深層次的漏洞挖掘工做。RIPS易於部署和使用,能夠做爲簡單應用功能的自動化審計分析工具。而Fortify SCA功能更爲強大,能夠勝任較爲複雜的應用自動化分析。在實際審計工做中能夠結合使用兩種工具,取長補短。
自動化的靜態代碼審計工具能夠節省代碼審計的人力成本,是提升代碼審計效率的重要手段。然而須要注意的是,自動化工具並不是是徹底智能的,跟全部的漏洞掃描工具同樣,誤報率的存在仍然是一個現實的問題。所以,報表中顯示的漏洞須要審計人員進一步確認是否真的存在。此外,自動化工具還有一個很大的侷限性:它僅可以對常見的Web應用漏洞類型進行挖掘,對於Web 2.0時代興起的業務邏輯漏洞挖掘能夠說是束手無力。因此,對於有經驗的代碼審計人員來講,審計工具起到的僅僅是輔助做用,他們會在利用工具的基礎上結合本身經驗挖掘出更深層次的漏洞。
本文來自來自FreeBuf***與極客(FreeBuf.COM)