亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-10-11 10:36:49 來源:億速云 閱讀:127 作者:柒染 欄目:網絡管理

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

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

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

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

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

基于靜態分析

Cobra 

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

Language: Python2

Last commit on 2019.08.23

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

開發語言

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 具體工作原理官方文檔已經介紹的很詳細,引用如下:

對于一些特征較為明顯的可以使用正則規則來直接進行匹配出,比如硬編碼密碼、錯誤的配置等。 對于OWASP Top 10的漏洞,Cobra通過預先梳理能造成危害的函數,并定位代碼中所有出現該危害函數的地方,繼而基于 Lex (Lexical Analyzer Generator, 詞法分析生成器)和 Yacc (Yet Another Compiler-Compiler, 編譯器代碼生成器)將對應源代碼解析為 AST (Abstract Syntax Tree, 抽象語法樹),分析危害函數的入參是否可控來判斷是否存在漏洞(目前僅接入了PHP-AST,其它語言AST接入中)。

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

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

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 進一步優化來提高發現漏洞的準確率以及精度的白盒審計工具。兩者的工作原理基本相同,其不同之處主要體現在:

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

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

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

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

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

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

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) 開發的。PHP_CodeSniffer 是一個代碼風格檢測工具,主要包含兩類腳本:1)根據預定義的一系列代碼規范來檢測不符合規范的代碼,并發出警告或報錯的 phpcs 腳本;2)自動修正代碼格式上不符合規范的部分 phpcbf 腳本。準確來講phpcs-security-audit 并不能稱之為一個完整的白盒審計框架,它只是提供了一些能夠檢測代碼中潛在安全漏洞的代碼規范的規則集。

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

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

progpilot 

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

Language: PHP

Last commit on 2019.06.02

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

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

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

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

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

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

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

pixy   

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

Language: Java

Last commit on 2018.01.24

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

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

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

RIPS 

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

Language: PHP

Last commit on 2016.05.22

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

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

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

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

securing.php :定義安全處理函數;

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

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

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

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

  1. 定位敏感函數;

  2. 參數部分/全部來自外部輸入;

  3. 外部輸入在傳遞過程中是否經過安全函數處理。

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

以上就是PHP如何進行開源白盒審計工具初探,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

石门县| 扎兰屯市| 平远县| 新津县| 贺兰县| 霸州市| 东阳市| 体育| 南郑县| 大化| 江川县| 浮梁县| 濉溪县| 巴楚县| 洛宁县| 苏尼特左旗| 和硕县| 灌南县| 伊宁县| 依安县| 武城县| 九寨沟县| 望都县| 内黄县| 梧州市| 乌鲁木齐市| 五大连池市| 岐山县| 铜川市| 贡山| 贺兰县| 武宣县| 丹巴县| 永顺县| 自贡市| 新绛县| 峨山| 共和县| 垫江县| 高密市| 肥城市|