类似于 Intel 和 AMD 处理器上为具有阴影栈的控制流完整性而提供的功能,Linux 在 RISC-V 上终于准备好推出其用户空间控制流完整性支持。
经过 23 轮补丁的迭代,RISC-V 用户模式下的控制流完整性(CFI)正接近主线内核。此安全功能用于抵御通过操纵用户空间软件的控制流来获取控制的 ROP 攻击。RISC-V 使用 “zicfilp” 指令来强制所有间接调用落在着陆垫(lpad)指令上,否则将引发软件检查异常。此外,还引入了 RISC-V 指令来帮助确保软件的返回流。

x86_64 和 AArch64 架构的 CPU 已经支持在具备相应功能的处理器上为 Linux 实现用户空间控制流完整性,而 RISC-V 架构现在也加入了这一行列,因为这些补丁终于被正式合并了。这些补丁已经合并到了 risv/linux.git 仓库的”for-next”分支中。随着这些 RISC-V 用户模式 CFI 补丁进入”for-next”队列,它们应该会在今年 2 月的即将到来的 Linux 7.0 合并窗口中作为一部分被提交。

这些补丁在编译时增加了一个新的 RISCV_USER_CFI 内核配置选项,用于启用 RISC-V 用户空间控制流完整性,前提是所使用的 RISC-V 处理器支持必要的指令。对于启用了该内核配置的版本,并且拥有必要的 RISC-V 硬件支持的情况下,这些补丁还为内核增加了一个新的命令行启动选项 riscv_nousercfi=,其值可以是 all 来禁用用户控制流完整性,bcfi 来禁用用户向后 CFI ABI,或者 fcfi 来禁用用户向前 CFI ABI。
转自 RISC-V User-Space Control Flow Integrity / Shadow Stack Appears Finally Ready – Phoronix
Linuxeden开源社区