内核参数randomize_va_space用于控制系统级ASLR

0 关闭ASLR

1 mmap base、stack、vdso page将随机化。这意味着.so文件将被加载到随机地址。链接时指定了-pie选项的可执行程序,其代码段加载地址将被随机化。配置内核时如果指定了CONFIG_COMPAT_BRK,randomize_va_space缺省为1。此时heap没有随机化。

2 在1的基础上增加了heap随机化。配置内核时如果禁用CONFIG_COMPAT_BRK,randomize_va_space缺省为2。

查询randomize_va_space当前设置

# sysctl -n kernel.randomize_va_space
1
# cat /proc/sys/kernel/randomize_va_space
1

关闭ASLR:

# sysctl -w kernel.randomize_va_space=0
# echo 0 > /proc/sys/kernel/randomize_va_space

可以用ldd快速判断当前系统是否启用了ASLR:

$ ldd `which col`
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7ded000)
/lib/ld-linux.so.2 (0x80000000) $ ldd `which col`
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7db5000)
/lib/ld-linux.so.2 (0x80000000) $ ldd `which col`
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7db0000)
/lib/ld-linux.so.2 (0x80000000)

注意,本例中有两个so的加载基址未被随机化。

$ cat /proc/self/maps > 1.txt

$ cat /proc/self/maps > 2.txt

$ diff 1.txt 2.txt

4,15c4,15

< b7bb1000-b7db1000 r--p 00000000 08:01 98130 /usr/lib/locale/locale-archive

< b7db1000-b7db2000 rw-p b7db1000 00:00 0

< b7db2000-b7ef2000 r-xp 00000000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

< b7ef2000-b7ef4000 r--p 0013f000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

< b7ef4000-b7ef5000 rw-p 00141000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

< b7ef5000-b7ef8000 rw-p b7ef5000 00:00 0

< b7f09000-b7f0b000 rw-p b7f09000 00:00 0

< b7f0b000-b7f0c000 r-xp b7f0b000 00:00 0 [vdso]

< b7f0c000-b7f27000 r-xp 00000000 08:01 1046552 /lib/ld-2.11.2.so

< b7f27000-b7f28000 r--p 0001a000 08:01 1046552 /lib/ld-2.11.2.so

< b7f28000-b7f29000 rw-p 0001b000 08:01 1046552 /lib/ld-2.11.2.so

< bfe27000-bfe3d000 rw-p bfe27000 00:00 0 [stack]


b7bfa000-b7dfa000 r--p 00000000 08:01 98130 /usr/lib/locale/locale-archive

b7dfa000-b7dfb000 rw-p b7dfa000 00:00 0

b7dfb000-b7f3b000 r-xp 00000000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7f3b000-b7f3d000 r--p 0013f000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7f3d000-b7f3e000 rw-p 00141000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7f3e000-b7f41000 rw-p b7f3e000 00:00 0

b7f52000-b7f54000 rw-p b7f52000 00:00 0

b7f54000-b7f55000 r-xp b7f54000 00:00 0 [vdso]

b7f55000-b7f70000 r-xp 00000000 08:01 1046552 /lib/ld-2.11.2.so

b7f70000-b7f71000 r--p 0001a000 08:01 1046552 /lib/ld-2.11.2.so

b7f71000-b7f72000 rw-p 0001b000 08:01 1046552 /lib/ld-2.11.2.so

bfa6e000-bfa83000 rw-p bfa6e000 00:00 0 [stack]

diff输出表明stack、vsdo page、一些so的地址均被随机化。

$ cat 1.txt

08048000-0804f000 r-xp 00000000 08:01 196226 /bin/cat

0804f000-08050000 rw-p 00006000 08:01 196226 /bin/cat

08050000-08071000 rw-p 08050000 00:00 0 [heap]

b7bb1000-b7db1000 r--p 00000000 08:01 98130 /usr/lib/locale/locale-archive

b7db1000-b7db2000 rw-p b7db1000 00:00 0

