高级逃逸技术AET让黑客入侵如虎添翼


高级逃逸技术让黑客入侵如虎添翼

 

翟胜军(Jack Zhai)

 

1 引言

黑客入侵目标系统的必要条件一般有两个:一是目标系统确实有漏洞(可乘之机),二是黑客拥有利用这个漏洞的入侵攻击代码(入侵工具)。但当用户部署了IPS/WAF之类的安全防设备后,再要实现实施入侵,很容易被检测到,行动就会被中断;此时,攻击者需要选择,要么使用新的入侵攻击代码,要么设法绕开这些安全检测。需要找到穿越用户防护体系的办法,顺利到达,才能实施入侵。各种攻击躲避技术的总称称为高级逃逸技术AET( Advanced Evasion Technique),国内也翻译为高级隐遁技术,或是攻击躲避技术。

20101018日,芬兰的Stonesoft公司宣布“发现”新型AET技术威胁,可以躲避IPS的检查,引起安全界的关注;次年3月,Stonesoft公司公布了180多种可以组合的高级逃逸技术,并在5月提供了一套AET技术的测试工具软件给NSS Labs,从此,对AET的防护能力成为下一代IPS的必备功能。

国内对AET技术的关注相对比较晚,从2012年开始,启明星辰、绿盟、科能腾达陆续发表文章,宣布进行AET研究。

如果说黑客入侵攻击是针对目标系统的漏洞,那么AET技术就是针对安全设备的漏洞。AET技术可以说是黑客的攻击辅助工具,有了它的帮助,黑客可以不再需要发现新的漏洞,不再需要编写新的漏洞利用代码,即使是水平很一般的黑客,也能够对“防范严密”的网络实施APT攻击。

 

2 了解AET

AET技术的目标是躲避开安全设备的监测,建立一条通往目标的通道。一般来说,能够让IPS/WAF等安全设备变成“摆设”的思路有三种:

  1. 改变攻击代码的特征:就是说重新编写漏洞利用代码,让其特征发生改变,我们都知道,大多数安全设备检测攻击代码采用特征比对的方法,特征变了,自然就认不出来了。当使用“0Day”的时候,漏洞都还没有公布,其利用代码的特征也就不可能被安全厂商识别。当然,无论是发现新的漏洞,还是重新编写漏洞利用代码,都是件比较困难的技术活,一般的小黑客是难以做到的;

  2. 入侵方式的改变:这是针对安全厂商的另一种检测手段的---行为模式匹配或状态跟踪,比如采用慢扫描、多点源地址扫描方式,避免“踩点”时被发现;采用反向连接方式,避免在被入侵目标上开启服务监听端口而被发现;采用端口复用技术,通过8021等通用端口传送攻击控制命令,避免“回家”时产生“异常”连接。改变入侵方式就像是玩“躲猫猫”游戏,但因其目标一定是控制目标,如Shellcode,行为有一定的固性,这一点是无法根本改变的;同样,这种方式对于小黑客来说也是难以驾驭的;

  3. 干扰安全设备的检测机制:这是针对安全设备自身的缺陷而设计的,也是常说的AET技术核心。恰恰是这种“简单”的干扰模式,对于小黑客来说,是相对容易操作的。所谓的干扰通常有两种方式:一是伪装为“合法”的通信,利用安全设备与目标对同一通信协议、同一字符集的“理解”不同,造成目标看到的与安全设备看到的传送内容是不一样的,从而影响恶意代码特征的比对,这种方式是利用安全设备自身的协议解析漏洞而设计的;二是制造非常多的“麻烦”,让安全设备疲于应付,如次序颠倒、错包、重传包在处理不过来的情况下(很多厂家的安全网关设备为了不影响用户的应用,在能力处理不过来的时候,就选择直接放行),或者是处理逻辑出现混乱时,入侵者要发送的恶意代码可以蒙混过关,这种方式多是利用安全设备处理能力与安全策略逻辑的漏洞。

第三种情况就是我们说的AET技术。为了说明这一技术很具有普遍意义,我先来看这样一个应用场景:

TCP/IP协议允许对大的数据包进行分片传送,每个分片都带有偏移量值与长度,接收方按照偏移量重新组装。若是偏移量出现紊乱,分片就会出现重叠;目标系统对重叠的处理方式是不同的:Windows系统的处理方式是取后到的内容为准,Unix系统的处理方式是取先到的内容为准。

                             0.jpg

