模糊測試面面觀 | 模糊測試工具知多少

自1988年威斯康星大學的Barton Miller首次提出模糊測試這一概念以來,模糊測試領域經歷了持續長久發展。模糊測試作為一種軟件測試方法,旨在通過向程序輸入模糊、隨機、異常的數據,探測和發現潛在的漏洞和錯誤。這種方法備受安全研究人員的青睞。隨著時間的推移,這一領域呈現出了蓬勃發展的景象,出現了豐富多樣的模糊測試工具。

根據測試的特定目標,模糊測試工具可以被劃分為不同類別,包括文件格式類模糊測試工具、網絡協議類模糊測試工具、操作系統類模糊測試工具、Web服務類模糊測試工具、專注于特定編程語言的模糊測試工具等等。這些不同類型的模糊測試工具為軟件安全性的提升帶來了創新性的貢獻。它們有針對性地探索和發現軟件中的漏洞和脆弱性,能夠幫助安全人員更好地了解潛在的安全隱患。

模糊測試領域涌現出了眾多可供選擇的工具,下面將介紹一些知名的開源模糊測試工具,以便幫助讀者選擇最適合自己需求的工具。

文件格式類模糊測試工具

文件格式類模糊測試工具主要用于測試文件格式解析器的健壯性和安全性,它專門針對某些文件格式,例如PDF、JPEG、MP3等。通過生成不符合文件規范的隨機輸入數據去嘗試觸發目標程序中未處理的異常情況,包括緩沖區溢出、內存泄漏等錯誤。

01

AFL

AFL(American Fuzzy Lop)是由安全研究員Micha? Zalewski(@lcamtuf)開發的一款基于覆蓋引導(Coverage-guided)的模糊測試工具,它通過記錄輸入樣本的代碼覆蓋率,從而調整輸入樣本以提高覆蓋率,增加發現漏洞的概率。

02

WinAFL

WinAFL是AFL的Windows版本,是一款專為Windows平臺設計的開源模糊測試工具。與傳統的AFL不同,WinAFL使用DynamoRIO動態插樁技術來監視目標程序的執行,收集代碼覆蓋率信息,并依此反饋來調整輸入樣本。

03

libFuzzer

libFuzzer是一款由LLVM項目開發的開源模糊測試庫,用于進行持續、進化的模糊測試。與AFL等其他工具不同,libFuzzer是一個針對庫函數的模糊測試器,它直接與目標庫函數鏈接,無需與外部程序進行交互。

網絡協議類模糊測試工具

網絡協議類模糊測試工具是一種專門用于測試網絡協議實現的安全和健壯性的測試工具。通過向目標系統發送隨機或半隨機的、可能違反協議規范的數據包,試圖去引發目標系統的異常行為,例如崩潰、內存錯誤、或者更嚴重的安全問題。

01

Peach Fuzzer

Peach之前是一個遵守MIT開源許可證的模糊測試框架,是第一款綜合性的開源工具,其中創建模糊器由XML語言實現。Peach主要有3個版本,最初采用Python語言編寫,發布于2004年;第二版于2007年發布;Peach 3發布于2013年初,使用C#重寫了整個框架。Peach支持對文件格式、網絡協議、API等進行模糊測試。Peach提供了豐富的擴展和定制功能,以適應各種不同的測試需求和場景。值得注意的是在2020年Peach被GitLab收購,不再開源。

02

Boofuzz

Boofuzz是一個開源的由Python編寫的網絡協議模糊測試框架,繼承自Sulley。Boofuzz提供了對于網絡協議進行模糊測試的規范和功能函數,以此作為基礎,我們可以編寫針對自己目標的Python腳本,從而可以針對特定目標量身定制模糊測試工具。

03

AFLNet