b7db2000-b7ef2000 r-xp 00000000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7ef2000-b7ef4000 r--p 0013f000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7ef4000-b7ef5000 rw-p 00141000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7ef5000-b7ef8000 rw-p b7ef5000 00:00 0

b7f09000-b7f0b000 rw-p b7f09000 00:00 0

b7f0b000-b7f0c000 r-xp b7f0b000 00:00 0 [vdso]

b7f0c000-b7f27000 r-xp 00000000 08:01 1046552 /lib/ld-2.11.2.so

b7f27000-b7f28000 r--p 0001a000 08:01 1046552 /lib/ld-2.11.2.so

b7f28000-b7f29000 rw-p 0001b000 08:01 1046552 /lib/ld-2.11.2.so

bfe27000-bfe3d000 rw-p bfe27000 00:00 0 [stack]

$ cat 2.txt

08048000-0804f000 r-xp 00000000 08:01 196226 /bin/cat

0804f000-08050000 rw-p 00006000 08:01 196226 /bin/cat

08050000-08071000 rw-p 08050000 00:00 0 [heap]

b7bfa000-b7dfa000 r--p 00000000 08:01 98130 /usr/lib/locale/locale-archive

b7dfa000-b7dfb000 rw-p b7dfa000 00:00 0

b7dfb000-b7f3b000 r-xp 00000000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7f3b000-b7f3d000 r--p 0013f000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7f3d000-b7f3e000 rw-p 00141000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7f3e000-b7f41000 rw-p b7f3e000 00:00 0

b7f52000-b7f54000 rw-p b7f52000 00:00 0

b7f54000-b7f55000 r-xp b7f54000 00:00 0 [vdso]

b7f55000-b7f70000 r-xp 00000000 08:01 1046552 /lib/ld-2.11.2.so

b7f70000-b7f71000 r--p 0001a000 08:01 1046552 /lib/ld-2.11.2.so

b7f71000-b7f72000 rw-p 0001b000 08:01 1046552 /lib/ld-2.11.2.so

bfa6e000-bfa83000 rw-p bfa6e000 00:00 0 [stack]

检查原始输出,主映像、heap未被随机化。

关闭ASLR之后再测试一遍:

sysctl -w kernel.randomize_va_space=0

kernel.randomize_va_space = 0

cat /proc/self/maps > 1.txt

cat /proc/self/maps > 2.txt

diff 1.txt 2.txt

diff无输出,表示各内存区域基址未被随机化。

cat 1.txt

08048000-0804f000 r-xp 00000000 08:01 196226 /bin/cat

0804f000-08050000 rw-p 00006000 08:01 196226 /bin/cat

08050000-08071000 rw-p 08050000 00:00 0 [heap]

b7c8a000-b7e8a000 r--p 00000000 08:01 98130 /usr/lib/locale/locale-archive

b7e8a000-b7e8b000 rw-p b7e8a000 00:00 0

b7e8b000-b7fcb000 r-xp 00000000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fcb000-b7fcd000 r--p 0013f000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fcd000-b7fce000 rw-p 00141000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fce000-b7fd1000 rw-p b7fce000 00:00 0

b7fe2000-b7fe4000 rw-p b7fe2000 00:00 0

b7fe4000-b7fe5000 r-xp b7fe4000 00:00 0 [vdso]

b7fe5000-b8000000 r-xp 00000000 08:01 1046552 /lib/ld-2.11.2.so

b8000000-b8001000 r--p 0001a000 08:01 1046552 /lib/ld-2.11.2.so

b8001000-b8002000 rw-p 0001b000 08:01 1046552 /lib/ld-2.11.2.so

bffeb000-c0000000 rw-p bffeb000 00:00 0 [stack]

内核参数randomize_va_space置0会关闭整个系统的ASLR,有时候只想关闭单个进程

的ASLR,可以用setarch命令实现这点。

$ setarch uname -m -R cat /proc/self/maps > 1.txt

$ setarch uname -m -R cat /proc/self/maps > 2.txt

