首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在运行时检测是否启用或禁用了KASLR?

如何在运行时检测是否启用或禁用了KASLR?
EN

Ask Ubuntu用户
提问于 2015-12-01 15:26:31
回答 3查看 11K关注 0票数 9

如何检测运行时是否启用或禁用了KASLR?

EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2016-03-04 20:29:47

检查内核命令行。(以debian 8为例)

代码语言:javascript
运行
复制
$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-`uname -r` root=/dev/mapper/`hostname`-root ro quiet

kASLR是可用的,从Ubuntu14.10开始,但默认情况下不启用它。在内核命令行上指定使用kASLR的"kaslr“选项。注意:启用kASLR将禁用进入休眠模式的能力。

来源:https://wiki.ubuntu.com/Security/Features

票数 3
EN

Ask Ubuntu用户

发布于 2018-03-31 20:38:26

回答以下问题:

代码语言:javascript
运行
复制
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.14.27-041427-generic root=UUID=f3f8e7bc-b337-4194-88b8-3a513f6be55b ro quiet splash loglevel=0 vga=current udev.log-priority=3 fastboot kaslr acpiphp.disable=1 crashkernel=384M-2G:128M,2G-:256M vt.handoff=7
票数 4
EN

Ask Ubuntu用户

发布于 2020-08-06 17:02:48

我对前面的答案并不满意,因为它们确实无法验证KASLR到底是什么--特别是不实现相同内核命令行接口的嵌入式或自定义内核(例如,ARM64需要在内核启动时出现一个名为kaslr-seed的设备树节点。这通常由引导器使用安全的随机数生成器实现)。

在运行时,我知道有两件事您可以检查:

  1. 在虚拟内存地址空间中查看符号地址的/proc/kallsyms文件。
  2. lsmod来查看虚拟内存地址空间中的内核模块地址。注意:在某些机器上,lsmod可能不显示地址。在这种情况下,尝试使用cat /proc/modules作为根用户。如果不使用根,则地址可能为所有零(出于安全原因被清除)。感谢用户@crass的评论!

两者都是类似的检查,但取决于您在系统上可用的是什么,您可能需要使用其中一个。

1. /proc/kallsyms

要做到这一点,只需查看/proc/kallsyms的前几行:

代码语言:javascript
运行
复制
root@device:~# head -n 3 /proc/kallsyms
ffffff8008080000 t _head
ffffff8008080000 T _text
ffffff8008080800 T do_undefinstr

注意,例如,_head的地址是ffff ff80 0808 0000

现在重新启动您的机器,并再次检查。

代码语言:javascript
运行
复制
root@device:~# head -n 3 /proc/kallsyms
ffffff9fc8c80000 t _head
ffffff9fc8c80000 T _text
ffffff9fc8c80800 T do_undefinstr

请注意,例如,_head的地址现在是ffff ff9f c8c8 0000

比较高级别的字节,并找到ffffff80080 != 0xffffff9fc8c,以便在重新启动时更改地址,=> KASLR已启用。

2. lsmod

类似于上面的/proc/kallsyms方法:检查lsmod,重新引导,再次检查lsmod,并比较地址。

代码语言:javascript
运行
复制
root@device:~# lsmod
iptable_filter 16384 0 - Live 0xffffffa1c49b9000
ip_tables 28672 1 iptable_filter, Live 0xffffffa1c49ad000

注意,例如,iptable_filter的地址是ffff ffa1 c49b 9000

现在重新启动您的机器,并再次检查。

代码语言:javascript
运行
复制
root@device:~# lsmod
iptable_filter 16384 0 - Live 0xffffff2100716000
ip_tables 28672 1 iptable_filter, Live 0xffffff210070a000

请注意,例如,iptable_filter的地址现在是ffff ff21 0071 6000

比较高级别的字节,并找到ffffff2100716 != 0xffffffa1c49b9,以便在重新启动时更改地址,=> KASLR已启用。

您可以迭代地进行这些测试,以确定随机性的质量。跨重新引导的地址有多大不同?有明显的模式吗?KASLR的安全效益与随机性或熵的质量成正比。

参考文献:

用KASL调试Linux内核

用于随机化的Linux内核驱动程序数据库_基座

票数 4
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/704640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档