address-sanitizer
在模糊測試期間檢測緩衝區溢位與釋放後使用等記憶體錯誤。提供 C/C++ 記憶體安全的編譯模式與執行階段配置。
簡介
AddressSanitizer (ASan) 是識別軟體測試生命週期(特別是在模糊測試工作流程中)記憶體損壞漏洞的關鍵檢測工具。它專為使用 C/C++ 程式碼庫的開發人員和安全研究人員所設計,旨在主動發現標準執行期間通常隱藏的缺陷,例如堆疊緩衝區溢位、釋放後使用 (use-after-free)、雙重釋放 (double-free) 與記憶體洩漏。透過在編譯時對程式碼進行插裝,ASan 能以高精度追蹤記憶體分配與存取模式,並在執行階段發生非法操作時提供詳細的堆疊追蹤與報告資料。
-
使用 Clang 或 GCC 的 -fsanitize=address 旗標來對二進位檔進行插裝,以在測試執行期間進行全面的記憶體安全監控。
-
透過 ASAN_OPTIONS 環境變數配置執行階段行為,支援詳細資訊控制、洩漏檢測開關與錯誤時中止觸發器。
-
針對與 libFuzzer 與 AFL++ 等流行模糊測試引擎的深度整合進行了最佳化,包括停用記憶體限制(例如 -rss_limit_mb=0 或 -m none)的具體指導,以適應 20TB 虛擬記憶體映射需求。
-
提供包含錯誤類型、分配/釋放堆疊追蹤與影子記憶體狀態分析的詳細診斷輸出,以實現快速的根本原因偵錯。
-
支援進階配置,包括多種 sanitizer 的組合(例如 -fsanitize=address,undefined),以檢測更廣泛類別的未定義行為與安全違規。
-
主要在開發與測試階段使用此技能;由於其約 2-4 倍的效能開銷與插裝帶來的潛在安全影響,嚴格禁止在生產環境中使用。
-
請務必配合 -g 除錯旗標進行編譯,以確保 ASan 生成可參考實際原始程式碼行數的有意義堆疊追蹤。
-
請注意,雖然 ASan 在 Linux 上提供了卓越的可視性,但在 macOS 與 Windows 上的支援可能受限或處於實驗階段,這可能會影響報告在這些平台上的可靠性。
-
可用於測試使用 unsafe 區塊的 Rust 程式碼,因為它能檢測在 FFI 或手動記憶體管理期間發生的記憶體安全違規。
-
定期檢查生成的報告,以發現未立即導致應用程式崩潰但顯示架構不穩定性的記憶體洩漏或資源管理問題。
倉庫統計
- Star 數
- 4,856
- Fork 數
- 421
- Open Issue 數
- 29
- 主要語言
- Python
- 預設分支
- main
- 同步狀態
- 閒置
- 最近同步時間
- 2026年4月28日 下午12:17