$ diff 1.txt 2.txt

diff无输出,表示各内存区域基址未被随机化。

$ cat 1.txt

08048000-0804f000 r-xp 00000000 08:01 196226 /bin/cat

0804f000-08050000 rw-p 00006000 08:01 196226 /bin/cat

08050000-08071000 rw-p 08050000 00:00 0 [heap]

b7c8a000-b7e8a000 r--p 00000000 08:01 98130 /usr/lib/locale/locale-archive

b7e8a000-b7e8b000 rw-p b7e8a000 00:00 0

b7e8b000-b7fcb000 r-xp 00000000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fcb000-b7fcd000 r--p 0013f000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fcd000-b7fce000 rw-p 00141000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fce000-b7fd1000 rw-p b7fce000 00:00 0

b7fe2000-b7fe4000 rw-p b7fe2000 00:00 0

b7fe4000-b7fe5000 r-xp b7fe4000 00:00 0 [vdso]

b7fe5000-b8000000 r-xp 00000000 08:01 1046552 /lib/ld-2.11.2.so

b8000000-b8001000 r--p 0001a000 08:01 1046552 /lib/ld-2.11.2.so

b8001000-b8002000 rw-p 0001b000 08:01 1046552 /lib/ld-2.11.2.so

bffea000-c0000000 rw-p bffea000 00:00 0 [stack]


奇怪的是,setarch关闭单个进程ASLR时,stack的地址有时会变,并不总是固定的,

这是什么情况?而内核参数randomize_va_space置0时,就没有观察到这种现象。

$ setarch uname -m -R cat /proc/self/maps > 1.txt

$ setarch uname -m -R cat /proc/self/maps > 2.txt

$ diff 1.txt 2.txt

15c15

< bffeb000-c0000000 rw-p bffeb000 00:00 0 [stack]


bffea000-c0000000 rw-p bffea000 00:00 0 [stack]

$ cat 1.txt

08048000-0804f000 r-xp 00000000 08:01 196226 /bin/cat

0804f000-08050000 rw-p 00006000 08:01 196226 /bin/cat

08050000-08071000 rw-p 08050000 00:00 0 [heap]

b7c8a000-b7e8a000 r--p 00000000 08:01 98130 /usr/lib/locale/locale-archive

b7e8a000-b7e8b000 rw-p b7e8a000 00:00 0

b7e8b000-b7fcb000 r-xp 00000000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fcb000-b7fcd000 r--p 0013f000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fcd000-b7fce000 rw-p 00141000 08:01 769046 /lib/i686/cmov/libc-2.11.2.so

b7fce000-b7fd1000 rw-p b7fce000 00:00 0

b7fe2000-b7fe4000 rw-p b7fe2000 00:00 0

b7fe4000-b7fe5000 r-xp b7fe4000 00:00 0 [vdso]

b7fe5000-b8000000 r-xp 00000000 08:01 1046552 /lib/ld-2.11.2.so

b8000000-b8001000 r--p 0001a000 08:01 1046552 /lib/ld-2.11.2.so

b8001000-b8002000 rw-p 0001b000 08:01 1046552 /lib/ld-2.11.2.so

bffeb000-c0000000 rw-p bffeb000 00:00 0 [stack]

