关注网络与数据安全

忘记密码
“游侠安全网”创建了网络安全从业者QQ大群(群号:389710688) ,欢迎各位同仁加入!有其它问题,请联系站长“网路游侠”,QQ:55984512


通用缓解措施和多维度攻击简介

2015-05-11 16:04 推荐: 浏览: 63字号:

摘要: DEP(Data Execution Prevention,数据执行保护)这东西很多人都知道,但ASLR(Address space layout randomization,地址空间随机化)估计知道的人少一点,它们都属于现代操作系统中两个主要的缓解(Miti...

DEP(Data Execution Prevention,数据执行保护)这东西很多人都知道,但ASLR(Address space layout randomization,地址空间随机化)估计知道的人少一点,它们都属于现代操作系统中两个主要的缓解(Mitigation)措施,现在基本已经成为标配,从Windows Vista到Apple iOS等,都包含了这种技术来阻止或缓解基于内存攻击漏洞的利用,就是人们常说的缓冲区溢出漏洞的利用。

0.webp

这些技术的实现极大的增加了内存攻击漏洞的利用难度,硬件DEP启用后使得在溢出成功后在堆栈中直接执行代码的效果成为历史,从而使得针对此类漏洞的利用不得不采取ROP(Return-oriented programming,返回导向编程)技术来构造先关闭进程DEP,或开辟一块可读写加执行权限的内存空间再执行Shellcode代码的ROP链,这是整个漏洞利用代码的Payload中最繁琐的部分,虽然ROP这种技术在绕DEP保护的利用上还算可以成功,但要针对各种系统语言版本和SP版本的情况构造不同的ROP链,通用性就极差了,更重要的是这只解决了DEP的问题,如果是Windows Vista以上的系统,还有ASLR呢?ASLR启用的情形下,ROP技术依赖的函数基址是动态变化的,微软他们想啊,我阻止不了你ROP,我用这种方式缓解行么!让你利用的难度增大!增加你的漏洞利用成本,让你坚持不下去,玩不下去就放弃了,这样想有点天真了。

在有ASLR的情形下,最直接的方式是找到一个noASLR的模块,虽然系统原生的模块基本都支持ASLR了(Windows 7下出个漏网之鱼),但noASLR模块的函数基址还是固定的,还可以利用,因为ASLR本身并不是一种通用标准,只是一种技术,不遵从它的软件厂商还很多,最直接的表现就是开发团队守旧的不用支持ASLR的编译器来编译代码,固执的还用VC6就是一个灾难。但即使全部都是ASLR的模块,是不是就真的没可能利用成功了,答案是否定的,利用代码需要的基址还是可以通过触发漏洞,比如堆溢出,或是其他任何能实现内存越界读写的溢出漏洞把基址先给泄露出来,保存指针然后通过数学运算,例如加减法来定位到需要调用函数的地址从而又走回ROP的路,最终又可以成功利用了,不过利用代码量比ROP又多了很多,都是汇编代码,干这种活是最苦闷的,一般不太适合性格比较开朗的活泼少年。

总之,现代操作系统和编译器的更新对内存攻击的利用进行了多重封杀,客户端的程序,比如IE还有沙箱技术,通常针对内存攻击主要利用点EIP的控制和函数基址,软件厂商,安全公司对此煞费苦心,比如360就在XP系统上实现了原本并没有的ASLR技术,使得在XP靶场挑战赛上没有被攻破,能通过逆向分析来寻找突破,漏洞利用中要实现精确的堆布局是一个难点,考验研究员的功力,特别是在原生64位下堆喷射的命中率已变得很低的情况下,最近的几界Pwn2Own大赛的成功攻破,基本都是堆上精确布局利用的实现。

那么,EIP的控制争夺是不是真的走到了尽头,在二进制中我们确实要考虑这个,因此不得不思考不同的维度。很多人不禁要问为什么一定是EIP,系统原生有没有其他的路?比如COM,解释语言JScript,VBScript它们跟CPU指令有什么不一样,解释语言也能实现各种功能,如何利用它们?解释语言有虚拟机,数组在内存中的形态是什么,能利用么?答案是肯定的。yuange的DVE(数据虚拟执行)技术,TK的脚本维度就是其中之一,避免直接二进制对抗二进制,在解释语言层布局代码,通过数学运算实现堆的分配和布局,从而走不同的维度,跟针对EIP的检测不在一个空间,不直接对抗DEP和ASLR,活在另一个世界,一个没有DEP和ASLR的世界,攻防技术中最精妙的世界。

总体来说,在内存攻击方向,现在寻求利用方法的通用性还是相当困难的,主流的方向还是构造针对基于特定漏洞的利用方法,针对比如:Stack Buffer Overflow(栈缓冲区溢出)、Heap Buffer Overflow(堆缓冲区溢出)、Format String(格式化字符串)、Out-of-Bounds Read(内存越界读)、Off-by-One(内存越界写)、Use After Free(释放后重用)、Double Free(二次释放)、Memory Corruption(内存腐败)、Integer Overflow(整型溢出)等漏洞类型在特定目标环境下的利用,主要依赖特定目标的环境因素来构造攻击代码的思路。不论是ROP还是其他多维度,能用最简单直接的方法打下目标亦是最重要的,也是作为一个安全攻防技术研究员应该思考的问题,随着近年来泄漏的用于APT行动的0day来看,由于防御一方缓解措施的作用,针对某些环境或目标组织的攻击,攻击者甚至需要多个0day组合来提高成功率。而对于系统原生外的保护,比如反APT设备的引入,攻击代码要考虑的因素更多,因此必须得考虑更多维度的事情。

关于“分子实验室”

分子实验室是安恒信息安全服务团队成立的内部研究实验室,目前主要涉及有网络自动化渗透测试技术研究(AdvancedPenetration Testing)、Web漏洞挖掘和利用技术研究(Web Security Vulnerabilities)、源代码安全漏洞分析技术研究(Source Code Security Analysis)、二进制代码漏洞挖掘技术研究(Binary Code Analysis & Fuzzing)、安全开发生命周期实践研究(Security Development Lifecycle (SDL))等方向的安全技术研究,务实不务虚,研究的东西都是实用的,SDL去年已经向客户推广并取得良好的认同。

同时,《反0day策略》是面向高端客户推出的技术性解决方案,安全开发生命周期是其中的重要支撑,是帮助客户真正修炼内功的《易筋经》,不论是研究攻击和防御技术的,深入了解敌人才更有可能超越它,欢迎和我们讨论以及共同研究攻防技术,共同进步。

联系站长租广告位!

中国首席信息安全官
Copy link