真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP如何進行開源白盒審計工具初探

本篇文章給大家分享的是有關PHP如何進行開源白盒審計工具初探,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)主營清原網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,app軟件開發(fā)公司,清原h(huán)5小程序開發(fā)搭建,清原網(wǎng)站營銷推廣歡迎清原等地區(qū)企業(yè)咨詢

上期小闌針對基于文本特征的 PHP 開源白盒審計工具進行了初步的介紹。本期針對基于靜態(tài)分析的 PHP 開源白盒審計工具進行初步探索。

基于靜態(tài)分析:即借助傳統(tǒng)靜態(tài)分析技術來進行白盒審計。常見的技術主要有數(shù)據(jù)流分析、污點傳播和控制流分析等。靜態(tài)分析的方式能夠更加準確的判斷外部輸入是否經(jīng)過安全函數(shù)的處理,這點是基于文本特征的方式很難實現(xiàn)的。此外,基于靜態(tài)分析的方式在判斷一個變量是否部分/全部來自外部輸入的時候也更有優(yōu)勢,尤其在針對框架進行審計的時候。但是,有好的一面就有壞的一面,基于靜態(tài)分析的問題在于:

1)時間開銷大,做一次完整的分析所需的時間遠大于基于文本特征的方式;

2)適配成本高,針對不同的目標,需要適配相應的解析器來生成所需的 AST 樹和 CFG 等信息,此外,檢測規(guī)則的適配也是一個相對較重的成本。

基于靜態(tài)分析

Cobra 

Github: https://github.com/WhaleShark-Team/cobra

Language: Python2

Last commit on 2019.08.23

2016 年開源的白盒審計工具 Cobra 相信很多人都曾聽說過。迄今為止,Cobra 已經(jīng)在 Github 上收獲 2.1k 的 star,也是這次分析的開源白盒審計工具中 star 數(shù)最多的項目。Cobra 支持直接通過命令行的方式進行白盒審計,也支持啟動一個本地 WEB 服務,然后通過 WEB 界面或者 API 交互的方式控制 cobra 對源碼進行白盒審計和查看報告。Cobra 支持 PHP、Java、Python 等開發(fā)語言,并支持數(shù)十種類型文件,還支持對 WEB 框架的識別,具體列表如下:

開發(fā)語言

PHP、Java、Python、JSP、C、Ruby、Perl、Lua、Go、Swift、C++、C#、Header、Objective-C、Scale、Ceylon、Kotlin、Shell、Bat、JavaScript、HTML、CSS

文件

Image、Font、Conf、CMake、SQL、Compression、Executable、Log、Text、Office、Media、Certificate、Source、Thumb、Git

框架

WordPress、Joomla、Drupal、CodeIgniter、ThinkPHP、Laravel、Kohana、Yii、Symfony、Phalcon、Slim、CakePHP、Django、Flask、Sprin

Cobra 具體工作原理官方文檔已經(jīng)介紹的很詳細,引用如下:

對于一些特征較為明顯的可以使用正則規(guī)則來直接進行匹配出,比如硬編碼密碼、錯誤的配置等。 對于OWASP Top 10的漏洞,Cobra通過預先梳理能造成危害的函數(shù),并定位代碼中所有出現(xiàn)該危害函數(shù)的地方,繼而基于 Lex (Lexical Analyzer Generator, 詞法分析生成器)和 Yacc (Yet Another Compiler-Compiler, 編譯器代碼生成器)將對應源代碼解析為 AST (Abstract Syntax Tree, 抽象語法樹),分析危害函數(shù)的入?yún)⑹欠窨煽貋砼袛嗍欠翊嬖诼┒矗壳皟H接入了PHP-AST,其它語言AST接入中)。

> 引自 http://cobra.feei.cn/

Cobra 的檢測規(guī)則主要分為依賴檢查規(guī)則和代碼安全掃描規(guī)則。依賴檢查只支持 Python、Java 和 NodeJS 三種主要語言。主要為檢查引用的第三方庫的版本是否滿足相應語言配置文件(requirements.txt、pom.xml、package.json)中規(guī)定的版本要求。Cobra 共提供 95 條代碼安全掃描規(guī)則,具體如下:

php: 57          java: 8          *: 3             jsp: 2           conf: 2

certificate: 1   source: 1        lua: 1           log: 1           thumb: 1

Cobra-W 

Github: https://github.com/LoRexxar/Cobra-W

Language: Python3

Last commit on 2020.01.17

Cobra-W 是基于 Cobra 2.0 進一步優(yōu)化來提高發(fā)現(xiàn)漏洞的準確率以及精度的白盒審計工具。兩者的工作原理基本相同,其不同之處主要體現(xiàn)在:

深度重寫AST,大幅度減少漏洞誤報率。

提供更易于從代碼層面定制審計思路的規(guī)則書寫方式,更易于白帽子使用,易于拓展。

底層 api 重寫,支持 windows、linux 等多平臺。

多層語義解析、函數(shù)回溯,secret機制,新增多種機制應用于語義分析。

新增 javascript 語義分析,用于掃描包含js相關代碼。

Cobra-W 不僅僅對檢測規(guī)則的格式進行重寫,還精簡優(yōu)化了已有的檢測規(guī)則。Cobra-W 官方提供了涵蓋 12 種不同漏洞,共 17 條檢測規(guī)則。

Reflected XSS: 2

SSRF: 3

SQLI: 3

RFI: 1

Xml injection: 1

RCE: 2

LDAPI: 1

Information Disclosure: 1

URL Redirector Abuse: 1

variable shadowing: 1

unserialize vulerablity: 1

phpcs-security-audit 

Github: https://github.com/FloeDesignTechnologies/phpcs-security-audit

Language: PHP

Last commit on 2019.08.06

phpcs-security-audit是另一款白盒審計框架,它是基于PHP_CodeSniffer(https://github.com/squizlabs/PHP_CodeSniffer) 開發(fā)的。PHP_CodeSniffer 是一個代碼風格檢測工具,主要包含兩類腳本:1)根據(jù)預定義的一系列代碼規(guī)范來檢測不符合規(guī)范的代碼,并發(fā)出警告或報錯的 phpcs 腳本;2)自動修正代碼格式上不符合規(guī)范的部分 phpcbf 腳本。準確來講phpcs-security-audit 并不能稱之為一個完整的白盒審計框架,它只是提供了一些能夠檢測代碼中潛在安全漏洞的代碼規(guī)范的規(guī)則集。

phpcs_security-audit 檢測漏洞的核心在于 phpcs 腳本。它預先定義好能夠檢測潛在安全漏洞的代碼規(guī)范,然后借助 phpcs 檢測源碼中是否有不符合該規(guī)范的代碼,以此來判斷潛在的漏洞點。其中,phpcs 通過通過Token化 PHP、JavaScript 和 CSS 文件來檢測該代碼是否違反代碼規(guī)范。

phpcs_security-audit 的檢測規(guī)則主要分為兩類:1)通用型檢測規(guī)則,主要包含 BadFunctions 目錄中的 16 種和 Misc 目錄中的 2 種,總計 18 種不同漏洞的檢測規(guī)則;2)針對不同框架的檢測規(guī)則,其提供了 Drupal7、Drupal8 和 Symfony2 三種框架的檢測規(guī)則。

progpilot 

Github: https://github.com/designsecurity/progpilot

Language: PHP

Last commit on 2019.06.02

progpilot 是一款使用 PHP 開發(fā)的針對 PHP 的白盒審計框架,基于 PHP-CFG(https://github.com/ircmaxell/php-cfg/)來實現(xiàn)控制流圖 (CFG) 的生成,同時又基于 PHP-Parser(https://github.com/nikic/php-parser) 來實現(xiàn)抽象語法書 ( AST 樹) 的生成。

progpilot 在 CFG 和 AST 的基礎上做進一步的漏洞分析。progpilot 借助生成的 CFG 圖檢查指定函數(shù)之間執(zhí)行順序是否符合預定義的規(guī)則。progpilot 還會檢查指定函數(shù)的參數(shù)是否滿足規(guī)則。progpilot 支持以下四種方式來檢測漏洞:

sources:在分析過程中,將 sources.json 中指定的函數(shù)參數(shù)作為污點進行分析;

sinks:在 sinks.json 中指明危險函數(shù)及其可能導致的漏洞類型

sanitizers:在sanitizers.json中指明防御特定漏洞安全函數(shù)及其用法。此處,安全函數(shù)會修改參數(shù)的值,比如轉(zhuǎn)義;

validators:在validators.json中指明防御特定漏洞的安全函數(shù)及其用法。此處,安全函數(shù)不會修改污點的值。

progpilot 的檢測規(guī)則位于 package/src/uptodate_data。其提供了 PHP 和 JavaScript 的通用檢測規(guī)則。對于 PHP 而言,progpilot 還提供CodeIgniter,PrestaShop,SuiteCRM,SymFony,WordPress 這五個框架的定制化檢測規(guī)則。

pixy   

Github: https://github.com/oliverklee/pixy

Language: Java

Last commit on 2018.01.24

pixy 是一款使用 Java 開發(fā)的針對 PHP 的白盒審計框架。本文中介紹的 prixy 是 Oliver Klee 開發(fā)的,其原作者為 Jenad Jovanonic。當時為了開發(fā) pixy,Oliver Klee 還專門開源了另外一個項目PhpParser (https://github.com/oliverklee/phpparser)來在 Java 中實現(xiàn)對 PHP 程序的解析。

pixy 借助 PhpParser 實現(xiàn)對源代碼的解析,然后基于解析結果生成相應的 AST 樹和 CFG,接著在此基礎上做污點分析,檢查敏感函數(shù)的參數(shù)是否可控。

pixy 的檢測規(guī)則主要為 ./config/model_*.ini 文件。每個 ini 文件中可以設置 5 種類型的函數(shù)/參數(shù),如安全函數(shù)、依賴函數(shù)和敏感函數(shù)等。

RIPS 

Github: https://github.com/ripsscanner/rips

Language: PHP

Last commit on 2016.05.22

作為一個很早就開始使用語法分析來進行漏洞挖掘的白盒審計工具 -- RIPS,相信大家對他都不陌生。即使它現(xiàn)在已商業(yè)化運作,最新的版本只有SourceForge (https://sourceforge.net/projects/rips-scanner)上 2017 年更新的 v0.55,但是這并不妨礙我們對其代碼理念的學習,梅子酒師傅的三篇 RIPS 分析文章十分值得一讀。商業(yè)化的 RIPS 提供免費試用,感興趣的朋友可以前去體驗一下。

RIPS 使用 PHP Zend 引擎語法分析器獲取源碼 Token 流信息,然后基于這個 Token 流信息生成相應的 AST 樹和 CFG。然后,RIPS 在此基礎上定位敏感函數(shù),然后對敏感函數(shù)的參數(shù)進行回溯,檢查其是否為用戶可控輸入,以此來判斷是否有漏洞。RIPS 在變量回溯過程中會檢查該變量是否進行安全函數(shù)的處理來減少誤報。

RIPS 沒有單獨的檢測規(guī)則文件,其檢測規(guī)則主要集成在配置文件中,位于 config 目錄下。

info.php:定義一些額外需要關注的函數(shù);

securing.php :定義安全處理函數(shù);

sink.php:定義敏感函數(shù)和相應的安全函數(shù);

sources.php :定義用戶可能可控的輸出點函數(shù)/變量;

token.php:定義分析過程中需要重點關注與敏感函數(shù)相關的 Token 信息流。

十幾款白盒審計工具看下來給我的感覺是自動化代碼審計仍然是一個任重而道遠的活計。正如開頭的所說的,目前主流的 PHP 白盒審計工具都是基于同一條經(jīng)驗。這個經(jīng)驗可以簡單拆分成三個子問題:

  1. 定位敏感函數(shù);

  2. 參數(shù)部分/全部來自外部輸入;

  3. 外部輸入在傳遞過程中是否經(jīng)過安全函數(shù)處理。

針對第一個問題,現(xiàn)如今的方案基本上可以解決了。針對第二個問題,通過靜態(tài)分析的方式可以基本解決大部分的情況,但仍然存在較大的改進空間,比如針對源碼更加全面深入的解析、借助數(shù)據(jù)庫等的二次輸入等等;第三個問題現(xiàn)如今依然是一個重災區(qū),基本上還停留在傳遞鏈上是否存在安全函數(shù)的判斷,而未考慮多次編碼導致的繞過問題,安全函數(shù)可以被繞過等問題。再者,近幾年來我們設計白盒審計工具的原理基本上都是一致,是否存在現(xiàn)如今技術條件下其他更好的設計方案?這點還是有待商榷的。有趣的是,同樣是漏洞挖掘,二進制方面的不管是工業(yè)界還是學術界都有相當一部分人在研究,但是回歸 WEB 這邊,主力就都是工業(yè)界的人(手動狗頭)。

以上就是PHP如何進行開源白盒審計工具初探,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章題目:PHP如何進行開源白盒審計工具初探
網(wǎng)址分享:http://weahome.cn/article/jjeish.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部