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

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在几分钟之内轻松绕过。

如何操作

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

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

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

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

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

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

如何防范

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

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

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

文章出处:FreeBuf

本文来自企鹅号 - 黑白之道媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

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

ASLR(Address Space Layout Randomization,即地址空间格局随机化)是指利用随机方式配置数据地址,一般现代系统中都加设这一机制...

23980
来自专栏王清培的专栏

.NET应用架构设计—工作单元模式(摆脱过程式代码的重要思想,代替DDD实现轻量级业务)

阅读目录: 1.背景介绍 2.过程式代码的真正困境 3.工作单元模式的简单示例 4.总结 1.背景介绍 一直都在谈论面向对象开发,但是开发企业应用系统时...

22150
来自专栏SAP最佳业务实践

想学FM系列(15)-SAP FM模块:预算结构(6)-预算结构操作-过账地址维护

3.2.2.2 过账地址维护 ? 1)FMBSPO - 单个处理 功能:手工维护记账地址 ? 过账分类账:如果使用的是9F付款预算则选则9A,如果使用的是...

54560
来自专栏北京马哥教育

快学学Python异步IO轻松管理10k+并发连接

异步操作在计算机软硬件体系中是一个普遍概念,根源在于参与协作的各实体处理速度上有明显差异。软件开发中遇到的多数情况是CPU与IO的速度不匹配,所以异步IO存在于...

37460
来自专栏進无尽的文章

聊聊程序设计思想之面向接口编程IOP

我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,但是有时候最为理想的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点...

16620
来自专栏黑白安全

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

ASLR(Address Space Layout Randomization,即地址空间格局随机化)是指利用随机方式配置数据地址,一般现代系统中都加设这一机制...

7710
来自专栏JavaEdge

Java并发编程实战系列11之性能与可伸缩性Performance and Scalability

线程可以充分发挥系统的处理能力,提高资源利用率。同时现有的线程可以提升系统响应性。 但是在安全性与极限性能上,我们首先需要保证的是安全性。 11.1 对性能的...

37450
来自专栏腾讯Bugly的专栏

手游热更新方案xLua开源:Unity3D下Lua编程解决方案

导语 xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,凭借其出色的性能,易用性,扩展性而广受好评。 而就在前...

39160
来自专栏性能与架构

数据库数据切分

垂直切分 将数据库想象成由很多个一大块一大块的“数据块”(表)组成,垂直地将这些“数据块”切开,然后把它们分散到多台数据库主机上面 ? 优点 (1)数据库的拆分...

37550
来自专栏Java技术栈

为什么比起 IntelliJ IDEA,我更喜欢 Eclipse…

22230

扫码关注云+社区

领取腾讯云代金券