工程开发
address-sanitizer avatar

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
在 GitHub 查看