前提条件
开了很多保护:SMAP\SMEP\canary、kaslr、kpti、cr4、STATIC_USERMODEHELPER;
没有开启CFI;
有一个导致CFHP的poc;
假设这个漏洞已经通过人工分析或者动态分析找到了,我们只关注评估这个漏洞;
假设有一个有限的地址泄露原语:包括内核代码段和堆地址;
blooming gadget
使用前提
blooming gadget是利用了一些类似于面向对象的代码,rdi指向一个对象,然后从里边取参数、取函数指针实现间接调用,因此blooming gaddget需要在rdi已经被控制的前提下才能发挥作用,这种rdi+rip被控制的原语应该很好的到,因为本论文的一个insight是崩溃瞬间应该有潜在被控制的寄存器,这样就可以通过一个间接调用gadget实现上述原语的转化,即便是一个也没有,那就走pt_regs:
因此我们是否可以认为,KEPLER开始工作的起点应该是rdi+rip的原语已经被人工构造出来了呢?