大部分的安全设备都是基于unix/linux系统上开发的,一般是取先到的为准。当攻击的目标是另一种处理模式时,就可以有意识地制造分片重叠,比如在第一分片后面增加随机内容,造成与第二个分片重叠,多的甚至可以覆盖,安全设备上还原的是随机填充的内容,目标系统上还原的是原始信息(恶意代码),这样,利用分片重叠,就可以有效躲避了IPS的检查了。

由于网络安全设备上一般不会同时采用两种组合方式还原,则必然有一种方式可以躲避安全设备的还原检测。而探测用户网络边界安全设备的取向策略是很容易的,发几个恶意包测试是否被阻断就知道了。用户的应用系统常常是两类系统并存的,至少有一半的系统已经向我们敞开了大门,剩下的工作就不用说了。

 

3 AET技术的分类

根据躲避技术面对的检测点来划分,AET技术可分为:

  1. 网络躲避:躲避网络上的安全设备检查,如FW/IPS/WAF/UTM/IDS等,这些类设备是通过直接抓取网络数据包进行检测的,利用的主要是通讯协议的理解差异;

  2. 主机躲避:躲避操作系统或主机加固安全软件的检查,如进程注入、rootkit(系统进程替换)、软件证书盗用(伪造信任链)、清除痕迹等。在服务器内,取得了最高控制权,就可以关闭或伪造很多假象,骗过日常的安全监控与日志审计。

 

在网络躲避类中,当目标侧没有接应时,一般是不采取加密通信方式的,因为目标也无法读懂密文,此时按照躲避的技术方式,网络躲避的AET技术可以分为三大类:

  1. 利用通讯协议参数的变换,或者是不同开发者理解上的差异,造成安全设备与目标系统的理解不一致。比如:

  2. ?  IP碎片超时重发:当IPS比目标的等待时间短时,可以延迟发送后面的分片,造成IPS内无法重组;当IPS比目标的等待时间长时,可以先发几个随意填充的分片,让IPS重组,而等到目标超时后,再重发真实的分片,此时IPS已经重组完成,清除缓存,而目标则可重组原始数据包;

  3. ?  修改TTL参数:发送的分片其中有几个是随机填充的,但TTL值小,不能到达目标,等IPS重组清除后,再发送正常的那几个分片,到目标可重组;

  4. ?  修改TCPUrgent属性:因为windows系统会忽略带有Urgent属性的包,从而造成IPS看到的命令与目标看到的是不同的;

  5. ?  修改TCP序号:TCP序号是32位的随机数,但发生回环时,一些 IPS就被蒙蔽了;

  6. 利用协议分片传送技术,主要是安全设备重组与目标重组的不同,对协议理解上的差异,或者是造成重组时的紊乱,甚至无法重组,比如:

  7. ?  Http分片:把http协议中的url请求分开到不同的IP分片中,躲避WAF的检查;

  8. ?  RPC分片:MS-RPCSun/ONC RPC都允许应用程序以分片的方式发送请求,这些分片在RPC服务器内会被重新组装成完整请求形式,但分片可以躲避IPS的检查;

  9. ?  字符协议的分段传送:这是开通远程控制窗口时常用的技巧,如FTPTelnet等协议,攻击者的命令每次可以只发送几个字节,甚至是一个字母,让IPS不知所以;

  10. ?  分片重叠:前面举过的例子,人为制造分片重叠,取向不同结果就不同是必然的;

  11. ?  分片乱序:分片后打乱次序发送,干扰IPS的重组;

  12. 混淆不同的字符集,躲避IPS/WAF的特征匹配,比如:

  13. ?  URL常使用的混淆:

  14. ?  采用 16进制表示,如“%**”

  15. ?  采用转义符“%u”将字符用UNICODE方式表示

  16. ?  随机变换大小写

  17. ?  tab符(0x090x0b)或回车符(0x0d)做分隔符

  18. ?  加入特定或随机的干扰字符串

  19. ?  字符命令混淆:FTPTelnet命令中随机添加一定数量的干扰字符(空格符、非文本控制符等),这些干扰字符在服务器的处理过程中往往会被过滤掉;

  20. ?  Http请求中填充:前边添加4个字节的随机字符,目标系统一般是忽略,而IPS/WAF则容易混淆。

 

