三款自動化代碼審計工具
0×01 簡介
工欲善其事,必先利其器。
在源代碼的靜态安全審計中,使用自動化工具代替人工漏洞挖掘,可以顯著提高審計工作的效率。學會利用自動化代碼審計工具,是每一個代碼審計人員必備的能力。在學習PHP源代碼審計的過程中,本人搜集使用了多款自動化工具。本文将簡要介紹其中三款比較實用的工具:RIPS、VCG、Fortify SCA。
RIPS是一款開源的,具有較強漏洞挖掘能力的自動化代碼審計工具。它使用PHP語言編寫的,用于靜态審計PHP代碼的安全性。
VCG(VisualCodeGrepper),是一款支援C/C++、C#、VB、PHP、Java和PL/SQL的免費代碼安全審計工具。它是一款基于字典的檢測工具,功能簡潔,易于使用。
Fortify SCA(Static Code Analyzer)是由Fortify軟體公司(已被惠普收購)開發的一款商業版源代碼審計工具。它使用獨特的資料流分析技術,跨層跨語言地分析代碼的漏洞産生,目前支援所有的主流開發語言。
本文結合一個應用執行個體的分析,介紹三款工具的使用方法以及特性。
0×02 RIPS
RIPS的主要功能特點如下:
1) 能夠檢測XSS、SQL注入、檔案洩露、本地/遠端檔案包含、遠端指令執行以及更多種類型的漏洞。
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
轉載于:https://www.cnblogs.com/staffyoung/p/7169165.html