6

深入调查 Angler 漏洞攻击工具(EK) | WooYun知识库

 6 years ago
source link:
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

深入调查 Angler 漏洞攻击工具(EK)

https://blogs.sophos.com/2015/07/21/a-closer-look-at-the-angler-exploit-kit/

0x00 前言


在过去的几年中,犯罪分子广泛地采用EK(漏洞攻击工具)来实施木马感染活动。EK工具通常会出现在名叫Drive-by的攻击阶段,”drive-by”能够悄悄地把用户浏览器定向到一个恶意网站,而在这个网站上就会放置着某个EK。

然后,EK就会利用安全漏洞,让用户感染木马。整个过程可以是完全隐藏的,并且不需要用户进行操作。

在本文中,我们研究的就是臭名昭著的Angler EK。

0x01 介绍


Angler最早出现在2013年末,自此以后,Angler在犯罪市场中的受欢迎程度与日剧增。为了绕过安全产品的检测,Angler使用了多种组件(HTML, JavaScript, Flash, Silverlight, Java等),以及这些组件的不同变种。另外值得一提的是Angler非常活跃。比如,在2015年5月,我们每天都能发现上千个新出现的Angler陷阱网页,也就是所谓的“Landing page”。

从每周检测量来看,Angler从2014年中期开始出现,在2014年末突然爆发,接着稍有缓和,然后自2015年起,活动数量又开始攀升:

p1 Figure 1-根据每周检测量画出的Angler增长趋势

由于Blackhole EK在2013年10月停止了活动,相关的攻击者也被逮捕,所以其他的EK得以发展,并分割了市场份额,但是占主导地位的还是Angler EK。为了显示Angler的受欢迎程度,我们分析了在3个不同时期中,各个EK的活动情况(2014年9月、2015年2月、2015年5月):

p2 图2-在2014年9月,2015年2月和2015年5月,根据每周检测数据衡量的EK活动分布

0x02 流量控制


很明显,任何EK只有利用了目标计算机上的漏洞并安装上木马,才能算是成功。但是,EK还需要大量的输入流量,才能掌握潜在受害者信息。对于大多数drive-by下载而言,这一点是通过入侵合法网站并注入恶意HTML或JavaScript来实现的。受害网站的级别和受欢迎程度越高,EK能获取到的流量就会越多。

我们已经发现了好几种能把用户的web流量发送给Angler的技术 。其中有很多都利用了简单的IFRAME(嵌入式 HTML框架)注入,注入的一般是HTML或Javascript,没有多少意思。但是,Angler使用的某些重定向方法更特殊,值得在这里一提。

2.1 HTTP POST重定向

在前面,我提到过一般来说用户是看不到重定向过程的。实际上,情况也不一定总是这样,比如,就从2014年5月的第一个例子来看,我们发现大量的合法网站中既注入了JavaScript也注入了HTML,如下。不同于常规注入,在这里的某些JavaScript中还增加了FORM和DIV元素:

p3 图3-注入的JavaScript和HTML(检测为Troj/JSRedir-OA)

在加载页面时,用户会看到一个对话框,提示用户点击“Yes”或“Cancel”。根据注入的JavaScript来看,无论点哪个,Go() 函数都会运行,移除这个弹窗,添加一个IFRAME占位符,然后提交表单:

p4 图4-当用户的浏览器注入Troj/JSRedir-OA时显示的弹窗

表单发送的数据包括3个值(经过编码),可能是为了协助犯罪分子管理这一重定向机制:

  • IP地址
  • User-Agent 字符串
  • URL

接着,响应POST表单的是HTML和JavaScript(加载到IFRAME占位符中),用于重定向用户:

p5 图5- HTTP POST请求的响应中包含用于进行重定向的JavaScript

几个月后,我们发现了相似的技术,但是这次是一个Flash组件。被攻破的网站经过篡改,会包含有HTML,这个HTML会加载来自另一个被攻破网站的恶意Flash文件。

然后,这个Flash文件中的ActionScript 会获取各种参数,并发出 HTTP POST 请求。

p6 图6-在Flash版 Troj/JSRedir-OA中使用的ActionScript

HTTP POST请求的响应和以前一样(图5),返回的HTML和JavaScript会重定向用户。有趣的是,在2015年初,我们发现Nuclear EK也使用了后面这种重定向技术来发送流量。

