GWPSan:一款基于数据采样的二进制代码动态安全检测框架

admin 2024年8月24日20:27:21评论21 views字数 2031阅读6分46秒阅读模式

 

关于GWPSan
GWPSan是一款基于数据采样的二进制代码动态安全检测框架,该工具消耗资源非常少,旨在实现适合生产用途的各种二进制代码错误检测。
GWPSan:一款基于数据采样的二进制代码动态安全检测框架
GWPSan 不会修改执行的代码,而是根据信号处理程序执行动态分析。与非采样动态分析相比,GWPSan 牺牲了性能以换取精度,使其可以在更昂贵的动态分析无法实现的地方(例如在生产中)启用。其理念是,如果总正常运行时间足够长,GWPSan 将检测到非生产测试工作负载通常不会覆盖的代码中的错误。
GWPSan 的灵感来自 GWP-ASan,但它们的设计和实现完全不同。GWP-ASan 要简单得多,仅提供基于采样的堆内存安全错误检测,并且通常嵌入在系统堆分配器中。
GWPSan 和 GWP-ASan 相互补充,其中 GWPSan 旨在成为一个实现动态分析的更通用的框架。
工具安装
广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/google/gwpsan.git
工具使用
要使用 GWPSan,您必须构建 GWPSan 并将其(静态或动态)链接到感兴趣的二进制文件中。对于大多数 GWPSan「工具」,目标二进制文件必须使用其他编译器标志进行编译,以添加所需的元数据部分。GWPSan 目前需要 Clang 18 或更高版本以及 Linux 内核 6.4 或更高版本;目前该工具已实现对 x86-64 和 arm64 架构的支持。构建 GWPSan 需要使用到Bazel。
下列命令可以构建 GWPSan 静态和动态运行时库:
CC=<path to clang-18 or later>CXX=<path to clang++-18 or later>bazel build --action_env=CC="$CC" --action_env=CXX="$CXX" -c opt $( [[ $(uname -m) == "x86_64" ]] && echo --config=x86_64 ) //gwpsan/unified:libgwpsan.so //gwpsan/unified:gwpsan_archive
如果您的clang和二进制文件已经是版本 18 或更高版本,则可以省略明确设置 CC 和 CXX。GNU C++ 库 (libstdc++) 和 Clang 版本的某些组合可能不兼容;如果遇到问题,请尝试使用 LLVM C++ 库 (libc++),并另外传递--config=libc++参数给 Bazel 命令。
下列命令可以使用静态链接的运行时构建目标二进制文件:
GWPSAN_CFLAGS=-fexperimental-sanitize-metadata=atomics,uarclang++ $GWPSAN_CFLAGS -c example.cpp -o example.o...clang++ -o example example.o ...         -Wl,--whole-archive "${GWPSAN_ROOT}/bazel-bin/gwpsan/unified/libgwpsan.a" -Wl,--no-whole-archive
将动态链接的 GWPSan 运行时与已构建GWPSAN_CFLAGS但未静态链接运行时的二进制文件一起使用:
clang++ $GWPSAN_CFLAGS -c example.cpp -o example.o...clang++ -o example example.o ...LD_PRELOAD="${GWPSAN_ROOT}/bazel-bin/gwpsan/unified/libgwpsan.so" ./example

启用采样和工具

支持的工具包括:
  • tsan:检测数据竞争,启用和禁用命令为GWPSAN_OPTIONS=tsan=0/1;
  • uar:检测使用后返回错误,启用和禁用命令为GWPSAN_OPTIONS=uar=0/1;
  • lmsan:检测未初始化值的使用,启用和禁用命令为GWPSAN_OPTIONS=lmsan=0/1;

下列命令即可启用所有工具:
GWPSAN_OPTIONS=sample_interval_usec=1000000:halt_on_error:tsan:uar:lmsan
工具测试
测试 GWPSan 更改或新的工具链和内核:
CC=<path to clang-18 or later>CXX=<path to clang++-18 or later>bazel test --action_env=CC="$CC" --action_env=CXX="$CXX" --config=dev $( [[ $(uname -m) == "x86_64" ]] && echo --config=x86_64 ) //gwpsan/...
许可证协议
本项目的开发与发布遵循Apache-2.0开源许可协议。
项目地址
GWPSan:
https://github.com/google/gwpsan

原文始发于微信公众号(FreeBuf):GWPSan:一款基于数据采样的二进制代码动态安全检测框架

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月24日20:27:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GWPSan:一款基于数据采样的二进制代码动态安全检测框架https://cn-sec.com/archives/3091569.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息