Linux内核中KASLR功能是什么?有什么作用?怎么破除?以及如何实操?(地址空间、layout random、kallsyms)

本文详细介绍了KASLR(KernelAddressSpaceLayoutRandomization)的作用、如何开启与检查、以及在实战中的应用,包括破解KASLR的方法,以及在gdb调试Linux内核时的地址计算技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 背景

KASLR是一个什么技术点其实不重要,但重要的是有了KASLR这个功能后,造成内核中某个符号(函数 or 变量)在System.map中的地址和实际不一样了(实际: cat /proc/kallsyms),进一步带来了分析类似crash问题中的打印地址不准确问题。所以必须得知道这是什么?本文主要从实战层面来谈几个问题:

  1. KASLR是什么?
  2. KASLR如何开启?如何查看开启了?
  3. 破除KASLR的几个方法(有些奇技淫巧)
  4. 破除KASLR后再实战中有何作用?

2. 要点

  • KASLR:kernel address space layout randomization 内核地址空间布局随机化。是一个安全功能,本质是将链接的地址 mapping到 运行的地址多做了一个随机偏移。断句是:KAS LR,KAS的LR

  • 作者:Kees Cook,linux内核的安全工程师(Linux kernel security engineer),曾是Ubuntu Security Team的技术老大。更多参考链接: Cook的LinkedinCook的github仓库Cook更多介绍
    在这里插入图片描述

  • ASLR:address space layout randomization地址空间布局随机化,是一种众所周知的技术,它通过将各种对象随机放置在而不是固定的地址上来增加攻击的难度。参考Wiki

  • ASLR首次提出:Linux PaX 项目首先创造了“ASLR”这个术语,并于 2001 年 7 月作为 Linux 内核的补丁发布了 ASLR 的第一个设计和实现。参考Wiki

  • 第一个默认支持 ASLR 的主流操作系统是 2003 年的 OpenBSD 3.4 版, 其次是 2005 年的 Linux。参考Wiki

  • ASLR是一种“统计防御”,因为一般可以使用暴力方法来克服它

  • 在一个完全不受限制的系统中,尤其是在本地不受信任的用户的系统中,KASLR 不会很有用。但是,在使用容器或具有大量包含进程的系统上,KASLR 可以提供帮助。参考链接

  • Linux 长期以来一直为用户空间程序提供 ASLR。参考链接

  • 在虚拟机内使用较多,提高虚拟机安全性

  • 让内核vmlinux在运行态的地址相比于编译的地址有一个偏移,具体偏移值通过DTS配置

  • 另外如果可以参数化,在bootloader中配置,可以动态设置每次每个设备都是不同的映射地址

  • Red Hat Enterprise Linux 7.5 and later开始引入,参考redhat 官网

  • 如何避免内核消息卸载:通过将 dmesg_restrict sysctl 设置为 1,防止非特权用户访问内核消息。此设置将 dmesg 访问限制为具有 CAP_SYSLOG 权限的用户。proc通过kptr_restrict sysctl 设置为 1。

3. 实操

3.1 查看是否打开:CONFIG_RANDOMIZE_BASE

内核编译是否配置 CONFIG_RANDOMIZE_BASE=y

cat /boot/config-$(uname -r) |grep CONFIG_RANDOMIZE_BASE

实操:
在这里插入图片描述

  • 在bootloader配置中关闭的方式,添加nokaslr的启动项
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet nokaslr"
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值