2.2 域名生成算法

另外我们还观察到Angler 使用了域名生成算法(DGA)来进行重定向。在2014年,大量的合法网站都被注入了JavaScript,这个JavaScript中添加了一个脚本元素从远程网站上加载内容,这个远程网站的主机名是根据当前日期的哈希确定的。这种思路就是要每天都使用不同的域名,但是恶意脚本中不会有以后要使用的域名。这些DGA重定向曾经使用了.EU和.PW域名。

p7 图7-使用DGA重定向的JavaScript中的代码段(Troj/JSRedir-OE)

这种重定向方法有缺点,一旦知道了这种算法,安全社区就能够预测特定日期时使用的目标主机名,并进行拦截,从而有效地阻止攻击行动。

2.3 HTTP重定向

本章中的最后一个例子利用了web重定向,在这种重定向中使用了HTTP响应代码302,这个代码通常是在合法网站上使用,用于转移其他网站上的访客。这里会涉及到内容注入,以及与重定向过程中的联系。在2015年4月,我们注意到用户在浏览eHow网站时会被重定向到Angler。通过分析其流量,我们确定了重定向过程,如图8。

ehowcdn.com 中的一个合法库中注入了JavaScript,似乎是从一个Optimizely服务器中加载内容(Optimizely提供了网站分析服务,通常是为了评估web广告的有效性)。但是,注意在optimizelys.com的主机名结尾有一个“s”,而合法的域名是optimizely.com。

p8 图8-近期伪装成Optimizely的重定向

1:eHow网站上的web网页,2:ehowcdn.com上的脚本会从optimizelys.com上加载脚本,3:用于添加恶意iframe脚本,4:302跳转到Angler登录页

在观察到这种情况的几天中,有报告称其他网站上也发现了相同的重定向(还是cdn3.optimizelys.com)-这次,最后的目标是Nuclear EK。

0x03 漏洞攻击工具


3.1 Landing page

“Landing page”就是漏洞攻击工具代码的起点。通常,登录页(Landing page)上会使用HTML和JavaScript内容来识别访客的浏览器以及安装的插件,这样EK就能选择最有可能导致drive-by下载的攻击手段。

在Angler登录页上使用了多种混淆技术。除了增加分析难度,这些技术还能让犯罪分子更方便地根据每条请求制定不同的内容,从而绕过安全产品的检测。在过去的几年中,Angler一直会把自己的主脚本功能编码成数据字符串,储存到父HTML中。然后,当浏览器加载了登录页后,就会获取和解码这一内容。有很多恶意威胁都使用了这种anti-emulation技术。

在解码了最外层的混淆后,就会暴露Angler使用的另一项技术-反沙盒检查。Angler利用了IE浏览器中的XMLDOM功能来判断本地系统上的文件信息。这样是为了检测系统上的安全工具和虚拟化产品。

p9 图9-Angler登录页上的代码段,这些代码会检测不同的安全工具和虚拟化产品

在反沙盒检测的下面是第二层混淆。某个函数会被调用,用于把几个长字符串转换成Unicode(双字节)数据,其中一些数据实际是随后添加到网页上的脚本内容。在大多数情况下是JavaScript,但是有时是VBScript内容(尤其针对的是CVE-2013-2551):

p10 图10-第二层混淆,隐藏shellcode数据和添加到页面上的额外脚本内容(在这里CVE-2013-2551是要针对的漏洞,所以JS和VBS内容都要添加)

在各个版本的登录页中,增加的脚本内容是为了针对特定的漏洞。但是,所有添加的脚本中都会有代码来:

  • 动态构建 shellcode
  • 从Angler登录页中的一个数组中获取数据(如下)

Angler登录页中包含有一个加密的字符串数组,在解码页面上,JavaScript函数会提供一个简单的代换密码来解码一个每个字符串。(有时候,编码字符串会储存到一个变量序列中,但是,更常用的是一个数组。)在木马中使用的秘钥通常是数组中的第一个字符串(uhBNwdr[0] 下):

p11 图11-在Angler登录页上使用的替换密码