AFLNet 是一款灰盒協議模糊測試工具,采用了代碼覆蓋率反饋、種子變異以及狀態反饋等技術。與傳統的基于生成的協議模糊測試工具相比,它采用Server和 Client之間的通信消息數據作為種子,無需任何的協議規范。本質上是模擬一個Client來發送一系列消息到 Server,并保留可以觸發新的代碼執行路徑或者響應狀態的變異數據。AFLNet使用Server 端的響應碼來識別消息序列觸發的不同狀態,根據這種反饋,AFLNet 可以盡可能向有效的狀態區域靠近。

操作系統類模糊測試工具

操作系統類模糊測試工具是一種專門針對操作系統內核和相關組件進行模糊測試的工具,旨在自動發現和識別潛在的漏洞和缺陷。通過生成隨機或半隨機的輸入,并將其送入操作系統的各個層次和接口,模糊測試工具試圖觸發非預期的行為。與常規的模糊測試工具不同,操作系統模糊測試工具需處理更復雜的環境和上下文,通常涉及對底層硬件、驅動、系統調用等進行模擬和測試。

01

kAFL

kAFL(Kernel AFL)是一款專注于Linux內核和其他復雜的內核組件模糊測試的工具。基于流行的AFL設計,kAFL通過自動化、持續地提供隨機或半隨機輸入來觸發潛在錯誤。與AFL不同,kAFL專門針對內核空間的代碼進行測試,能夠識別出一些用戶空間模糊器難以發現的漏洞。kAFL具備虛擬化技術支持,能夠在虛擬機中執行測試,從而確保測試過程的隔離和安全。它還采用了覆蓋率導向的方法,自動調整輸入以最大限度地探索內核代碼的執行路徑。

02

syzkaller

syzkaller由Google的安全團隊開發和維護,是一款高效的內核模糊測試工具。它主要使用Go編程語言實現,兼容Linux、Android、FreeBSD和Windows等多種操作系統,已成功發現上千個漏洞。syzkaller通過不斷生成并執行一系列隨機化的系統調用,嘗試去觸發內核的異常行為,如崩潰、死鎖或內存泄露。

Web服務類模糊測試工具

Web服務類模糊測試工具是一種專門針對Web應用程序的安全測試工具,用于自動發現潛在的Web安全漏洞。通過生成一系列隨機或半隨機的HTTP請求,Web模糊器能夠測試Web應用程序的各個組件,如URL、表單、參數、頭部等。它可以快速識別常見的安全問題,如SQL注入、跨站腳本攻擊(XSS)、文件包含等安全問題。

01

WFuzz

WFuzz是用Python實現的Web應用程序安全性模糊工具和庫。它基于一個簡單的理念:它將給定有效負載的值替換為對關鍵字的任一引用。它是一款出色的輔助模糊測試工具,可以在HTTP請求中插入各種輸入值,用于對不同的Web應用程序組件進行多種復雜攻擊,包括參數、認證、表單、頭部等等。

02

WebScarab

WebScarab是一款開源的Web應用程序安全測試工具,由OWASP開發和維護。它是一款用Java編寫的代理工具,主要用于分析和審查HTTP和HTTPS通信。它包含了一個基礎的模糊測試器,能夠將模糊測試值注入到應用參數中。

特定編程語言的模糊測試工具

特定編程語言的模糊測試工具是專門為某種編程語言設計的工具,用于自動檢測代碼中的漏洞和錯誤。特定編程語言的模糊測試工具有更深入的語言集成和理解,可以更精確地針對特定語言特性進行測試。與其他模糊測試工具相比,這些工具通常能提供更有效的測試,更容易集成到開發工作流程中,并能發現更深入、更特定的問題。

01

go-fuzz

go-fuzz是一款針對Go語言的模糊測試工具,使用覆蓋率指導技術自動尋找能觸發程序異常的輸入。與Go的工具鏈緊密集成,它可以自動發現和最小化觸發漏洞的輸入,有效簡化漏洞診斷和修復過程。作為Go開發人員和安全工程師的重要工具,go-fuzz在許多知名Go項目中成功地發現了漏洞。

02

Kelinci

