补丁对比漏洞挖掘技术在APT攻击中的应用
2015-03-24邓韵东
郭 威,江 瀚,邓韵东
(云南电网信息中心, 650217)
补丁对比漏洞挖掘技术在APT攻击中的应用
郭 威,江 瀚,邓韵东
(云南电网信息中心, 650217)
针对特定用户和系统的高级持续性威胁(简称APT攻击)愈演愈烈,给广大用户造成了极大的安全威胁。APT攻击所使用的攻击手法多种多样,其中危害最大的技术手段是攻击者对各种漏洞的利用。本次研究针对攻击者对各种漏洞利用的问题,提出了漏洞挖掘技术在APT攻击中的应用。本文详细描述了补丁对比漏洞挖掘技术的原理、案例以及在APT攻击中的应用和危害并提出了相应的加固建议。
APT攻击;0day漏洞;补丁对比;漏洞挖掘;社会工程学
0 概述
高级持续性威胁即APT(Adavanced Persistent Threat),是指针对明确目标的持续的、复杂的网络攻击,是指高级的持续性的渗透攻击,是针对特定组织的多方位的攻击。
APT不是一种新的攻击手法,其可以说是结合了新旧的各种攻击技术和其他非技术手段的综合攻击行为。近年来针对特定企业的APT攻击事件屡有发生,给受害企业造成了极大的损害。研究和分析APT攻击行为则是做好APT攻击防护的第一步。
1 传统APT攻击技术分析
APT攻击是很难防御的一种攻击模式,是一类特定的攻击,为了获取某个组织甚至是国家的重要信息,有针对性的进行的一系列攻击行为的整个过程。主要就针对企业的商业机密信息和国家重要的基础设施进行,包括能源、电力、金融、国防等关系到国计民生,或者是国家核心利益的网络基础设施。
对于这些单位而言,尽管已经部署了相对完备的纵深安全防御体系,可能既包括针对某个安全威胁的安全设备,也包括了将各种单一安全设备串联起来的管理平台,而防御体系也可能已经涵盖了事前、事中和事后等各个阶段。但是,这样的防御体系仍然难以有效防止来自互联网的入侵和攻击,以及信息窃取,尤其是新型APT攻击。APT攻击为复合型攻击,以下手段为APT攻击常用的手段。
1.1 社会工程学
社会工程学(Social Engineering),一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段,取得自身利益的手法。近年来已呈迅速上升甚至滥用的趋势。社会工程学陷阱通常以交谈、欺骗、假冒或口语等方式,从合法用户那里套取用户系统的秘密,例如:用户名单、用户密码及网络结构。
1.2 基于WEB的渗透攻击
基于Web方式的渗透攻击即攻击者通过在正常的网站页面中(通常是网站的主页)插入一段代码。浏览者在打开该页面的时候,这段代码被执行,然后下载并运行某渗透攻击的服务器端程序,进而攻击和控制浏览者的主机。
1.3 基于病毒木马攻击
通过病毒木马目标实施攻击,可能是很复杂的网络,如Stuxnet病毒、Flame病毒。
1.4 基于文件0day的攻击
利用收集的邮件进行定向攻击。发送带恶意代码的文本格式文件 如:office, pdf等。如Stuxnet病毒就利用了3个0day漏洞。
1.5 基于异常流量攻击
1)网络扫描嗅探的异常流量;
2)远程溢出数据;
3)内网病毒木马爆发的异常流量;4)数据回传时的异常流量。
2 漏洞挖掘技术介绍
2.1 漏洞的定义
漏洞(Vulnerability)是指系统中存在的一些功能性或安全性的逻辑缺陷,包括一切导致威胁、损坏计算机系统安全性的所有因素,是计算机系统在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷和不足。信息系统中存在漏洞是无法避免的问题,一旦某些较为严重的漏洞被攻击者发现,就有可能被其利用,在未授权的情况下访问或破坏信息系统。
2.2 漏洞发掘技术
目前对于漏洞挖掘技术的分类,根据分析对象的不同,主要分为基于源代码的漏洞挖掘技术和基于目标代码的漏洞挖掘技术两大类。基于源码的漏洞挖掘既通过分析其公布的源代码,就可能找到存在的漏洞。如对Linux系统的漏洞挖掘就可采用这种方法。
基于目标代码的漏洞挖掘首先将要分析的二进制目标代码反汇编,得到汇编代码;然后对汇编代码进行切片,即对某些上下文关联密切、有意义的代码进行汇聚,降低其复杂性;最后通过分析功能模块,来判断是否存在漏洞。
漏洞挖掘技术从逆向分析的软件测试角度,一般又可分为白箱分析、黑箱分析和灰箱分析三类。
具体的漏洞挖掘技术分析手段,又主要分为手工测试、Fuzzing技术、二进制对比技术、静态分析技术、动态分析技术等。
2.2.1 手工测试
手工测试是通过客户端或服务器访问目标服务,手工向目标程序发送特殊的数据,包括有效的和无效的输入,观察目标的状态、对各种输入的反应,根据结果来发现问题的漏洞检测技术。手工测试不需要额外的辅助工具,可由测试者独立完成,实现起来比较简单。但这种方法高度依赖于测试者,需要测试者对目标比较了解。手工测试可用于Web应用程序、浏览器及其他需要用户交互的程序。
2.2.2 Fuzzing技术
Fuzzing是一种基于缺陷注入的自动软件测试技术,它利用黑盒测试的思想,使用大量半有效的数据作为应用程序的输入,以程序是否出现异常为标志,来发现应用程序中可能存在的安全漏洞。所谓半有效的数据是指对应用程序来说,文件的必要标识部分和大部分数据是有效的,这样应用程序就会认为这是一个有效的数据,但同时该数据的其他部分是无效的,这样应用程序在处理该数据时就有可能发生错误,这种错误能够导致应用程序的崩溃或者触发相应的安全漏洞。Fuzzing技术是利用Fuzzer工具通过完全随机的或精心构造一定的输入来实现的。
2.2.3 二进制对比技术
二进制比对技术又可称为补丁比对技术,它主要是被用以挖掘“已知”的漏洞,因此在一定意义上也可被认为是一种漏洞分析技术。由于安全公告中一般都不指明漏洞的确切位置和成因,使得漏洞的有效利用比较困难。但漏洞一般都有相应的补丁,所以可以通过比较补丁前后的二进制文件,确定漏洞的位置和成因。
2.2.4 静态分析
静态分析是通过词法、语法、语义分析检测程序中潜在的安全问题,发现安全漏洞的,其基本思想方法也是对程序源程序的静态扫描分析,故也归类为静态检测分析。静态分析重点检查函数调用及返回状态,特别是未进行边界检查或边界检查不正确的函数调用(如strcpy,strcat等可能造成缓冲区溢出的函数)、由用户提供输入的函数、在用户缓冲区进行指针运算的程序等。
3 补丁对比漏洞挖掘技术
3.1 补丁对比技术介绍
如前文所述,补丁对比技术又称二进制比对技术。补丁比对技术对于安全人员及黑客都是非常有用的技术,通过补丁比对分析,定位漏洞代码,再加以数据流分析,最后可以得到漏洞利用的攻击代码。有经验的安全专家或黑客甚至能在很短的时间内就完成这个漏洞挖掘与利用的过程。
补丁比对技术有很多,简单的比较方法有二进制字节比较和二进制文件反汇编后的文本比较,前者只适用于若干字节变化的比较;而后者缺乏对程序逻辑的理解,没有语义分析,适用于小文件和少量的变化。这两种方法都不适合文件修改较多的情况。较复杂的方法还有Tobb Sabin提出的基于指令相似性的图形化比较和Halvar Flake提出的结构化二进制比较,前者可以发现文件中一些非结构化的变化,如缓冲区大小的改变等,并且图形化显示比较直观。其不足是受编译器优化的影响较大,且不能在两个文件中自动发现大量比较的起始点。后者注重二进制可执行文件在结构上的变化,从而在一定程度上消除了编译器优化对分析二进制文件所带来的影响,但这种方法不能发现非结构的变化。
常用的补丁比对工具有IDefense公司发布的IDACompare、The eEye Digital Security发布的Binary Diffing Suite(EBDS)以及Sabre Security的BinDiff。它们都是基于结构化二进制比较技术的补丁比对工具。此外,NCNIPC还于2007年12月发布了NIPC Binary Differ(NBD)补丁比对工具,大大的扩充了经典算法中简易签名。
3.2 补丁对比漏洞挖掘实例详解
2012年3月13日 ,微软发布安全公告MS12-020,同时发布安全补丁。此补丁修复了两个漏洞,CVE标识分别为CVE-2012-0002(KB2621440)和CVE-2012-0152(KB2667402)。
其中,较为重要的是CVE-2012-0002:远程桌面协议漏洞。该漏洞影响Microsoft Windows XP SP2 and SP3, Windows Server 2003 SP2, Windows Vista SP2, Windows Server 2008 SP2, R2, and R2 SP1, and Windows 7 Gold and SP1等多个版本,远程桌面协议访问内存中未正确初始化或已被删除的对象的方式中存在一个远程执行代码漏洞。
对于此漏洞,微软未批露相关技术细节,本文将以KB2621440补丁更新前后比较的方式,对该漏洞原理进行探究,并尝试构造漏洞触发样本。
微软的更新中提到该安全更新通过修改远程桌面协议处理内存中数据包的方式以及 RDP 服务处理数据包的方式来解决漏洞。也就是说漏洞是由于系统自带服务RDP服务处理数据包时出现了问题。通过下载补丁前后的rdpwd.sys
可以看到其中的HandleAttachUserReq函数在补丁前后变化较大,相似率仅为82%。
我们可以查看详细的函数流程,补丁后的文件多了一部分比较,补丁前,在通过调用ListRemove函数来断开内存链的时候忽视了某些问题,补丁后在断链之后还进行了一个比较,并在一定条件下会调用ExFreePoolWithTag,这个函数的作用为取消标签指定的分配的内存资源,原型为:
NTKERNELAPI VOID ExFreePoolWithTag(
IN PVOID P, //分配内存的起始地址
IN ULONG Tag //内存标签
);
也就是说在补丁后,多增加了一个if判断,如果此时的P不为空,且*((_BYTE *)P + 5)为空,则调用ExFreePoolWithTag来释放起始地址为P,标签为0的一块内存。
通过分析系统补丁我们发现了漏洞原理后,我们便搭建一个模拟环境进行漏洞验证,环境的系统为Windows XP Professional SP3,开启了3389端口处于Listening状态。由于出问题的地方位于RDP服务,我们编写一个基本的脚本去发起RDP连接,抓包并结合WinDBG调试,中断在SListRemove,调用了DetachUser,发现只有多次调用SListRemove及 DettachUser时会使用到SListRemove断链附近的内存空间。我们尝试达成在HandleAttachUserReq函数里,*((_BYTE *) P + 5)为空,P不为空。最终,构造出的POC(漏洞验证代码)。
主要流程是正常的RDP连接,并发送有多个请求,并包含一部分user data数据。
调试过程中,在第三次DetachUser时,eip指针指向了未释放的内存,然后从b2350434直接跳到了80528bec。
这个时候系统自身的保护机制已经检测到运行到无效指针了。系统的自保护函数开始运行。目标机也已经进入黑屏,继续蓝屏。
由于释放后重用的指针不可控,所以该漏洞常用于造成DoS攻击,对于开启了3389端口的相应windowsXP、2003、2008、7等操作系统,均可造成直接蓝屏,对于这个漏洞的相关安全补丁也已经及早由微软安全中心、各大杀毒厂商推送。并且由于需要相应ip及3389端口 ,所以一般常用于内网攻击,对于与外网相连只要关闭3389端口即可,当然最重要的还是及早更新。
4 结束语
本文首先对APT攻击进行了详细的介绍,接着分析了几种常见的APT攻击方法,提出了补丁对比技术在APT攻击中的应用。然后从系统及WEB漏洞补丁对比两个案例为例展示了如何利用补丁对比来进行漏洞挖掘和利用从而进行APT攻击。最后提醒应用软件开发商在进行补丁修补时要从安全的角度对补丁修补采用一定的混淆技术。
[1] Greg Day. 文章名[Advanced persistent threats-time to run for cover].
[2] Ali Lslam.文章名[2013:Attack Trends For The Year Ahead]
[3] Alex Lanstein.文章名[APTs By The Dozen:Dissecting Advanced Attacks]
[4] Eddie Schwartz.文章名[SPO-208-Getting Ahead of Targeted and Zero-Day Malware Using Multiple Concurrent Detection Methodoloies].
[5] Aaron Turner.文章名[MobileAPT:How Rogue Base Stations Can Root Your Devices]
Patch Contrast Vulnerability Mining Technology Used in APT Attack
Guo Wei,Jiang Han,Deng Yundong
(Yunnan State Grid Network Information Center, 650217)
It is the seriousness of APT attack that poses a great threat to the network security of mass use rs.The ways that APT attacks are various,while the most dangerous one is the technology of taking advantag e of bugs.This research brings forward how vulnerability detection is applied in dealing with APT Attacks. It elaborates vulnerability mining technology principle of comparative patch and examples and the harm and proposes suggestion accordingly.
Advanced Persistent Threat;Zero day Vulnerability;Patches Comparison;Vulnerability detection;Social Engineering
云南电网年度科技基金资助项目“高级持续性威胁检测研究”(K-YN2013-148)
江瀚,男,工程师,通信工程专业,主要从事信息安全工作;
郭威,男,助理工程师,信息技术专业,主要从事信息安全工作;邓韵东,男,助理工程师,主要从事软件开发和信息系统测评工作