W^X 策略可以防止哪些攻击?

信息安全 记忆 aslr 部门
2021-08-19 05:35:53

Write xor Execute (W^X) 是一个内存块(页)不能同时标记为可写和可执行的策略。

W^X 可以防止哪些攻击,无论有无以下:

  • 地址空间布局随机化 (ASLR)
  • 数据执行保护 (DEP)
  • 一次可写,永不执行——页面在被标记为可写后永远不能被标记为可执行。
1个回答

W^X 和“一次可写,永不执行”都是 DEP 的子案例。DEP 是关于使读取访问和执行访问不同(可写页面也是可读页面)。W^X 是关于使用 DEP 执行特定策略,即给定页面永远不能同时可写和可执行。

程序员可能需要遵守 W^X 策略,因为写入“数据”然后可靠地执行它需要刷新一些缓存,这是一项显式且昂贵的操作。通过内核(通过mprotect()调用)并不是很难做到这一点。另一方面,强制程序员明确地做这些事情意味着它不会在其他情况下发生,即当攻击者试图利用缓冲区溢出时。这是“堆栈不可执行”特性的概括。(不过,缓冲区溢出仍然存在;W^X 只会让攻击者的生活更加艰难。)

“一次可写,永不执行”的策略在我看来很可疑:它与 JIT 编译器不兼容。无论如何,这将是 W^X 的子情况:就像 W^X,其中禁止转换 W->X。