freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

GWPSan:一款基于数据采样的二进制代码动态安全检测框架
2024-08-17 00:09:57

关于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/

# 代码审计 # 安全检测 # 代码安全 # 二进制安全 # 数据过滤
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录