Linux地址空间随机化

        ASLR(Address Space Layout Randomization)在2005年被引入到Linux的内核 kernel 2.6.12 中,早在2004年就以补丁的形式引入。内存地址的随机化,意味着同一应用多次执行所使用内存空间完全不同,也意味着简单的缓冲区溢出攻击无法达到目的。

1. 查看ASLR设置

cat /proc/sys/kernel/randomize_va_space
sysctl -a --pattern randomize

 


  

2. 配置选项

  • 0 = 关闭
  • 1 = 半随机。共享库、栈、mmap() 以及 VDSO 将被随机化。(留坑,PIE会影响heap的随机化。。)
  • 2 = 全随机。除了1中所述,还有heap。

3. 关闭ASLR

  • 方法一: 手动修改randomize_va_space文件

诚如上面介绍的randomize_va_space文件的枚举值含义,设置的值不同,linux内核加载程序的地址空间的策略就会不同。比较简单明了。这里0代表关闭ASLR。

echo 0 > /proc/sys/kernel/randomize_va_space
注意,这里需要root权限
  • 方法二: 使用sysctl控制ASLR
sysctl -w kernel.randomize_va_space=0
这是一种临时改变随机策略的方法,重启之后将恢复默认。如果需要永久保存配置,需要在配置文件 /etc/sysctl.conf 中增加这个选项。
  • 方法三: 使用setarch控制单个程序的随机化

如果你想历史关闭单个程序的ASLR,使用setarch是很好的选择。setarch命令如其名,改变程序的运行架构环境,并可以自定义环境flag。

setarch `uname -m` -R ./your_program
 -R参数代表关闭地址空间随机化(开启ADDR_NO_RANDOMIZE)

方法四: 在GDB场景下,使用set disable-randomization off
在调试特定程序时,可以通过set disable-randomization命令开启或者关闭地址空间随机化。默认是关闭随机化的,也就是on状态。

关闭ASLR:

set disable-randomization on


开启ASLR:

set disable-randomization off


查看ASLR状态:

show disable-randomization

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 11:34:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 11:34:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 11:34:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 11:34:06       18 阅读

热门阅读

  1. Vue3中定义变量是选择ref还是reactive?

    2023-12-06 11:34:06       29 阅读
  2. KM算法,C语言版本和Matlab版本

    2023-12-06 11:34:06       37 阅读
  3. Flask 最佳实践(二)

    2023-12-06 11:34:06       30 阅读
  4. jQuery&layui

    2023-12-06 11:34:06       33 阅读
  5. xml中的特殊字符

    2023-12-06 11:34:06       26 阅读
  6. python实现模拟用户点击行为测试

    2023-12-06 11:34:06       36 阅读
  7. 使用Vue写一个日期选择器

    2023-12-06 11:34:06       39 阅读
  8. 方法重写,函数重载,方法覆盖的区别

    2023-12-06 11:34:06       42 阅读
  9. 【Flink on k8s】4 - 在 Kubernetes 上运行容器

    2023-12-06 11:34:06       36 阅读
  10. 反汇编看指令重排

    2023-12-06 11:34:06       36 阅读
  11. 无状态登录和有状态登录

    2023-12-06 11:34:06       37 阅读