ASLRay:一个可以绕过ASLR的工具

2017 年 11 月 6 日 黑白之道


ASLR(Address Space Layout Randomization,即地址空间格局随机化)是指利用随机方式配置数据地址,一般现代系统中都加设这一机制,以防范恶意系统对已知地址进行攻击。不过目前已经有多种绕过ASLR的方式,今天将介绍一个简单的ASLR绕过工具。


介绍



特点


而ASLRay是一款可以绕过ASLR的工具,其特点如下:


ASLR绕过

跨平台

较为简约

操作简单

无法修复


依赖


Linux 2.6.12 – 适用于任何基于Linux的x86-64的操作系统。


限制


堆栈段必须可执行(-z execstack)

二进制必须在本地通过参数(不是文件,套接字或者输入)来利用

不支持其他架构和操作系统

需要知道缓冲区的限制/大小


工作原理


你有没有听说过堆喷射攻击(Heap Spraying attack)?其实Stack Spraying也差不多,不过在大多数情况下它都被认为很不实用,特别是x86-64上的ALSR。


而最近作者证明恰恰相反。


对于32位,一共有2^32(4 294 967 296)个理论地址,然而对于虚拟化的内存中的执行,内核仅允许控制2^(32/2)即65 536个理论地址。这意味着如果我们在堆栈中控制多于五万个字符,那么由于内核的重定向和重新转换,我们就可以指向的shellcode了。根据我的测试,其实100个甚至10个字符就够了。


这可以使用shell变量来实现,这些变量并不是真正限于特定的长度,但实际的限制是大约一百万,否则会使TTY饱和。那么,为了搭配任何shellcode成功利用,我们要将NOP sled紧接着shellcode放入shell变量中,然后通过随机地址来利用。要注意的是,NOP sled并不是必要的。


在64位系统中,情况就有些不一样了,但是我发现并没有变化太大。


当然了,你不一定要覆盖所有2^64种可能性,事实上内核只允许48位,另外一部分有一半是静态的和可预测的,这样算下来就是2^(4*8+5)即137 438 953 472种可能性。作者之前提到了shell变量的大小限制,其实还有一个计数限制,大约为10,因此我们可以存储一个10万字符的shellcode。这次需要强制使用NOP sled,因为这样会更快。


总而言之,在32为和64位系统中,ALSR可以通过几行shell在几分钟之内轻松绕过。


如何操作


如果你在之前至少利用过一个缓冲区溢出,就可以直接跳过这里了,但是为了防万一:


apt install gcc libc6-dev-i386 || kill -9 $$chmod u+x ASLRay.sh
sudo gcc -z execstack test.c -o testsudo gcc -m32 -z execstack test.
c -o test32 sudo chmod +s test test32source ASLRay.sh test32 1024source ASLRay.
sh test 1024source ASLRay.sh test 1024 \x31\x80...你的shellcode


在debian上证明NOP sled不是必需的:


注意!!!这会改变etc/passwd且修改/etc/shadow的权限,所以推荐使用虚拟机。


chmod u+x PoC.shsource PoC.shgrep ALI /etc/passwd


如果没有用,就在一开始加上一些NOP(\x90)


别忘了检查堆栈段是否可执行和ASLR的设置:


scanelf -e test | grep RWXorreadelf -l test | grep RWEgrep 2 /
proc/sys/kernel/randomize_va_space


你可以将shellcode放入一个变量中,并为ASLR的shell分配随机地址,作者认为这样的内核虚拟化行为是一个未知的漏洞,所以PoC属于0day。


sudo gcc -z execstack -fno-stack-protector test.c -o testsudo gcc 
-m32 -z execstack -fno-stack-protector test.c -o test32


如何防范


1.要记得始终依赖于多重保护,而并非单一保护。

2.或许我们需要新的系统安全机制。


我们身处雨中,雨便是随机的,倘若置身雨外,则其规律一览无余。


文章出处:FreeBuf

你会喜欢


国产网站恶意代码监测(网马监控)工具优化版

Poet:一款功能强大的后渗透工具

SearchSploit漏洞查找工具使用指南


登录查看更多
0

相关内容

shellcode是一段不依赖于上下文的可执行机器码。
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
打怪升级!2020机器学习工程师技术路线图
专知会员服务
96+阅读 · 2020年6月3日
【牛津大学&DeepMind】自监督学习教程,141页ppt
专知会员服务
177+阅读 · 2020年5月29日
【ACL2020-Google】逆向工程配置的神经文本生成模型
专知会员服务
16+阅读 · 2020年4月20日
德勤:2020技术趋势报告,120页pdf
专知会员服务
187+阅读 · 2020年3月31日
【Google】无监督机器翻译,Unsupervised Machine Translation
专知会员服务
35+阅读 · 2020年3月3日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
212+阅读 · 2020年2月21日
【新书】Python中的经典计算机科学问题,224页PDF
专知会员服务
51+阅读 · 2019年12月31日
TheFatRat 一款简易后门工具
黑白之道
35+阅读 · 2019年10月23日
CALDERA 一款对手自动模拟工具
黑白之道
20+阅读 · 2019年9月17日
21个必须知道的机器学习开源工具!
AI100
13+阅读 · 2019年9月13日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
Python奇淫技巧,5个数据可视化工具
机器学习算法与Python学习
7+阅读 · 2019年4月12日
文本分析与可视化
Python程序员
8+阅读 · 2019年2月28日
超级!超级!超级好用的视频标注工具
极市平台
8+阅读 · 2018年12月27日
快讯 | Facebook开源语音识别工具包wav2letter
大数据文摘
6+阅读 · 2018年1月2日
Arxiv
6+阅读 · 2020年2月15日
Arxiv
5+阅读 · 2019年4月21日
Deep Learning for Energy Markets
Arxiv
8+阅读 · 2019年4月10日
Star-Transformer
Arxiv
5+阅读 · 2019年2月28日
Arxiv
6+阅读 · 2018年2月26日
VIP会员
相关VIP内容
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
打怪升级!2020机器学习工程师技术路线图
专知会员服务
96+阅读 · 2020年6月3日
【牛津大学&DeepMind】自监督学习教程,141页ppt
专知会员服务
177+阅读 · 2020年5月29日
【ACL2020-Google】逆向工程配置的神经文本生成模型
专知会员服务
16+阅读 · 2020年4月20日
德勤:2020技术趋势报告,120页pdf
专知会员服务
187+阅读 · 2020年3月31日
【Google】无监督机器翻译,Unsupervised Machine Translation
专知会员服务
35+阅读 · 2020年3月3日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
212+阅读 · 2020年2月21日
【新书】Python中的经典计算机科学问题,224页PDF
专知会员服务
51+阅读 · 2019年12月31日
相关资讯
TheFatRat 一款简易后门工具
黑白之道
35+阅读 · 2019年10月23日
CALDERA 一款对手自动模拟工具
黑白之道
20+阅读 · 2019年9月17日
21个必须知道的机器学习开源工具!
AI100
13+阅读 · 2019年9月13日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
Python奇淫技巧,5个数据可视化工具
机器学习算法与Python学习
7+阅读 · 2019年4月12日
文本分析与可视化
Python程序员
8+阅读 · 2019年2月28日
超级!超级!超级好用的视频标注工具
极市平台
8+阅读 · 2018年12月27日
快讯 | Facebook开源语音识别工具包wav2letter
大数据文摘
6+阅读 · 2018年1月2日
Top
微信扫码咨询专知VIP会员