Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

When Every Byte Counts – Writing Minimal Length Shellcodes

论文下载:http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7325392

这篇论文讨论了如何写短小的egg-hunting code,并如何结合ROP进行利用。

Egg-hunters

Egg hunting 这种技巧可以被归为“分级shellcode”,它主要可以支持你用一小段特制的shellcode来找到你的实际的(更大的)shellcode(Egg),原理就是通过在内存中搜索最终shellcode。换句话说,一段短代码先执行,然后再去寻找真正的shellcode并执行。

要有效使用这个技巧,以下是三个重要的条件。

  1. 你必须能跳到(jmp,call,push/ret)并且执行“一些”shellcode。可用缓冲区空间可以相对较小,因为它只需要包含一些Egg-hunters code。
  2. 最终的shellcode必须在一个可用的存储空间中(堆、栈、etc)
  3. 你必须要用一个独特的记号标记最终的shellcode。最初的shellcode(Egg-hunter code)会遍历内存空间,寻找这个小标记。找到它后,用一个jmp或call指令跳转到小标记后面的代码中执行。这就意味着你需要在Egg-hunter code中定义这个标记,并且把标记写到实际shellcode的前面。

MINIMAL LENGTH EGG-HUNTER SHELLCODES

Fig

Fig

Fig

Fig

前提:

  1. 一个寄存器(如 esp)存储了 shellcode 下方的地址,且这个地址到shellcode之间没有未分配的内存
  2. 在exploitation过程中,ecx是0或者比(addr(shellcode)-addr(start address))大
  3. Hunter 4 中的 one-byte egg-tag 不会出现在start address 和 shellcode 之间的内存中.
  4. DF 为0.

EGG-HUNTING WITH RETURN ORIENTED PROGRAMMING

开了NX的情况

  1. ROP关闭内存保护,然后在原来位置上执行egg-hunting code
  2. 构造 egg-hunting ROP
  3. 使用 ROP 将 egg-hunting code 复制到可执行区域然后执行.
  4. Practical realisation of ROP egg-hunting

真正的shellcode被内存保护的情况,ROP关闭内存保护

Fig

CONCLUSIONS

缺点:

  1. 攻击者可以代码执行(the process’ memory contains at least one writeable and executable codepage, or a Just in Time (JIT))
  2. 短小的egg-hunter 可以被string signatures识别
  3. 因为造成了很高的CPU占用,可以被行为识别出来 Fig

优点 用途广泛