4 AET技术具有可组合的特性

 AET技术分类中可以看出,大多数躲避技术利用安全设备设计中的一些编程逻辑漏洞实现的,我们很容易联想到,通过完善IPS/WAF等安全产品(如优化源代码),就可以大幅度减少AET的流行。但是,AET技术可以任意组合的特性让这一办法陷入困境。

首先,躲避方式可以组合,例如:

  1. 当分片与重叠一起使用时,会让IPS/WAF的还原方式变得很复杂,若是多层协议同时分片,如TCP+RPC,再加上重叠时前向与后先问题,想要做到“全协议”检测是很困难的;

  2. 填充、分片、乱序一起使用时,更容易混淆。应用层如http请求可以填充,网络层如IP包可以填充,再利用各种分片协议,使得数据还原更加困难;

  3. 字符集与填充一起使时,“真假”数据更加难以分辨;

其次,不同协议可以组合,例如:

  1. httpTCPIP三层参数组合,可以这对常见的80端口躲避;

  2. 针对CVE-2008-4250(MS08-067),可以使用对涉及的协议IPTCPNetBiosSMBMSRPC参数进行组合躲避;

AET的这种可组合特性,造成躲避技巧的数量大得惊人,也让IPS/WAF厂商们感到非常棘手。Stonesoft公司提出“全协议解析”的解决方法,即对所有协议解析进行标准化检验,不符合协议标准的就“丢弃”。虽然可以减少重叠、填充、分片过小等带来的问题,但这与TCP/IP“尽量宽容,业务为主”设计理念是相悖的,可能会对一些应用有影响。

 

5 沙箱逃逸

0 (1).jpg

近几年,APT攻击中使用了大量的“0DAY”木马,让传统的安全措施无计可施,以Fireeye为首的安全公司纷纷推出沙箱技术,让恶意代码运行、释放,根据其行为中是否有危险操作,判定其是否为恶意代码。这种技术可以对未知的代码进行安全检测,成为目前对付“0DAY”的主要工具之一。

如何逃避沙箱的“捕获”,沙箱逃逸技术成为AET的新发展分支。由于目前的沙箱主要为文件型,提供的是文件的模拟运行环境,并且给每个文件的检测时间也不可能太长,一般不超过30分钟,所以从沙箱的眼皮子底下逃脱,也不是很难的。今年年初的韩国320事件中,其病毒就是在320日下午两点前不做任何操作,沙箱当然也就无能为力了。

这里收集了一些目前进行沙箱逃逸的方法:

  1. 利用人机交互:沙箱是自动模拟运行,一般没有人参与,所以通过检测鼠标动作,可以判定这是否是沙箱环境;

  2. 暂时休眠:利用沙箱检测时间有限的特点,程序先休眠30分钟,再开始工作,超出了沙箱的检测能力;

  3. 用户环境:检查运行环境细节,如常用的应用软件、某些特定的库文件等,沙箱只是对运行环境的初步模拟,无论是代理模式,还是钩子模式,都无法模拟如此“真实”;

  4. 硬件参数:这种方法原来是判定虚拟机环境的,如MAC地址、BIOS参数,或者直接对硬件读写,因为绕过沙箱的驱动,沙箱与虚拟机对这些操作,往往招架不住。

电影《盗梦空间》中主人公判定梦境的方式是:让陀螺转起来,梦境中它将一直转下去。沙箱逃逸技术的关键是判断自身所处的环境是用户的真实环境,还是沙箱的虚拟空间。不释放自己的行为,沙箱的检测就无从入手了。

从沙箱中逃脱,就会被打上“合法”的标签,你的木马文件可以大摇大摆的进入用户环境了。

 

 小结

早在1998年,Newsham  Ptacek发表的论文中描述了碎片、TCP参数、TCP序列等多种手段可以躲避IPS的检测。多年来AET技术一直没有得到安全业界的重视,直到最近几年,大量未知攻击的出现,以及黑客圈子对AET技术的掌握已经成为公开的秘密,加上Stonesoft公司的推动,AET才逐步成为安全公司的研究的重点。但就目前来说,公布的AET躲避技术很可能还只是冰山之一角,黑客掌握的AET技术能到什么程度,还都是个未知数。

AET技术利用网络安全设备的漏洞,成为黑客入侵的得力工具,这已经成为信息安全界广泛关注的问题。研究AET技术,发布网络安全设备的漏洞,应该与发布系统与应用漏洞一样,成为各国信息安全漏洞那个预警平台的基本工作。


Whatever is worth doing is worth doing well.