Android:有没有办法在运行时验证KASLR
我想知道是否有一种方法可以检查在android target中是否在运行时启用了KASLR 我知道ASLR可以通过检查/proc/sys/kernel/randomize_va__空间与值2(用户空间应用程序的完全随机化)来验证 我已经配置了Android:有没有办法在运行时验证KASLR,android,security,kernel,runtime,aslr,Android,Security,Kernel,Runtime,Aslr,我想知道是否有一种方法可以检查在android target中是否在运行时启用了KASLR 我知道ASLR可以通过检查/proc/sys/kernel/randomize_va__空间与值2(用户空间应用程序的完全随机化)来验证 我已经配置了 CONFIG_RANDOMIZE_BASE=y 在board defconfig文件中 现在我想在运行时验证它 我们在Android p中使用内核版本4.14 我已经看到它在ubuntu中对内核命令行args进行了同样的检查 我在BoardConfig
CONFIG_RANDOMIZE_BASE=y
在board defconfig文件中
现在我想在运行时验证它
我们在Android p中使用内核版本4.14
我已经看到它在ubuntu中对内核命令行args进行了同样的检查
我在BoardConfig.mk的android命令行args中没有看到此选项。KASLR的实现细节取决于CPU体系结构(x86、ARM、ARM64、PowerPC等),因此我无法说明您是否正确配置了它,但在运行时,我知道有两件事您可以检查:
/proc/kallsyms
文件查看虚拟内存地址空间中的符号地址lsmod
查看虚拟内存地址空间中的内核模块地址注意:在某些机器上,lsmod
可能不显示地址。在这种情况下,尝试使用cat/proc/modules
作为根目录。如果不使用root,地址可能全部为零(出于安全原因清除)~~感谢用户@cras的评论~~李>
1和2都是类似的检查,但根据系统上的可用内容,您可能需要使用其中一种
1. /proc/kallsyms
为此,只需查看/proc/kallsyms
的前几行:
root@device:~# head -n 3 /proc/kallsyms
ffffff8008080000 t _head
ffffff8008080000 T _text
ffffff8008080800 T do_undefinstr
请注意,例如,头的地址是FFFF80 0808 0000
现在重新启动计算机并再次检查
root@device:~# head -n 3 /proc/kallsyms
ffffff9fc8c80000 t _head
ffffff9fc8c80000 T _text
ffffff9fc8c80800 T do_undefinstr
root@device:~# lsmod
iptable_filter 16384 0 - Live 0xffffff2100716000
ip_tables 28672 1 iptable_filter, Live 0xffffff210070a000
请注意,例如,\u head
的地址现在是ffff ff9f c8c8 0000
比较高级字节,发现ffffff80080!=0xFFFF9FC8C
因此地址会在重新启动时更改。-->KASLR已启用
2.lsmod
类似于上面的/proc/kallsyms
方法:检查lsmod,重新启动,再次检查lsmod,然后比较地址
root@device:~# lsmod
iptable_filter 16384 0 - Live 0xffffffa1c49b9000
ip_tables 28672 1 iptable_filter, Live 0xffffffa1c49ad000
注意,例如,iptable_filter
的地址是ffffa1 c49b 9000
现在重新启动计算机并再次检查
root@device:~# head -n 3 /proc/kallsyms
ffffff9fc8c80000 t _head
ffffff9fc8c80000 T _text
ffffff9fc8c80800 T do_undefinstr
root@device:~# lsmod
iptable_filter 16384 0 - Live 0xffffff2100716000
ip_tables 28672 1 iptable_filter, Live 0xffffff210070a000
请注意,例如,iptable_filter
的地址现在是ffff21 0071 6000
比较高级字节,发现ffffff2100716!=0xffffffa1c49b9
,因此地址会在重新启动时更改。KASLR已启用
您可以反复进行这些测试,以确定随机性的质量。重新启动时的地址有多大不同?有明显的模式吗?KASLR的安全效益与随机性或熵的质量成正比
参考文献: