ELF binaries do not enforce secure binary properties
ELF 二进制文件未强制执行安全二进制属性
描述
编译器、操作系统和处理器提供了一系列技术,用于保护并降低内存损坏漏洞(如缓冲区溢出)或内存利用技术(如 ROP,面向返回的编程)的风险。
本机代码可以轻松受益于以下保护措施:
RELRO:RELRO 是一种内存保护技术,旨在增强对内存损坏利用技术的防护。RELRO 可防止 GOT 覆盖攻击。ASLR:ASLR 是一种内存保护技术,旨在增强对内存损坏利用技术的防护。ASLR 随机化二进制文件的地址空间,以防止受控的地址跳转。No eXecute:将内存区域标记为不可执行,以增强对内存损坏利用技术的防护。Stack canary:向内存中添加一个在发生内存损坏时会被覆盖的金丝雀值。在运行时检查该金丝雀值,以防止利用内存损坏漏洞。
建议
为了确保在使用 GCC 编译时启用堆栈金丝雀功能,您可以指定以下编译器选项之一:
- 若需基本的堆栈保护,请使用
-fstack-protector。 - 若需更强的保护,包括具有局部数组或对局部帧地址的引用的函数,请使用
-fstack-protector-strong。 - 若需在每个函数中进行全面的保护检查,请使用
-fstack-protector-all。
链接
标准
- OWASP_MASVS_L1:
- MSTG_CODE_9
- OWASP_MASVS_v2_1:
- MASVS_CODE_2
- OWASP_MASVS_L2:
- MSTG_CODE_9
- PCI_STANDARDS:
- REQ_2_2
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255