如何判断当前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]
如何判断当前LINUX系统启用了ASLR的更多相关文章
- VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录
VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录 一.描述 系统描述:win7旗舰版64位系统+VMware Workst ...
- 在CentOS Linux系统上,添加新的端口,启用ssh服务
SSH作为Linux远程连接重要的方式,如何配置安装linux系统的SSH服务,如何开启SSH? SSH是什么? SSH 为 Secure Shell 由 IETF 的网络工作小组(Network W ...
- 如何判断系统是32位还是64位的linux系统
如何判断系统是32位还是64位的linux系统 某日,需要下载个安装包,忽然忘记了自己的系统是32位还是64位的系统了,一时想不起来怎么查看时32位还是64位,呵呵,随便百度下,就发现有好多方法,这里 ...
- Linux系统判断当前运行的 Apache 所使用的配置文件
问题描述 由于历史备份.更新等原因,导致在 Linux 系统服务器中存在多个 Apache目录,如果不是网站的配置人员,可能会不清楚应该修改哪个配置文件进行网站调整. 解决方案 可以通过如下步骤,判断 ...
- linux查询健康状态,如何直观的判断你的Linux系统是否健康
一提到对于查看系统运行的健康状况,可能大多数朋友考虑到的就是查看进程或者打开任务管理器,但是对于应用在真实生产环境中服务器的linux系统来说,以上两种方式都不是***效的查看方式,那么今天就给大家推 ...
- 嵌入式之Linux系统裁剪和定制---(kernel+busyboxy+dropbear+nginx)
本文将介绍通过完全手动定制内核,在此基础上添加 busybox ,并实现远程登陆,使裁剪的 linux 能够运行 nginx . 在此之前介绍一下 linux 系统的启动流程. linux系统启动流程 ...
- 【夯实Mysql基础】MySQL在Linux系统下配置文件及日志详解
本文地址 分享提纲: 1. 概述 2. 详解配置文件 3. 详解日志 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于 ...
- Linux系统排查1——内存篇
常见工作中,计算机系统的资源主要包括CPU,内存,硬盘以及网络,过度使用这些资源将使系统陷入困境.本系列一共四篇博文,结合我在实习期间的学习,介绍一些常见的Linux系统排障工具及方法. 第1篇——内 ...
- linux系统被入侵后处理经历【转】
背景 操作系统:Ubuntu12.04_x64 运行业务:公司业务系统,爬虫程序,数据队列. 服务器托管在外地机房. 突然,频繁收到一组服务器ping监控不可达邮件,赶紧登陆zabbix监控系统查看流 ...
随机推荐
- [CSP-S模拟测试]:string(线段树)
题目描述 给定一个由小写字母组成的字符串$s$. 有$m$次操作,每次操作给定$3$个参数$l,r,x$. 如果$x=1$,将$s[l]~s[r]$升序排序: 如果$x=0$,将$s[l]~s[r]$ ...
- TypeScript快速笔记(一)
刚学习TypeScript,但因为马上要用,主要是寻求先快速上手,而后再求精. 推荐学习网站: 1)https://www.runoob.com/typescript/ts-tutorial.html ...
- P1439 【模板】最长公共子序列(LCS)
先来看一看普通的最长公共子序列 给定字符串A和B,求他们的最长公共子序列 DP做法: 设f[i][j]表示A[1~i]和B[1~j]的最长公共子序列的长度 那么f[i][j]=max(f[i-1][j ...
- 查看磁盘和文件的使用情况df和du
df, du: disk filesystem, disk usage. df : 查看一级目录的使用情况, df -h du: 则是可以查看目录或者某个文件的占用磁盘空间的情况, du -h: 使用 ...
- Samba 1.0服务部署
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统.打印机及其他资源. ...
- 类HashMap
/* * Map集合的特点 * 将键映射值的对象,一个映射不能包含重复的值:每个键最多只能映射到一个值 * * Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map ...
- beyond compare 4.2.9桌面右键集成的问题修复
beyond compare 4.2.9桌面右键集成的问题修复 安装后,发现在WIN64时,注册表中注册的DLL库有问题 出错处: [HKEY_CLASSES_ROOT\CLSID\{57FA2D12 ...
- Docker image 和 volume 的关系
image :镜像 虚拟机容器需要加载image才能运行,镜像中打包了构建好服务的运行环境. Docker images are the basis of containers. An Image i ...
- linux文件io与标准io
文件IO实际是API,Linux对文件操作主要流程为:打开(open),操作(write.read.lseek),关闭(close). 1.打开文件函数open(): 涉及的头文件: #includ ...
- Sentinel限流实现原理
Sentinel限流的神秘面纱: 之前我们学习过限流比较主流的三种算法:漏桶,令牌桶,滑动窗口.而Sentinel采用的是最后一种,滑动窗口来实现限流的. 通过对Sentinel基础Api的使用,我们 ...