Linux程序常用的安全保护机制
程序员文章站
2024-03-19 14:31:46
...
操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP、ASLR等。在编写漏洞利用代码的时候,需要特别注意目标进程是否开启了DEP(Linux下对应NX)、ASLR(Linux下对应PIE)等机制,例如存在DEP(NX)的话就不能直接指执行栈上的数据,存在ASLR各个系统调用的地址就是随机化的。
CANARY
栈溢出保护是一种缓冲区溢出缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。当启用栈保护后,函数开始执行的时候先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序执行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中我们将cookie信息称为canary。
FORTIFY
fority用于检查是否存在缓冲区溢出的错误。使默认情况下,不会开启这个检查,用情形是程序采用大量的字符串或者内存操作函数,
gcc -D_FORTIFY_SOURCE=1 #仅仅只会在编译时进行检查
gcc -D_FORTIFY_SOURCE=2 #程序执行时也会有检查 ,如果检查到缓冲区溢出,就终止程序
NX
NX即No-Execute,NX(DEP)的基本原理是将数据所在的内存页标识为不可执行,当程序溢出成功转入shellcode时,陈旭会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
PIE
PIE(ASLR)内存地址随机化机制,Address Space Layout Randomization
RELRO
relro(read only relocation)
设置符号重定向表为只读或在程序启动时就解析并绑定所有动态符号,从而减少对GOT攻击。
下一篇: Md5加密的简单实现