Linux KASLR

KASLR
     (kernel address space layout randomization) 内核地址空间布局随机化。是一个安全功能,本质是将链接的地址映射到运行的地址多做了一个随机偏移。即是在kernal image加载到内存时对其进行偏移和重定位。


KASLR的工作原理

    在内核启动阶段,通过获取一个随机值,并对内核加载地址进行相应的随机偏移。该偏移值既可以通过dtb传递,也可以基于随机源生成,在完成内核数据随机映射之后,还需要对符号地址进行重定位,校正内核代码的符号寻址,以此确保内核代码的正常执行。


KASLR的实现方式

    linux在进行编译构建时会将所有的内核代码链接成vmlinux(ELF文件,包含注释信息..,内核启动时无用),通过OBJCOPY删除不必要信息后得到image,再经过压缩后链接内部解压代码形成最终的vmlinux,最后再通过OBJCOPY运行内部解压代码形成最后的zimage。

    内核在进行镜像加载时会先将zimage加载到固定位置,pc会从自解压代码入口处开始执行,解压后会将image向下迁移,开启KASLR后会在执行自解压前创建一个offset,在解压时添加offset将内核镜像解压到随机位置。

    有了KASLR这个功能后,造成内核中某个符号(函数 or 变量)在System.map中的地址和实际不一样了(实际: cat /proc/kallsyms),进一步带来了分析类似crash问题中的打印地址不准确。


KASLR的开启与关闭

    内核编译配置
    cat /boot/config-$(uname -r) | grep CONFIG_RANDOMIZE_BASE
    CONFIG_RANDOMIZE_BASE=y

    vi /etc/default/grub

    GRUB_CMDLINE_LINUX_DEFAULT="quiet nokaslr"

start_kernel() ---> setup_arch() ---> kernel_randomize_memory()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值