这个数组的大小和内容会根据这版EK所针对的漏洞而变化。在数组中储存的数据包括:

  • 托管EK的服务器名称
  • 用于定位Silverlight内容的文件夹
  • 用于定位Flash内容的文件夹
  • 有效载荷 URLs.
  • Flash 有效载荷字符串 (编码的 shellcode 获URL数据)

必须要获取和解码这些数据。在这,你可以看到相关的有效载荷字符串都整合到了动态生成的shellcode中:

p12 图12-用于创建unicode字符串的JavaScript函数,随后,当shellcode在利用CVE-2014-6332时,会解码这个unicode字符串

用于加载恶意Flash组件的代码很直接。假设已经通过了反沙盒检测,三个很有特点的(get*)函数会获取和解码登录页上的字符串。然后,这些字符串会用于创建HTML对象元素,然后这个对象会添加到文档中:

p13 图13-用于加载恶意Flash内容的Angler登录页代码

3.2 Flash内容

经过多年的发展,Angler的Flash内容也发生了很大的变化。这些样本会使用不同的技术进行混淆,包括:

  • ActionScript 字符串混淆技术
  • Base64 编码
  • RC4 加密
  • Flash 混淆/保护工具 (比如,DoSWFsecureSWF)

另外,Angler使用了内嵌的Flash对象。从登录页上加载的初始Flash并不是恶意的,而仅仅是作为一个loader通过一个内部Flash来投放漏洞。这个内部Flash可能是一个binaryData对象,或编码成ActionScript内部中的一个字符串。无论是哪种情况,数据会使用RC4加密。下面是一个1月份的例子:

p14 图14-最外部的Flash运载着使用了RC4和Base64编码的内部Flash

登录页上的数据会通过使用登录页HTML中的一个FlashVars参数,传递到Flash上-这是近期EK经常使用的一种技术。

通过loaderInfo对象的参数属性,就可以访问ActionScript 。很多EK都利用这种机制,以便:

  • 在有效载荷URL数据中传递.
  • 在shellcode中传递

这种灵活性能允许动态地修改shellcode,并且不需要重新编译Flash本身。

图15中是近期Angler Flash对象中使用的ActionScript代码段,用于从登录页上获取编码数据(“exec”变量)。另外,你可以使用某些函数中的控制流混淆来增加分析难度:

p15 图15-从登录页上获取编码数据(“exec” 变量),然后通过ActionScript函数解码

在2015年初,又出现了一些Adobe Flash Player 0-day漏洞(包括,CVE-2015-0310,CVE-2015-0311,CVE-2015-0313, CVE-2015-0315,CVE-2015-0336,CVE-2015-0359),Angler很快就盯上了这些漏洞。

在过去的18个月中,越来越多的攻击活动利用了Flash漏洞,而不是Java,因为Oracle在Java 7 update 51中默认会阻止使用没有签名的浏览器。

3.3 分析Shellcode

如上,当浏览器加载登录页时,shellcode就会在脚本中动态生成。Shellcode的内容会根据目标漏洞而变化,但是,所有的编码方式和结构都是类似的。下面的分析介绍了针对CVE-2014-6332时使用的shellcode。

第一眼看上去,很明显shellcode数据(图10和图12中的shellcode_part1, shellcode_part2 和shellcode_part3 )中并没有包含有效的代码。通过进一步的检查你就知道原因了-其他的数据是从VBScript组件中加载到了shellcode的开头。图12中的JavaScript build_shellcode()函数实际是从VBScript(图16)调用的。

p16 图16-VBScript的代码段,用于构建针对CVE-2014-6332 漏洞的shellcode

通过分析VBScript(图16中的buildshell1)提供的其他Unicode数据,证实了这些代码是可执行代码,并且在这些代码中实际包含了一个解密循环,用于解密shellcode其他部分中的字节,包括有效载荷URL和解密秘钥。这个解密循环会逆向图12中的encData() 函数,而有效载荷URL和有效载荷秘钥就是在这里加密的。

p17 图17-shellcode的代码段,例证了VBScript提供的解密循环

我们又检查了另一个登录页样本,这次针对的是CVE-2013-2551,这个样本使用了同样的技术,但是这次,解密循环添加到了JavaScript中:

p18 图18-JavaScript代码段,显示了和图17中相同的shellcode解密循环

