当前位置: 首页 > article >正文

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()


http://www.kler.cn/a/411963.html

相关文章:

  • C++设计模式-中介者模式
  • Vue前端开发2.3.5 条件渲染指令
  • Selenium 自动化测试demo
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【二】
  • 计算(a+b)/c的值
  • docker 通过Dockerfile自定义的镜像部署Springboot项目
  • DAMODEL丹摩|丹摩平台:AI时代的开发者福音
  • 微信小程序+Vant-自定义选择器组件(多选
  • 【Zookeeper 和 Kafka】为什么 Zookeeper 不用域名?
  • 权限的相关内容
  • 昇思MindSpore第六课---Roberta Prompt Turning
  • c#异步编程(async/await)
  • 阿里云多账号统一认证
  • 玛哈特矫平机:精密制造中的平整大师
  • 多模态大型语言模型(MLLM)综述
  • 微信小程序数据请求教程:GET与POST请求详解
  • Centos 7 系统 openGauss 3.1.0 一主两备集群安装部署指南
  • vue config 接口地址配置
  • Sklearn 内置数据集简介
  • Vue ECharts 基本数据图表绘制详解:让数据飞起来
  • Vue前端开发2.3.2-4 绑定指令
  • C++设计模式-模板模式,Template Method
  • 美国网络安全和基础设施安全局 发布首部国际战略规划
  • 802.15.4 WPAN协议-MAC帧结构
  • Android显示系统(01)- 架构分析
  • Leetcode3206:交替组 I