如何判断当前LINUX系统启用了ASLR

内核参数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]

原文地址:https://www.cnblogs.com/Antiver/p/10293649.html

时间: 2024-08-03 08:07:44

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

一次因NAS存储故障引起的Linux系统恢复案例

一. 故障现象描述 NAS操作系统内核为Linux,自带的存储有16块硬盘,总共分两组,每组做了RAID5,Linux操作系统无法正常启动,在服务启动到cups那里就停止了,按键ctrl+c强制断开也没有响应,查看硬盘状态,都是正常的,没有报警或者警告现象. 二. 问题判断思路 通过上面这些现象,首先判断NAS硬件应该没问题,NAS存储盘也应该正常,现在Linux无法启动,应该是Linux系统本身存在问题,因此,首先从Linux系统入手进行排查. 三. 问题处理过程 1.第一次处理过程 NAS系

linux系统开机自启动:init upstart systemd

作为一名优秀的工程师或者架构师,我们必须对linux系统有非常良好的理解和掌握.这里介绍下令很多人糊涂的linux自启动. 目前linux有3种初始化系统,按出现的时间依次为init ,upstart和systemd. 3种系统简介 1. init init即sysvinit,它是system v的成果,被推广到其他unix系统.常见的init 命令和/etc/init.d即属于它. init的优点来自服务串行启动,可以保证脚本执行顺序,也方便调试和排错.但也因为串行启动导致系统启动时间很长,在

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

如何判断系统是32位还是64位的linux系统 某日,需要下载个安装包,忽然忘记了自己的系统是32位还是64位的系统了,一时想不起来怎么查看时32位还是64位,呵呵,随便百度下,就发现有好多方法,这里记录下,方便日后查询: 第一种: 12345 [root@CentOS62 ~]# uname -mi686 [root@436704 ~]# uname -mx86_64 第二种: 12345 [root@CentOS62 ~]# file /sbin/init/sbin/init: ELF 32

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

一.描述 系统描述:win7旗舰版64位系统+VMware Workstation10+CentOS6.5(win7系统上安装了VMware Workstation10虚拟化软件,在该虚拟化软件上安装了CentOS6.5),现在我想要在win7系统和CentOS系统之间传递数据,那么我只要在虚拟机上安装VMware tools工具并启动共享目录即可. 二.安装步骤 1.VMware tools安装 1.1 选中要安装VMware tools的linux虚拟机,然后点击VMware Worksta

Linux系统安全基础知识

基本的系统安全 物理安全和登录安全 禁用root登录和sudo 可插拔认证模块(PAM) 基于PAM的口令安全和口令策略 基于PAM的访问控制 1.基本的系统安全 安全的磁盘布局 使用挂装选项提高文件系统的安全性 查找并取消文件/目录的非必要的特殊权限 避免安装不必要的软件包 配置软件包更新的Email通知 关闭不必要的服务 关闭IPv6的内核功能 1) .安全的磁盘布局 1.如果是新安装系统,对磁盘分区应考虑安全性: 1)根目录(/)中必须包括 /etc./lib./bin./sbin,即不能

Linux系统用户与组的基本命令

用户和组的管理主要是出于对人员的管理,在多用户多任务分时操作系统中:所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问:另一方面也能帮助用户组织文件,并为用户提供安全性保护.每个用户账号都拥有一个惟一的用户名和用户密码.用户在登录时键入正确的用户名和密码后,才能进入系统和自己的主目录.用户和组的管理就是要对员工的账号进行不同程度的管理,一个用户属于什么组对应的使用这个组所

Linux系统安全及应用

实验案例 某公司新增了一台企业级服务器,已安装运行RHEL6操作系统,由系统运维部.软件开发部.技术服务部共同使用.由于用户数量众多,且使用时间不固定,要求针对账号和登录过程采取基本的安全措施. 需求描述 1.允许用户radmin使用su命令进行切换,其他用户一律禁止切换身份. 2.授权用户zhangsan管理所有员工的账号,但禁止其修改root用户的信息. 3.授权用户lisi能够执行/sbin./usr/sbin目录下的所有特权命令,不需要密码验证. 4.所有的su.sudo操作,必须在系统

linux系统日常管理

以下资料来源于<跟阿铭学Linux> 1.监控当前系统状态 1. w查看当前系统的负载 [[email protected] sbin]# w 15:23:46 up 3:34, 2 users, load average: 0.03, 0.05, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 - 12:26 2:55m 0.11s 0.11s -bash root pts/0 10.72.137.53 1

根据自己喜好定制Linux系统

1.修改Linux系统的启动菜单的背景图片 默认情况下,Linux系统启动时,grub菜单的背景图片为/boot/grub/splash.xpm.gz,启动时如图1所示,我们可以修改linux系统的grub菜单背景图片,此处我们修改为windos系统图片(具体可以根据自己的喜好修改). 图一 在使用前需要将图片转化为Linux系统支持的图片格式.xpm,需要使用convert命令转化,如果系统没有convert命令则需要安装软件包ImageMagick.转化过程如下: [[email prote