SRH


paper : https://h0ngkai.github.io/papers/sec25_System_Register_Hijacking.pdf

paper

摘要

对系统寄存器进行综合分析,从CFHP出发,借助系统寄存器进行后续利用;

CFI

Linux内核支持一种基于软件的控制流完整性校验,叫做kCFI,目的是防止前向控制流劫持。kCFI在编译时给每一个函数和间接引用的调用点分配一个标签,然后比较调用点和目标点的标签,确保这是一个合法地目标。

现代x86-64处理器支持基于硬件的CFI。通过IBT实现前向边保护,通过Shadow Stack实现后向边保护。

IBT通过保证一个控制流前向边的目标指向的是endbr64指令;

ShadowStack通过维护一个第二栈来工作,第二栈中存放返回地址,且不可以被一般的访存指令修改,如果ret指令pop出来的返回地址和第二栈中pop出来的地址不一致,就认为出错了。

威胁模型

考虑三种不同的场景:

  1. base:SMEP, SMAP, KPTI, NX-physmap, CR Pinning, STATIC_USERMODE_HELPER, RANDKSTACK, and STACK CANARY.
  2. FineIBT-Protected.
  3. kCFI-Protected.

系统寄存器劫持

有的系统寄存器被篡改了可以改变CPU特性,比如cr4寄存器,可以关闭SMEP、SMAP,还有些系统寄存器用于指向许多重要的系统结构体,如果篡改了可以伪造一个顶上去,例如IDT;


文章作者: q1ming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1ming !
  目录