0x19 Protection

Author Avatar
张Mini Nov 30, 2018
  • Read this article on other devices

ASLR(地址随机化)

  • 程序每一次执行的时候,heap、stack、library等的位置都不一样

  • 检查是否开启ASLR

    • cat /proc/sys/kernel/randomize_va_space

DEP/NX(数据执行保护)

  • 可写的程序不可执行,可执行的程序不可写

PIE(地址无关可执行文件)

  • gcc在默认情况下没有开启,编译时加上 -fPIC -pie就可以开启

  • 没开启时程序的data段以及code段会是固定的

  • 一旦开启以后data以及code也会随着ASLR,因此没有固定的位置可以跳就会变的困难许多

Stack Guard

  • 编译器对stack overflow的一种保护机制

  • 在函数被调用时,先在stack上放canary

  • 函数返回前先检查这个值有没有被修改

  • 可以有效的防止缓冲区溢出攻击

ROP

  • 一种利用现有的程序片段组合出想要功能的技巧

    • 可以使用ROP解除DEP限制,然后执行shellcode

    • 可以使用ROP绕过ASLR限制

    • 可以使用ROP绕过Stack Guard

    • 可以使用ROP绕过PIE

  • ROP
    • Gadget: 一小段以ret结尾的code
    • ROP Chain: 串联在一起的Gadget,组合出需要的功能
    • Gadget执行完后,还可以继续return
    • 只要在stack上按正确的顺序排列好每一个gadget的address和对应的stack frame,就可以执行复杂的功能
  • 类型
    • 控制寄存器做syscall
    • 使用原程序里的function
    • 使用libc里的gadget或function(绕过ASLR)
  • 查找ROP
    • ROPgadget –binary ./xxx
    • ROPgadget –binary ./xxx –opcode cd80c3(int 0x80 ; ret)