小编amb*_*iso的帖子

在生产中使用地址消毒剂或其他未定义行为消毒剂?

过去,人们对在某些环境中的生产中使用 ASAN 存在担忧:https://seclists.org/oss-sec/2016/q1/363。评论是2016年的——今天的风景怎么样?

是否建议在用户设备上运行的生产系统中使用消毒剂?应用程序接收来自其他方的不受信任的输入,并以各种方式处理这些输入。

使用它们是否会产生与安全相关的影响?添加的任何工具实际上是否可以更轻松地远程利用错误?

我正在考虑的应用程序是开源的,因此在这种情况下简化逆向工程不会成为问题。

c++ undefined-behavior clang++ address-sanitizer

5
推荐指数
1
解决办法
1111
查看次数

Clang++ 控制流完整性与共享指针崩溃

我正在尝试让控制流完整性与 clang++ 一起使用,但我无法运行以下代码:

\n
#include <memory>\n\nstruct X {\n    X() {}\n    virtual ~X() {};\n};\n\nint main() {\n    std::shared_ptr<X> _asd = std::make_shared<X>();\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果我编译并运行它

\n
clang++ -fsanitize=cfi -fvisibility=hidden -flto -O2 -std=c++14 test.cpp\n./a.out\n
Run Code Online (Sandbox Code Playgroud)\n

编译后的程序输出:

\n
[1]    45850 illegal hardware instruction (core dumped)  ./a.out\n
Run Code Online (Sandbox Code Playgroud)\n

生成的程序在make_shared标准库内的函数调用内崩溃。

\n

一些观察

\n

当我将析构函数设置为非虚拟时,它会成功终止,因此我最初认为它与此有关,cfi-vcall但它与该选项完美配合-fsanitize=cfi-vcall。

\n

负责任的编译标志似乎是-fsanitize=cfi-unrelated-cast- 通过所有其他可用的检查,应用程序可以正常运行。

\n

从反汇编来看,应用程序似乎是~X()在 make_shared 中调用(另请参阅下面的附加信息)?

\n

不确定这里发生了什么

\n

问题

\n

这是一个编程错误吗?是在编译器、标准库还是我的代码中?

\n

是否有解决方法可以使其在启用 CFI 的情况下编译和运行?

\n

预先非常感谢!

\n

附加信息 …

c++ clang++

5
推荐指数
0
解决办法
252
查看次数