在完成了这个循环后,主要的shellcode主体就解密出来,可以分析了。

在解析了kernel32的基址后,shellcode会解析导出地址表来寻找需要的函数(通过哈希识别)。然后,shellcode会使用LoadLibrary API加载winhttp.dll,并解析这些导出从而找到需要的函数:

模块 函数(根据哈希导入)
kernel32.dll CreateThread, WaitForSingleObject, LoadLibraryA, VirtualAlloc, CreateProcessInternalW, GetTempPathW, GetTempFileNameW, WriteFile, CreateFile, CloseHandle
winhttp.dll WinHttpOpen, WinHttpConnect, WinHttpOpenRequest, WinHttpSendRequest, WinHttpReceiveResponse, WinHttpQueryDataAvailable, WinHttpReadData, WinHttpCrackUrl, WinHttpQueryHeaders, WinHttpGetIeProxyConfigForCurrentUser, WinHttpGetProxyForUrl, winHttpSetOption, WinHttpCloseHandle

如果漏洞利用成功,shellcode就会下载有效载荷并使用前面提到的秘钥解密。Angler会根据不同的利用路径(Internet Explorer, Flash, Silverlight – 至少已知有两个秘钥 )使用不同的秘钥。

在解析了有效载荷后,shellcode会检查标头来识别有效载荷更像是shellcode(一开始会启动一个什么都不做的NOP函数)还是Windows程序(一开始会识别文本字符串“MZ”):

p19 图19-shellcode中检查有效载荷类型的逻辑

如果解密后的有效载荷是一个程序,那么会保存并运行这个程序。如果这是一个第二阶段的shellcode,那么在这个shellcode(32位和64位都有)的主体中就会内嵌有最后的可执行有效载荷。

当第二阶段的shellcode运行时,有效载荷会被直接插入到漏洞应用进程的内存中,而不会首先写入到磁盘上。这种“不写文件”的特性是Angler最近新增的。这种机制是为了让用户感染Bedep木马家族,这种木马能允许攻击者额外下载其他的木马。

0x04 网络情况


在这一部分,我们会把重点从内容分析转向Angler的网络活动。

4.1 最新注册

在大多数web攻击中,Angler使用了最新注册的域名。

在drive-by下载攻击中,我们经常会看到一些注册地址会在短时间内解析到相同的IP。

有时候,Angler也会使用免费的动态DNS服务,这是EK广泛使用的一些技术。

4.2 域名阴影(Domain shadowing)

Angler也大量使用了黑来的域名来添加dns记录,攻击者在好几年的时间中都在使用这种技术,最近这种技术似乎再度流行开来。这些犯罪分子更新了一些合法域名的DNS记录,添加了多个指向恶意EK的子域名-这种技术叫做域名阴影

图20中就是一个例子,这些活动发生在2015年5月。在这些攻击活动中,使用了更高级的技术,其中DNS记录更新成了通配符项目(*.foo.example.com,*.bar.example.com)。在这次攻击中,DNS记录更新成了:

  • *.bro.directorsinstitute.net
  • *.fer.directorsinstitute.org

这样可以允许攻击者把阴影域名解析到恶意IP上,在截稿时,这个IP来自俄罗斯的一台计算机。你可以看到,在Angler重定向中使用的三级域名似乎是一个6字符的字符串,可能是为了允许攻击者跟踪和确定流量的来源(可能是为了统计和付款)。

p20 图20-Angler(2015年5月)使用的域名阴影(2级子域名)

在其他的一些例子中,我们发现Angler利用了1级DNS攻击:

p21 图21-Angler(2015年5月)使用的域名阴影(1级子域名)

在其他一些情况下,子域名中使用的字符串似乎与阴影域名相关。这就说明有人的参与,而不是由程序随机生成的字符串。

域名阴影需要犯罪分子能够修改合法的DNS记录,很可能是通过窃取到的凭证做到的。网站所有者并不都理解DNS记录的关键性,所以很多供应商/注册商也不会关心DNS配置。

大多数网站所有者很少需要更新DNS记录,所以任何更新都需要更多的保护手段,而不仅仅是依靠用户凭证。下面是一些改进建议:

  • 实现双重认证
  • 在更改了DNS后,发送邮件通知

