您好,登錄后才能下訂單哦!
這篇文章給大家介紹PHP開源白盒審計工具怎么用,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
經(jīng)過一番調(diào)研,本文篩選了近三年來一直在持續(xù)更新的 13 款針對 PHP 的白盒審計工具進行分析。本文主要介紹這些白盒審計框架的原理并簡單分析下它們的規(guī)則列表,未對具體的挖洞效果進行評估。這主要考慮以下兩個原因:一方面,不同白盒審計框架的側(cè)重點是不一致的,有的是為了挖洞設(shè)計的,有的實際產(chǎn)出必須經(jīng)過人工復(fù)核;再者,即使都是以挖洞為目標(biāo)設(shè)計的,有的是針對特定的框架,有的又是可以通用的。所以,大家如果感興趣的話,可以自行選擇相應(yīng)的框架進行測試。
目前,主流的 PHP 開源白盒審計工具在設(shè)計思路上大都是依據(jù)敏感函數(shù)的參數(shù)部分/全部來自未經(jīng)安全函數(shù)處理的外部輸入 這一經(jīng)驗。最終落實到具體的實現(xiàn)上又可以劃分成以下兩大類:
基于文本特征:也就是我們常說的正則方式,基于人工代碼審計時發(fā)現(xiàn)漏洞點的源代碼規(guī)律,從而歸納出相應(yīng)的正則表達式,然后基于此正則表達式來查找此類漏洞。基于文本特征的白盒審計工具優(yōu)點在于審計速度相對較快,且規(guī)則維護起來成本較低,但是缺點又在于準(zhǔn)確率相對較低,誤報率也比較高。
基于靜態(tài)分析:即借助傳統(tǒng)靜態(tài)分析技術(shù)來進行白盒審計。常見的技術(shù)主要有數(shù)據(jù)流分析、污點傳播和控制流分析等。靜態(tài)分析的方式能夠更加準(zhǔn)確的判斷外部輸入是否經(jīng)過安全函數(shù)的處理,這點是基于文本特征的方式很難實現(xiàn)的。此外,基于靜態(tài)分析的方式在判斷一個變量是否部分/全部來自外部輸入的時候也更有優(yōu)勢,尤其在針對框架進行審計的時候。
但是,有好的一面就有壞的一面,基于靜態(tài)分析的問題在于:
1)時間開銷大,做一次完整的分析所需的時間遠大于基于文本特征的方式;
2)適配成本高,針對不同的目標(biāo),需要適配相應(yīng)的解析器來生成所需的 AST 樹和 CFG 等信息,此外,檢測規(guī)則的適配也是一個相對較重的成本。
如下圖所示,在本文中所介紹的 13 款白盒審計工具安全中,基于文本特征的審計工具有 7 款,基于靜態(tài)分析的審計工具有 6 款。
Github: https://github.com/wireghoul/graudit Language: Shell Last commit on 2019.11.12
graudit 從 09年在 Github 開源到現(xiàn)在為止已經(jīng)有 10 年左右的歷史,并且仍在不斷的更新中。graudit 全稱是 grep rough audit,顧名思義其主要是借助 Linux 內(nèi)建的 grep 命令來實現(xiàn)白盒審計,其核心代碼只有一個 200 行不到的 bash 腳本。graudit 支持的語言為 ASP, C, .NET, Java, JavaScript, Perl, PHP, Python, Ruby等。
graudit 根據(jù)漏洞挖掘?qū)ο蟮拈_發(fā)語言選擇相應(yīng)的規(guī)則庫,然后借助 grep 在源代碼中快速定位,來滿足指定規(guī)則的可疑位置,接下來由安全人員對這些可疑位置進行人工復(fù)核,看是否真實存在漏洞。
同時,graudit 經(jīng)過多年的使用,不斷更新,已經(jīng)提供了十分全面的漏洞規(guī)則庫(https://github.com/wireghoul/graudit/tree/master/signatures),其提供了 24 個涵蓋不同的語言/漏洞類型的數(shù)據(jù)庫,總計 1256 條規(guī)則。規(guī)則主要為針對危險函數(shù)及其參數(shù)的檢查。值得一提的是,graudit 在 misc 目錄里面提供了很多很有用的小腳本。
$ ls signatures/*.db|xargs -I {} sh -c 'echo "{}`cat {}|grep -vE \"^$|^#\"|wc -l`"' signatures/actionscript.db 10 signatures/android.db 49 signatures/asp.db 53 signatures/c.db 280 signatures/cobol.db 8 signatures/default.db 12 signatures/dotnet.db 134 signatures/exec.db 17 signatures/ios.db 39 signatures/java.db 102 signatures/js.db 8 signatures/perl.db 33 signatures/php.db 160 signatures/python.db 67 signatures/rough.db 43 signatures/ruby.db 16 signatures/seafruit.db 11 signatures/secrets-b64.db 1 signatures/secrets.db 8 signatures/spsqli.db 4 signatures/sql.db 74 signatures/strings.db 64 signatures/xss.db 13
Github: https://github.com/nccgroup/VCG Language: Visual Basic .NET Last commit on 2019.11.06
VisualCodeGrepper 簡稱 VCG ,它是基于 VB 開發(fā)的一款 window 下的白盒審計工具。相對于其他白盒審計工具,VCG 還會檢查代碼注釋中是否存在諸如 "ToDo", "FixMe", "Kludge" 此類的語句,從而提醒安全人員此處有未完成代碼,可能存在安全問題。VCG 支持的語言為 C/C++, Java, C#, VB, PL/SQL, COBOL。
VCG 通過正則表達式檢查每一行代碼是否滿足預(yù)先設(shè)定的漏洞規(guī)則,如若滿足則提醒審計人員。不同的是,其規(guī)則是動態(tài)生成的,即 VCG 提取代碼中的變量名等信息來動態(tài)生成針對該段代碼的漏洞規(guī)則。
VCG 的漏洞規(guī)則位于 VisualCodeGrepper/modCheck.vb 文件中,每種語言有一個單獨的文件,不同語言之間還有一些通用的檢測函數(shù)。以 PHP 為例,VCG 會檢測 10 種不同的漏洞類型。
CheckSQLInjection:檢測 SQL 注入漏洞;
CheckXSS:檢測 XSS 漏洞;
CheckLogDisplay:檢測寫入日志前是否對日志內(nèi)容進行轉(zhuǎn)義;
CheckRandomisation:檢測隨機數(shù)的生成是否足夠安全;
CheckFileValidation:檢測是否直接使用 $_FILE 數(shù)組的值來進行條件判斷;
CheckFileInclusion: 檢測文件包含的路徑中是否存在用戶可控的參數(shù);
CheckExecutable: 檢測命令執(zhí)行函數(shù)的參數(shù)是否經(jīng)過轉(zhuǎn)義;
CheckBackTick: 檢測反引號的參數(shù)是否存在用戶可控部分;
CheckRegisterGlobals: 檢測全局變量的修改是否用戶可控;
CheckParseStr: 檢測 parse_str 的參數(shù)是否用戶可控。
Github: https://github.com/alpha1e0/kiwi Language: Python2 Last commit on 2019.08.12
kiwi 是一款基于 Python 開發(fā)的白盒審計框架。作者在設(shè)計之初更多將其定義為一個代碼搜索工具,而不是代碼審計工具。其主要是為了幫助安全人員更快的定位可能的漏洞點,從而進行下一步的人工審計。Kiwi 的框架本身跟檢測規(guī)則是完全分離的,安全人員可以根據(jù)自己需求編寫具體的檢測規(guī)則。kiwi 理論上可以支持大部分語言,官方提供了 PHP、Python 兩種語言的檢測規(guī)則。
Kiwi 會遍歷源碼的所有文件,根據(jù)文件的后綴選擇相應(yīng)的檢測規(guī)則,然后通過正則匹配的方式定位可能的漏洞點。在找到漏洞點之后,kiwi 不會直接返回,而是會調(diào)用預(yù)設(shè)的 evaluate 函數(shù)進行進一步檢測,檢測通過后才會報告給安全人員。
kiwi 官方只提供了 PHP 和 Python 兩種語言的檢測規(guī)則,位于 kiwi_data/features 目錄。其中 Python 涵蓋 5 種不同的漏洞類型,PHP 涵蓋 10 種不同的漏洞類型。
Github: https://github.com/webarx-security/wpbullet Language: Python3 Last commit on 2019.06.04
wpBullet 是一款專為 WordPress 插件/主題設(shè)計的白盒審計工具。除了支持對本地源代碼的審計之外,wpBullet 還支持根據(jù)傳入的插件/主題 URL 自動下載源碼來審計。
wpBullet 遍歷整個源碼的所有文件,針對 .php 后綴的文件進行分析。針對每個 PHP 文件,wpBullet 主要進行兩個分析:
1)wpBullet 通過正則提取 PHP 文件中有關(guān)通過 add_action 函數(shù)注冊的 admin_action (admin_action_xxx)、ajax hooks (wp_ajax_xxx) 和 admin 初始化 (admin_init) 的信息,并分別存入相應(yīng)的全局變量以便后續(xù)展示給安全人員;
2)wpBullet 根據(jù)預(yù)定的檢測規(guī)則分析該 PHP 文件是否存在漏洞。wpBullet 首先通過正則提取該文件中所有用戶可控的變量,然后基于這些變量動態(tài)生成正則表達式,繼而檢測這些變量是否未經(jīng)過檢測規(guī)則中的安全函數(shù)處理而直接傳入檢測規(guī)則中的危險函數(shù)。如若是,則生成漏洞報告。
wpBullet 的檢測規(guī)則位于 Modules 目錄中。針對每種漏洞類型,檢測規(guī)則含有造成此類漏洞的危險函數(shù)和針對此類漏洞的安全函數(shù)列表。wpBullet 默認提供一個通用的漏洞檢測正則規(guī)則動態(tài)生成函數(shù),但安全人員可以根據(jù)自己的實際需求修改該函數(shù)。wpBullet 官方提供針對 WordPress 框架的 10 種不同漏洞類型的檢測規(guī)則。
Github: https://github.com/frizb/SourceCodeSniffer Language: Python2 Last commit on 2018.06.14
正如作者所說的,SourceCodeSniffer 是一款乞丐版白盒審計工具,整體實現(xiàn)上相對比較簡陋,也差不多2年多沒有更新了。
SourceCodeSniffer 通過正則的方式檢測源代碼中是否存在危險函數(shù),以此來判斷是否存在漏洞。并未考慮該危險函數(shù)的參數(shù)是否為用戶可控輸入。
SourceCodeSniffer 的檢測規(guī)則相對較少,但是對于每類安全漏洞都提供了簡略的介紹和對應(yīng)的 CWE 信息。其支持 7 種不同的語言,總計 52 條規(guī)則。
$ ls *.ini|xargs -I {} sh -c 'echo "{}`cat {}|grep -E \"^Regex\"|wc -l`"' ASP.ini 6 C.ini 13 CSharp.ini 17 Custom.ini 1 Default.ini 1 Java.ini 6 NodeJs.ini 3 PHP.ini 5 VBScript.ini 1
Github: https://github.com/chrisallenlane/drek Language: JavaScript Last commit on 2017.06.29
drek 是一款基于 JavaScript 開發(fā)的白盒審計工具,它的目標(biāo)是實現(xiàn)類似 grep 的功能,但是其輸出格式為 HTML。
drek 會遍歷源碼的所有文件,然后通過正則檢測其中是否存在危險函數(shù),以此來判斷該文件是否存在漏洞,并未考慮具體的參數(shù)是否可控等此類問題。
與其他工具不同的是,drek 的檢測規(guī)則額外存放在另外一個 drek-signaturs倉庫https://github.com/chrisallenlane/drek-signatures。在針對主流語言(PHP、C、JAVA、JavaScript、.NET)的檢測規(guī)則之外,drek-signatures 還提供針對不同框架(WordPress、Eloquent ORM)的檢測規(guī)則。但是檢測規(guī)則基本只提供了危險函數(shù)名,而未進行更多的限定條件,且最近的更新在 3 年前。
Github: https://github.com/foospidy/GrepBugs Language: Python2 Last commit on 2017.04.08
GrepBugs 也是一款基于 Python 開發(fā)的比較老的白盒審計框架。類似 graudit,GrepBugs 是對 grep 的 Python 版封裝。GrepBugs 除了支持對本地源代碼的安全掃描之外,還支持通過 Github API 對 Github 上的倉庫源代碼進行掃描。
GrepBugs 會遍歷源代碼,借助 cloc 命令判斷文件開發(fā)語言,然后根據(jù)語言選擇相應(yīng)檢測漏洞的正則表達式,最后調(diào)用 grep 命令檢測文件中是否存在滿足正則的語言,從而以此判斷該文件是否存在漏洞。
GrepBugs 提供的檢測規(guī)則(https://grepbugs.com/rules)涵蓋 16 種不同的語言,總計 179 條不同的規(guī)則。
{'ASP': 6, 'ASP.Net': 10, 'C': 24, 'C#': 5, 'C++': 18, 'ColdFusion': 12, 'ERB': 1, 'HTML': 2, 'JSP': 12, 'Java': 15, 'Javascript': 12, 'Objective C': 7, 'PHP': 37, 'Python': 7, 'Ruby': 10, 'Visual Basic': 2}
由于篇幅的原因
今天只為大家介紹了基于文本特征的代碼審計工具
關(guān)于PHP開源白盒審計工具怎么用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。