如何判断当前LINUX系统启用了ASLR的更多相关文章

  1. VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录

    VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录 一.描述 系统描述:win7旗舰版64位系统+VMware Workst ...

  2. 在CentOS Linux系统上,添加新的端口,启用ssh服务

    SSH作为Linux远程连接重要的方式,如何配置安装linux系统的SSH服务,如何开启SSH? SSH是什么? SSH 为 Secure Shell 由 IETF 的网络工作小组(Network W ...

  3. 如何判断系统是32位还是64位的linux系统

    如何判断系统是32位还是64位的linux系统 某日,需要下载个安装包,忽然忘记了自己的系统是32位还是64位的系统了,一时想不起来怎么查看时32位还是64位,呵呵,随便百度下,就发现有好多方法,这里 ...

  4. Linux系统判断当前运行的 Apache 所使用的配置文件

    问题描述 由于历史备份.更新等原因,导致在 Linux 系统服务器中存在多个 Apache目录,如果不是网站的配置人员,可能会不清楚应该修改哪个配置文件进行网站调整. 解决方案 可以通过如下步骤,判断 ...

  5. linux查询健康状态,如何直观的判断你的Linux系统是否健康

    一提到对于查看系统运行的健康状况,可能大多数朋友考虑到的就是查看进程或者打开任务管理器,但是对于应用在真实生产环境中服务器的linux系统来说,以上两种方式都不是***效的查看方式,那么今天就给大家推 ...

  6. 嵌入式之Linux系统裁剪和定制---(kernel+busyboxy+dropbear+nginx)

    本文将介绍通过完全手动定制内核,在此基础上添加 busybox ,并实现远程登陆,使裁剪的 linux 能够运行 nginx . 在此之前介绍一下 linux 系统的启动流程. linux系统启动流程 ...

  7. 【夯实Mysql基础】MySQL在Linux系统下配置文件及日志详解

    本文地址 分享提纲: 1. 概述 2. 详解配置文件 3. 详解日志 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于 ...

  8. Linux系统排查1——内存篇

    常见工作中,计算机系统的资源主要包括CPU,内存,硬盘以及网络,过度使用这些资源将使系统陷入困境.本系列一共四篇博文,结合我在实习期间的学习,介绍一些常见的Linux系统排障工具及方法. 第1篇——内 ...

  9. linux系统被入侵后处理经历【转】

    背景 操作系统:Ubuntu12.04_x64 运行业务:公司业务系统,爬虫程序,数据队列. 服务器托管在外地机房. 突然,频繁收到一组服务器ping监控不可达邮件,赶紧登陆zabbix监控系统查看流 ...

随机推荐

  1. H-ui.admin v3.1学习之路(一):导航栏信息无法在内容区显示

    注:我使用的是别人的模板文件在我的云盘“素材模板—H-ui.admin’中. 直接上代码: <li class="dropDown dropDown_hover"> & ...

  2. Java数据结构与算法(2):栈

    栈是一种线性表,特点在于它只能在一个位置上进行插入和删除,该位置是表的末端,叫做栈的顶(top).因此栈是后进先出的(FIFO).栈的基本操作有push.peek.pop. 栈的示意图 进栈和出栈都只 ...

  3. Sublime如何设置背景透明

    Sublime如何设置背景透明 下载sublime 透明背景插件 我用的是git下载插件: git clone https://github.com/vhanla/SublimeTextTrans.g ...

  4. OGG-DDL复制

    http://blog.sina.com.cn/s/blog_96d348df0102vg6q.html OGG目前只支持Oracle和TeraData的ddl复制,Oracle数据库能够支持除去数据 ...

  5. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_8_字节输入流_InputStream类&FileInputStream

    inputStream

  6. Krypton Suite of .NET WinForms Controls

    The Krypton Suite of .NET WinForms controls are now freely available for use in personal or commeric ...

  7. Beetle简单构建TCP服务

    使用Beetle构建TCP服务应用是件非常简单的事情,它并不需要你去关注Socket细节,如果你想用Socket编写高性能的TCP服务,那你要关注的东西非常多,异步数据处理,大量连接下的线程管理和连接 ...

  8. Where we love is home, home that our feet may leave, but not our hearts.

    parcel.n. 包裹 endurance.n.耐力 rot.v.腐烂 ornament.n.装饰 pinch.v.捏 nationality.n.国家 sunshine.n.阳光 stagger. ...

  9. 关于ES6语法的 一些新的特性

    1.新的变量声明 :let :块级作用域,解决全局污染问题 const :常量 ,如π:3.1415927 class :类 .var:弱类型  funciton :方法 , import : 导入参 ...

  10. OuterXml和InnerXml(2)

    官方例子:https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.outerxml.aspx using System; using S ...