Kelinci是一款配合AFL進行Java程序模糊測試的工具,通過插樁Java字節碼來分析程序覆蓋率。它通過創建一個C語言接口與AFL通信,接收AFL的變異數據,并通過TCP傳遞給Java端的Instrumentor。Instrumentor則負責將這些數據傳遞給Java的原始目標程序,并將運行結果反饋給C語言接口。Kelinci與AFL共同構建了一個閉環數據流,使AFL能夠間接地對Java程序進行有效的模糊測試。

03

fuzzilli

fuzzilli是Google開源的一款JavaScript的模糊測試工具,使用swift語言開發。它整合了語法變異、模板生成、覆蓋引導等多種技術,使用自定義中間語言用于語法變異,再將變異后的中間語言轉換成JS代碼。fuzzilli在3大主流JS引擎的測試中,收獲頗豐,發現了不少漏洞,

這些開源工具為安全專業人員提供了更多選擇,使他們能夠更有效地發現安全漏洞,進而推動整個軟件安全領域向前發展。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42043.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42043.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42043.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

助推打造全球研發中心城市 | 李彥團隊:研發,帶來了二次文藝復興

2017年,長沙經聯合國教科文組織評選,成為中國首座獲評世界“媒體藝術之都”稱號的城市。6年后,基于時代發展的新要求,長沙再次提出了“打造全球研發中心城市”的目標,并朝著新的方向邁進。 舊有的優勢產業在新的研發浪…

信安通用基礎知識

