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

2024-08-25 86 0

关于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,uar

clang++ $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:【GitHub传送门

参考资料

https://github.com/google/sanitizers/tree/master/gwp-asan/icse2024

https://research.google/pubs/google-wide-profiling-a-continuous-profiling-infrastructure-for-data-centers/

https://llvm.org/docs/PCSectionsMetadata.html

https://bazel.build/


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

如何使用CODASM编码Payload并降低熵值
SessionExec:一款针对会话安全的安全命令测试工具
Arkime:一款大规模数据包捕获和索引数据库系统
从蓝队流量角度分析Shiro-550反序列化漏洞
万字长文浅谈三高系统建设方法论和实践
你遇到过哪些奇葩面试题目;如何考察渗透测试与安全管理能力| FB甲方群话题讨论

发布评论