通过与Nominet研究人员的合作,我们得以更进一步调查Angler使用的域名阴影活动。我们想要借此确定DNS记录被攻击的时间。我们集中调查了一些DNS查询活动,这些DNS查询活动来自一些与遭到攻击的用户账户相关联的域名,攻击者主要是利用了2级域名阴影来发动了攻击(图20)。

图22中是2015年2月26日的DNS查询活动,包括有3个域名的数据(都是来自同一个遭入侵的账户)。绿圈表示的是总体查询量;紫色方块突出的是超过平均水平的查询量;白圈表示的是快速增加的查询量,当时,攻击者开始在Angler的流量中使用这些域名。

p22 图22-3个域名在2015年2月16日的DNS查询时间

通过这些数据可以看出这次攻击有两个阶段。首先,攻击者在早上10点,通过少量的DNS查询测试了DNS记录。这些查询测试的是1级子域名(foo.domain.co.uk),并且所有的查询都是同一个来源。

一旦攻击者满意域名的解析情况,我们发现大量的恶意Angler流量中使用了2级子域名。在图22中,你可以看到攻击者在围绕使用不同的域名,每个域名只会活动很短的时间。这也符合我们的遥测数据检测,我们也在每个主机名上发现了大量类似的活动。

通过这些信息,我们能更好的了解这些基础设施,以及对用户流量的控制管理。

4.3 URL 结构

在Drive-by攻击中的多个组件都使用了一个URL结构,利用这个URL结构可以很好地识别用户流量中的恶意活动。在以前,就有EK在不同的组件中使用了可预见的URL结构,致使安全厂商可以更容易的检测和拦截恶意内容。在某些来自Nuclear和Blackhole EK的样本中包括:

  • 时间戳作为文件名
  • 文件中使用的哈希和文件夹名称
  • URL的查询部分中使用了有特点的文本

相似的缺陷曾还出现在了早期的Angler中,但是Angler自此以后就在不停地进化,逐步移除了这些弱点,包括在组件使用的容易识别的URL。

0x05 有效载荷


最后这一部分,我们概括了通过Angler安装的木马。为了调查这些木马,我们分析了在2015年4月使用的有效载荷。

你可以看到,所有在这段时间中收集的有效载荷都是通过IE(59%)或Flash(41%)漏洞投放的:

p23 图23-在2015年4月投放Angler有效载荷时利用的漏洞

这一点也符合我们最近找到的Angler登录页数据,我们还没有发现Angler利用了Silverlight或Java漏洞。但是,根据受害者的计算机配置比Angler自己更能说明结果,因为Angler不会漏洞攻击没有安装的组件。

这些drive-by下载活动安装了下列的木马加载:

p24 图24-Angler在2015年4月安装的木马家族

很明显,这里有一个勒索软件- 有asterisks标签的都是勒索软件家族,占了木马攻击活动的50%以上。最常用的勒索软件是Teslacrypt

0x06 总结


在本文中,我们自上而下的分析了Angler EK,强调了Angler如何通过感染web页面来获取更多的流量。

在提供保护时,理解这种行为是非常关键的。Angler会尝试绕过各个 层级上的检测。为了绕过名誉过滤机制,Angler会快速地交换主机名和IP,并使用域名阴影来伪装成合法域名。为了绕过内容检测,Angler会根据受害者来动态地生成组件,并使用各种编码和加密技术。最后,Angler使用了混淆和反沙盒技术来增加样本的收集和分析难度。

如上所述,Angler在近几个月中已经超过了其对手。可能的原因有很多:比如Angler通过感染网页能获取更多的流量,漏洞利用的成功率很高;在犯罪社区中的宣传;更具吸引力的价格-换句话说,从使用Angler按照“安装收费”的回报率更高。

有一件事很明显,对于当今任何浏览网页的用户,Angler都会造成严重的影响。

0x07 致谢


我们感谢安全社区中对追踪EK活动做出的贡献各名用户。但是,我们要致敬@kafeine@EKwatcher对筹备这篇文章所做出的努力。

另外还要感谢SophosLabs的Richard Cohen 和 Andrew O’Donnell对shellcode组件部分做出的贡献。

感谢Nominet 的Ben Taylor, Sion Lloyd 和 Roy Arends 提供的DNS域名阴影技术知识。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK