toplogo
로그인

透過資料流融合對 PHP 解譯器進行模糊測試


핵심 개념
本文介紹 FlowFusion,這是一個自動模糊測試框架,專為偵測 PHP 解譯器中的記憶體錯誤而設計,透過資料流融合技術,結合現有測試案例以產生更複雜的測試情境,進而發現潛在的記憶體錯誤。
초록
edit_icon

요약 맞춤 설정

edit_icon

AI로 다시 쓰기

edit_icon

인용 생성

translate_icon

소스 번역

visual_icon

마인드맵 생성

visit_icon

소스 방문

研究論文摘要 文獻資訊: Yuancheng Jiang, Chuqi Zhang, Bonan Ruan, Jiahao Liu, Roland Yap, Zhenkai Liang, and Manuel Rigger. (2024). Fuzzing the PHP Interpreter via Dataflow Fusion. arXiv preprint arXiv:2410.21713. 研究目標: 本文旨在提出一個名為 FlowFusion 的自動模糊測試框架,用於偵測 PHP 解釋器中的記憶體錯誤。 方法: FlowFusion 利用資料流融合技術,將現有的 PHP 測試案例進行合併,創造出具有更複雜程式碼語義的新測試案例,並透過變異測試、介面模糊測試和環境交叉測試等策略,進一步提高偵測記憶體錯誤的效率。 主要發現: FlowFusion 成功在 PHP 解釋器中發現了 56 個先前未知的記憶體錯誤,其中 38 個已修復,4 個已確認。與官方測試套件和單純的測試案例串聯方法相比,FlowFusion 能夠偵測到更多錯誤,並實現更高的程式碼覆蓋率。此外,FlowFusion 的效能也優於現有的模糊測試工具 AFL++ 和 Polyglot。 主要結論: FlowFusion 是一個有效的 PHP 解釋器記憶體錯誤偵測工具,能夠顯著提高 PHP 解釋器的安全性。 意義: 本研究為 PHP 解釋器的安全測試提供了一個新的方向,並為開發更安全的軟體系統提供了參考價值。 限制和未來研究: 未來可以進一步研究如何將 FlowFusion 應用於其他程式語言的解釋器,以及如何進一步提高 FlowFusion 的效率和準確性。 研究背景 PHP 是一種廣泛使用的網頁開發語言,其官方解釋器主要使用 C 語言編寫,因此容易受到記憶體錯誤的影響。 現有的 PHP 安全研究主要集中在應用程式層面的問題,例如程式碼注入,而較少關注解釋器本身的記憶體錯誤。 PHP 官方測試套件雖然包含大量測試案例,但這些案例大多語義簡單,難以觸發複雜的記憶體錯誤。 FlowFusion 的運作原理 資料流融合: FlowFusion 分析現有測試案例的資料流,並將不同案例的資料流進行合併,創造出具有更複雜程式碼語義的新測試案例。 變異測試: FlowFusion 對測試案例進行變異,例如替換運算元或運算式,以增加測試案例的多樣性。 介面模糊測試: FlowFusion 使用融合後的程式碼語義,對 PHP 解釋器的內部函數進行模糊測試。 環境交叉測試: FlowFusion 合併不同測試案例的執行環境,並隨機插入配置選項,以模擬更真實的執行環境。 實驗結果 FlowFusion 成功在 PHP 解釋器中發現了 56 個先前未知的記憶體錯誤,其中 38 個已修復,4 個已確認。 與官方測試套件和單純的測試案例串聯方法相比,FlowFusion 能夠偵測到更多錯誤,並實現更高的程式碼覆蓋率。 FlowFusion 的效能也優於現有的模糊測試工具 AFL++ 和 Polyglot。 結論 FlowFusion 是一個有效的 PHP 解釋器記憶體錯誤偵測工具,能夠顯著提高 PHP 解釋器的安全性。
통계
PHP 被全球超過 70% 的網站使用。 PHP 官方解釋器包含超過一百萬行程式碼。 PHP 官方測試套件包含超過 18,000 個測試案例。 FlowFusion 發現了 56 個先前未知的記憶體錯誤,其中 38 個已修復,4 個已確認。 FlowFusion 發現的錯誤影響了 PHP 解釋器中的 40 個原始程式碼檔案,並導致開發者修改了超過 1,539 行程式碼。

핵심 통찰 요약

by Yuancheng Ji... 게시일 arxiv.org 10-30-2024

https://arxiv.org/pdf/2410.21713.pdf
Fuzzing the PHP Interpreter via Dataflow Fusion

더 깊은 질문

除了記憶體錯誤之外,FlowFusion 是否還能用於偵測其他類型的軟體錯誤?

FlowFusion 主要設計用於偵測 PHP 直譯器中的記憶體錯誤,但由於它使用 Undefined Behavior Sanitizer (UBSan) 作為錯誤偵測機制,因此也能夠偵測到其他類型的軟體錯誤。 UBSan 是一種執行時期分析工具,可以偵測 C/C++ 程式碼中未定義行為,例如: 整數溢位 使用未初始化的變數 對齊錯誤 ...等等 因此,FlowFusion 除了可以偵測到記憶體錯誤之外,也能夠偵測到 UBSan 所涵蓋的其他類型的軟體錯誤。然而,需要注意的是,FlowFusion 的主要設計目標是偵測記憶體錯誤,因此它在偵測其他類型錯誤方面的效果可能不如專門設計用於偵測這些錯誤的工具。

FlowFusion 的資料流融合技術是否可以應用於其他程式語言的模糊測試?

FlowFusion 的資料流融合技術是基於對程式碼語義的理解,透過分析和融合不同測試案例的資料流來產生新的測試案例,進而提高程式碼覆蓋率並觸發潛在錯誤。這種技術的核心理念是通用的,理論上可以應用於其他程式語言的模糊測試。 然而,要將 FlowFusion 的資料流融合技術應用於其他程式語言,需要克服以下挑戰: 程式語言特性: 不同的程式語言具有不同的語法、語義和執行模型,因此需要針對特定語言設計相應的資料流分析和融合演算法。 測試案例品質: FlowFusion 的資料流融合技術依賴於高品質的測試案例作為種子,因此需要為目標語言建立或收集足夠數量且具有代表性的測試案例。 工具支援: 需要開發或整合相應的工具來支援目標語言的資料流分析、程式碼轉換和測試案例生成。 總而言之,FlowFusion 的資料流融合技術具有應用於其他程式語言的潛力,但需要克服上述挑戰才能實現。

如何評估 FlowFusion 發現的記憶體錯誤的嚴重程度和可利用性?

評估 FlowFusion 發現的記憶體錯誤的嚴重程度和可利用性,需要綜合考慮多個因素,以下列出一些常用的方法: 嚴重程度評估: 錯誤類型: 不同的記憶體錯誤類型具有不同的嚴重程度,例如緩衝區溢位通常比空指標解引用更嚴重。 錯誤位置: 發生在核心程式碼或敏感功能中的錯誤通常比發生在邊緣程式碼中的錯誤更嚴重。 錯誤影響: 評估錯誤可能導致的後果,例如程式崩潰、資料損壞、服務拒絕或遠端程式碼執行。 可利用性評估: 錯誤可控性: 攻擊者是否可以控制錯誤發生的條件,例如輸入資料、程式狀態等。 錯誤可預測性: 錯誤發生的行為是否可預測,例如是否可以控制覆蓋的記憶體地址。 繞過保護機制: 評估錯誤是否可以繞過現有的安全保護機制,例如地址空間配置隨機化 (ASLR)、資料執行保護 (DEP) 等。 常用工具和技術: 漏洞掃描器: 使用漏洞掃描器可以自動化地檢測已知的漏洞,例如 CVE。 動態分析工具: 使用動態分析工具可以監控程式的執行過程,並識別潛在的漏洞,例如 Valgrind、AddressSanitizer 等。 滲透測試: 進行滲透測試可以模擬攻擊者的行為,並嘗試利用發現的漏洞。 與開發者溝通: 與 PHP 開發者溝通,了解他們對錯誤的評估和修復方案,也是評估錯誤嚴重程度和可利用性的重要途徑。 總之,評估記憶體錯誤的嚴重程度和可利用性是一個複雜的過程,需要結合多種方法和工具,並根據具體情況進行分析。
0
star