文章目錄 密碼學經典誤區PGP優良保密協議信安經典其它安全手段XSS與CSRF cross site request forgeryCSRF的利用邏輯CSRF示例CSRF防范檢查Referer字段添加校驗token XSS cross site scripting common weakness enumeration常見密碼api誤用(摘自畢設參考文獻&#xf…

“深入探究JVM內部機制:如何實現Java程序的運行環境?“

標題:深入探究JVM內部機制:如何實現Java程序的運行環境? 摘要:本文將深入探究Java虛擬機(JVM)的內部機制,重點討論JVM如何實現Java程序的運行環境。我們將從JVM的結構、類加載、內存管理、垃圾…

01 Python 網絡爬蟲:爬蟲技術的核心原理

不夸張地說,現在哪怕是初中生,只要花點兒時間、精力稍微按「網絡爬蟲」的開發步驟學習了解一下,也能把它玩得賊溜。 聽起來感覺是很高大上的東西,但實際上并不復雜,也就是使用了某種編程語言按照一定步驟、規則主動通…

用Java實現原神抽卡算法

哈嘍~大家好,好久沒有更新了,也確實遇到了很多事,這篇開始恢復更新,喜歡的話,可以給個的三連,什么?你要白嫖?那可以給個免費的贊麻。 🥇個人主頁:個人主頁??…

七月 NFT 行業解讀:游戲和音樂 NFT 引領增長,Opepen 掀起熱潮

作者:lesleyfootprint.network 2023 年 7 月,NFT 市場的波動性持續存在,交易量呈下降趨勢。然而,游戲和音樂 NFT 等領域的增長引人注目。參與這些細分領域的獨立用戶數量不斷增加,反映了這些領域的復蘇。 本綜合報告…

lvs負載均衡群集

lvs組成 1、lvs基于內核態的netfilter框架實現的IPVS功能,工作在內核態用戶配置VIP等相關信息并且傳遞到IPVS 就需要用到IPVSadm工具。 2、ipvsadm:IPVSadm是lvs用戶態的配套的工具,可以實現VIP和RS 增刪改查。 IPVSadm就是類似于iptables…

侯捷 八部曲 C++面向對象高級開發(上)+(下)【C++學習筆記】 超詳細 萬字筆記總結 筆記合集

文章目錄 Ⅰ C part1 面向對象編程1 頭文件與類的聲明1.1 c vs cpp關于數據和函數1.2 頭文件與類1.2.1 頭文件1.2.2 class的聲明1.2.3 模板初識 2 構造函數2.1 inline 函數2.2 訪問級別2.3 ctor 構造函數2.3.1 ctor 的寫法2.3.2 ctor/函數 重載2.3.3 ctor 放在 private 區 2.4 …

記vite打包vue項目內存溢出問題解決

出現問題 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory解決方法一: 1.根據網上的資料是通過全局下載npm包increase-memory-limit: npm install -g increase-memory-limit2.在項目目錄執…

學習Vue:路由參數與查詢參數傳遞

在Vue.js中,路由與導航不僅涉及到頁面之間的切換,還包括了向頁面傳遞參數以及獲取查詢參數的功能。本文將詳細介紹如何在Vue Router中傳遞路由參數和查詢參數,幫助您更好地理解和使用這些功能。 路由參數的傳遞 路由參數是指在URL中的動態片…

K8s內部的網路模式實現理解

overlay 網絡模式 在 Kubernetes 中,overlay 網絡模式被用于實現容器之間的網絡通信。 K8s 使用了一種稱為容器網絡接口(Container Network Interface,簡稱CNI)的規范,該規范定義了容器如何進行網絡連接。實際上&…

SDP 與Rtcp-fb

1、sdp介紹 SDP(Session Description Protocol)是一種用于描述多媒體會話的協議,它在會話層起著重要的作用。SDP的主要功能是提供會話的元數據和配置信息,以便參與者能夠協商和建立一致的會話。 以下是SDP在會話層的作用&#x…

生活隨筆,記錄我的日常點點滴滴.

前言 😘個人主頁:曲終酣興晚^R的小書屋🥱 😕作者介紹:一個莽莽撞撞的🐻 💖專欄介紹:日常生活&往事回憶 😶?🌫?每日金句:被人暖一下就高熱&…

catboost推理開GPU加速

核心設置 model.predict(feature, task_type‘GPU’) 代碼參考 # 訓練配置 params {"catboost": {"n_estimators": 7000,"learning_rate": 0.03,"eval_metric": "AUC","loss_function": "RMSE",&qu…

【sgDragSize】自定義拖拽修改DIV尺寸組件,適用于窗體大小調整

核心原理就是在四條邊、四個頂點加上透明的div,給不同方向提供按下移動鼠標監聽 ,對應計算寬度高度、坐標變化 特性: 支持設置拖拽的最小寬度、最小高度、最大寬度、最大高度可以雙擊某一條邊,最大化對應方向的尺寸;再…

一次Linux中的木馬病毒解決經歷(6379端口---newinit.sh)

病毒入侵解決方案 情景 最近幾天一直CPU100%,也沒有注意看到了以為正常的服務調用,直到騰訊給發了郵件警告說我的服務器正在入侵其他服務器的6379端口,我就是正常的使用不可能去入侵別人的系統的,這是違法的. 排查 既然入侵6379端口,就懷疑是通過我的Redis服務進入的我的系統…

Vue基礎-1.知識導航

知識導航(就問全不全) 當學習 Vue.js 時,除了基本的 HTML、CSS 和 JavaScript 知識外,還有一些其他的技術和語法需要了解,例如 ES6 和 TypeScript。以下是您可能需要學習的一些基礎知識和對應的學習資源,我…

css中變量和使用變量和運算

變量: 語法:--css變量名:值; --view-theme: #1a99fb; css使用變量: 語法:屬性名:var( --css變量名 ); color: var(--view-theme); css運算: 語法:屬性名…

vue3 rouer params傳參的問題

route.params在頁面刷新的時候數據會丟失,所以vue3 棄用了params方式! 但是,vue3又更新了一個替代params的方式:history API import { useRouter } from "vue-router" const router userRouter; // 跳轉路由&#xff…

JDBC封裝與設計模式

什么是 DAO ? Data Access Object(數據存取對象) 位于業務邏輯和持久化數據之間實現對持久化數據的訪問 DAO起著轉換器的作用,將數據在實體類和數據庫記錄之間進行轉換。 ----------------------------------------------------- DAO模式的組成部分 …