IT评测·应用市场-qidao123.com

标题: Linux内核内存保护机制:aslr和canary [打印本页]

作者: 魏晓东    时间: 2024-12-11 03:28
标题: Linux内核内存保护机制:aslr和canary
Linux内核内存保护机制:aslr和canary

ASLR

ASLR技术,全称为Address space layout randomization(地点空间布局随机化),是现代通用操作系统基本都会配备的一个功能,其确保了每次实例化进程时内存排布都是差别的。
对于某些内存段,会附加随机的offset来防止缓冲区攻击等,这是OS层面的保护,当然也可以兼容硬件层面利用ECC bit举行正当性检测的冗余保护。
更确切的说,在Linux系统下的进程模型中,aslr对于内存排布的影响如下:
进程地点空间排布(来自代码随想录,仅供参考):

GDB情况下运行程序,aslr是默认关闭的,这也便于我们举行程序的调试。
这里举出来一个典型的实用案例:
我在工作的现实需求中需要建立一个假造化的沙盒,底层基座依赖了一个uni-kernel的bsd系统,出于sandbox的snapshot迁移重放需求,需要手动关闭aslr机制,并附加硬件层面的内存保护。
开启/关闭aslr执行以下代码,开启为1,关闭为0:
  1. sysctl kern.elf64.aslr.stack=0  
  2. sysctl kern.elf64.aslr.pie_enable=0  
  3. sysctl kern.elf64.aslr.enable=0  
  4. sysctl kern.elf64c.aslr.stack=0  
  5. sysctl kern.elf64c.aslr.pie_enable=0  
  6. sysctl kern.elf64c.aslr.enable=0  
  7. sysctl -a | grep aslr  
复制代码
如果利用gcc编译器的时候,可以附加-fPIE的编译选项,以支持aslr机制。
canary

我们的栈中通常有一个magic number,用来检测该块内存空间是否被其他不测修改。它有一个好听的名字:canary,金丝雀,美丽而又脆弱。
它通常被部署在栈顶返回地点附近的某个位置,确保该处空间没有被外部缓冲区溢出修改,虽然只是一个简朴的机制,但是可以防止很多比力简朴的攻击或者非恶意失误,是内存保护的第一道防线。
通常在函数被调用时生成,且该段对于用户态来说是严格不可读的,以是只能用fork/提权/劫持sys函数等暴力破拆的方式探测处置惩罚。
这个头脑不仅限于内核场景,在通用需求下做数据校验的时候也可以利用,或者需求可靠的TCB场景时也可用。这种情况下就是在user space中举行自定义规则的校验了。
在gcc/clang中可以利用-fno-stack-protector编译选项来禁用canary,但如果你不明确知道本身在干什么,不要这么做!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4