Q

Q:更容易的漏洞利用强化

背景:
地址随机化ASLR技术随机化libc的位置,以抵御返回导向编程(ROP)攻击,以及W⊕X技术,以阻止控制流劫持攻击。但ASLR方法仍有少量可执行代码无法随机化,本文通过构建的Q技术从这些代码中自动创建ROP有效负载,以绕过当前部署的防御。

思想

Q的思想是使用语义定义来确定指令序列的功能。例如,我们没有将movl*,*;ret定义为移动小工具,而是使用语义定义OutReg←InReg。这使我们能够找到意想不到的小部件,例如实现imul $1、%eax、%ebx;ret实际上是一个移动gadget。

 

x86体系结构的现代操作系统与默认设置的防御比较。OptIn意味着开发人员必须在编译时显式地标记程序和库才能启用保护,而且某些编译器默认情况下不启用标记。HW表示保护等级取决于硬件

 

Q,我们的自动利用强化,图2显示了Q端到端工作流,它分为两个阶段

 

 

第一阶段自动生成ROP有效载荷

第二阶段是利用强化。

 

Gadget发现Q的第一步是在Alice提供的源程序中查找Gadget,在本例中是rsync。这些小工具将是最终创建的ROP有效载荷的构建块,因此尽可能多地找到这些小工具是很重要的。Q通过对rsync中的指令序列使用语义程序验证技术来查找各种类型的gadget(见表2)。Q的语义引擎可以让它找到人类可能会错过的小工具。例如,Q可以自动确定lea(%ebx,%ecx,1),%eax;ret将%ebx与%ecx相加,并将结果存储到%eax中。同样,它发现sbb%eax,%eax;neg%eax;ret将进位标志(CF)移到%eax。

Gadget Arrangement Q构建一个Gadget排列列表。每个gadget排列都是使用不同类型的gadget实现目标程序的一种方式。例如,我们在图3中展示了一个用于写入内存的gadget安排;这种安排是存储到内存的最自然的方式,但是如果Q找不到STOREMEMG gadget,那么这种安排就行不通了。小工具的排列有点类似于编译器中的指令选择。一个主要的区别是常规编译器可以使用它选择的任何指令,但是Q仅限于在gadget发现期间发现的gadget类型。小工具排列允许Q处理丢失的小工具。如果gadget最自然的选择不可用,Q将有效地尝试合成具有相同语义的其他gadget的组合。我们不知道其他的ROP编译器会考虑到这一点

Gadget Assignment Gadget Assignment获取在发现过程中找到的Gadget,并以Q生成的排列方式分配它们。困难在于作业必须协调一致。这意味着一个gadget的输出寄存器必须与接收gadget上的输入寄存器相匹配。同样,如果某个寄存器的值正在等待将来的gadget使用,gadgets也不能对该寄存器进行删除。这个阶段大致类似于传统编译器中的寄存器分配。与传统编译器不同,Q不能将寄存器溢出到内存中,因为这通常会增加寄存器压力而不是降低寄存器压力。例如,Q从rsync分配以下gadgets来实现图3中的gadget排列:;Load value into%eax pop%ebp;ret;xchg%eax,%ebp;ret;将address-0x14加载到%ebx pop%ebx;pop%ebp;ret;存储内存mov%eax,0x14(%ebx);ret

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值