NX(又可称DEP)保护机制
NX即No-eXecute(栈禁止执行)的意思,NX保护的基本原理就是将数据所在的内存页标识位禁止执行,当程序溢出转入shellcode的时候,程序会在数据页面尝试执行指令,此时CPU会抛出异常,而不去执行编写的恶意指令。
NX保护机制实际上就是不让我们直接利用程序中的某段代码或者自己填写的shellcode来获取shell,而是先绕过保护机制然后得到shell,例如ret2syscall是利用程序中的gadgets来获得shell,libc则是控制函数的执行libc中的函数,通常是返回至某个函数的plt处或者函数的具体位置(函数对应的got表内容)。
Stack(又可称Canary)保护机制
栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode执行获取shell。当启用栈保护后,函数开始执行的时候会先往栈里插入cookie安全信息,当函数返回的时候会验证cookie信息是否正确,如果不正确就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给一同覆盖掉,导致栈保护检查失败而确保shellcode的执行。在Linux中我们将cookie信息称为canary,简单来说,Stack保护机制会在栈溢出的返回地址放上一个cookie安全标志,若该标志发生改变,则程序停止运行;反之,获取shell成功。
Comments | NOTHING