跳转至

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