GCC编译C / C ++的最强硬选项是什么?

时间:2012-11-24 19:00:05

标签: c++ security gcc buffer-overflow dangling-pointer

哪些GCC选项可以最好地防止内存损坏漏洞,如缓冲区溢出和悬空指针? GCC是否提供任何类型的ROP链缓解?是否存在性能问题或其他问题会妨碍此GCC选项在生产中使用关键任务应用程序?

我正在关注Debian Hardening Guide以及GCC Mudflap。以下是我正在考虑的以下配置:

-D_FORTIFY_SOURCE=2
-fstack-protector --param ssp-buffer-size=4
-fPIE -pie
-Wl,-z,relro,-z,now (ld -z relro and ld -z now)

是否可以对这组选项进行任何改进?假设最新版本的GCC,如果你知道任何很酷的即将推出的功能,请告诉我!

3 个答案:

答案 0 :(得分:1)

不是GCC选项,但与GCC兼容。请参阅我们的CheckPointer工具,它可以检测大多数内存管理错误。

执行力显着放缓;该工具必须跟踪指针和分配存储的有效性,这会增加开销。

答案 1 :(得分:0)

这不是CFLAGSLDFLAGS答案,所以也许不是您特别想要的,但您还应该查看为强化目的而编写的gcc插件。这些用于强化内核构建并捕获大量错误代码。您可能需要一个gcc插件包用于您的发行版,apt-cache search gcc | grep plugin或等效包以找到包名称。我相信llvm编译器套件有类似的插件,如果你愿意考虑使用他们的clang编译器(它主要是gcc兼容)

答案 2 :(得分:0)

请参见 What is the most hardened set of options for GCC compiling C/C++

因此,下面提供了合理的选择。

警告:

-Wall -Wextra -Wformat-security -Werror

硬化:

-mmitigate-rop -Wstack-protector -fstack-protector-strong -fstack-clash-protection -pie -fPIE -D_FORTIFY_SOURCE=2 -Wl,-z,rel -Wl,dynamicbase -Wl,nxcompat

很好的修补程序

-fvtable-verify=std