导语:思科Talos团队最近新发现了一个新的恶意软件活动,该活动使用的是一种复杂的窃取信息的木马,该木马功能虽然和Agent Tesla以及其他恶意软件(如Loki信息窃取工具)很像,但木马使用的名称却不是 “Agent Tesla”或“Loki”。
前言
思科Talos团队最近新发现了一个新的恶意软件活动,该活动使用的是一种复杂的窃取信息的木马,该木马功能虽然和Agent Tesla以及其他恶意软件(如Loki信息窃取工具)很像,但木马使用的名称却不是 “Agent Tesla”或“Loki”。
最初,Talos的安全检测系统检测到一个非常可疑的文件,而这些文件起初并未没有被普通的杀毒软件检测到。但是,思科的统一恶意软件分析和威胁情报平台ThreatGrid已将此未知文件识别为恶意软件。经过分析,这个恶意文件幕后的开发者在传播它时,虽然使用的是一个常见的漏洞利用链,但方式却非常独特,以至于它不会被常见的安全解决方案检测到。
在这篇文章中,思科Talos团队将概述恶意文件逃避检测的详细过程,并解释为什么今后要使用更复杂的软件来跟踪这类攻击。想想都后怕,如果此类攻击未被发现,Agent Tesla可以从许多重要的软件中窃取用户的登录信息,例如Google Chrome,Mozilla Firefox,Microsoft Outlook和许多其他软件。另外它还可用于捕获屏幕截图,通过网络摄像头头盔,并允许攻击者在受感染的系统上安装其他恶意软件。
技术细节
在大多数情况下,这类攻击的第一阶段发生的方式与FormBook恶意软件活动类似,FormBook是一个数据窃取和表单攫取的工具,该工具自2016年初以来就开始在各种黑客论坛上开始出现。思科Talos团队今年早些时候在一篇博客中对FormBook进行了专门的讨论。之前FormBook活动背后的攻击者使用的是CVE-2017-0199(多个版本的Microsoft Office中的远程执行代码漏洞)从恶意DOCX文件中下载和打开RTF文件。不过,研究人员发现,Tesla和Loki最近的正在以一种新的传播方式在扩散,它们正在利用CVE-2017-11882(一个栈溢出的远程执行漏洞)的特性。除了Agent Tesla和Loki之外,新的恶意软件活动还传播了许多其他恶意软件系列,例如Gamarue,它能够完全接管用户的设备,并具有与典型信息窃取器相同的功能。
前面提到的FormBook博客中,就包含了关于这个阶段的更多信息。许多用户都认为,现代Microsoft Word文件比RTF或DOC文件更安全。在一定程度上这种说法是正确的,但攻击者仍然可以找到使用这些新文件格式来利用各种漏洞的方法。
比如本文提到的Agent Tesla,下载的文件是一个带有SHA256哈希值cf193637626e85b34a7ccaed9e4459b75605af46cedc95325583b879990e0e61的RTF文件。在对该文件进行分析时,即使在多引擎杀毒扫描网站VirusTotal上也几乎检不测到该文件。在58个杀毒程序中,只有两个程序对此哈希值的存在进行了可疑性检查。但是标记此可疑示例的程序只是将其警告为格式错误的RTF文件,AhnLab-V3(一种综合安全应用程序)将其标记为“RTF/ malforma”。而Zoner(Zoner AntiVirus Free)将其标记为 “RTFBadVersion”。只有思科的ThreatGrid进行了准确的检测并将该文件标识为恶意软件。
研究人员时通过行为指标(BI)来评估恶意行为的,部分结果如上图所示。根据样本的进程树信息,可以发现该样本执行链非常可疑,部分结果如下图所示。
研究人员发现Winword.exe启动后, svchost进程执行Microsoft公式编辑器(EQNEDT32.exe),该编辑器会启动一个名为“scvhost.exe”的进程。公式编辑器是Microsoft Office用作辅助应用程序的工具,用于将数学方程式嵌入到文件中。例如,Word使用OLE/COM函数启动公式编辑器。对于公式编辑器应用程序来说,启动其他可执行文件非常罕见,更不用说使用这样一个类似系统文件“svchost.exe”名称的可执行文件,且“svchost.exe”本身就非常可疑。用户此时很容易将可疑的“svchost.exe” 名与 “scvhost.exe”混淆。
根据ThreatGrid捕获的信息,研究人员可以确认该文件就是典型的恶意软件行为。
你可以在上图中标记的第1点和第2点看到公式编辑器下载了一个名为“xyz [1] .123”的文件,然后创建了scvhost.exe进程,该进程稍后创建了自己的另一个实例[scvhost.exe(26)](蓝色矩形框里)。紧接着,就会产生典型的命令和控制(C2)流量(在第4点)。此时,研究人员可疑百分百确认这就是恶意软件。问题是为什么没有任何杀毒系统能检测到它的存在?它是如何逃避检测的?
基于RTF恶意文件的攻击活动
RTF标准是微软出于跨平台文件交换而开发的专有文件格式,RTF是Rich Text Format的缩写,即多文本格式。这是一种类似DOC格式(Word文件)的文件,有很好的兼容性,使用Windows“附件”中的“写字板”就能打开并进行编辑。使用“写字板”打开一个RTF格式文件时,将看到文件的内容;如果要查看RTF格式文件的源代码,只要使用“记事本”将它打开就行了。这就是说,你完全可以像编辑HTML文件一样,使用“记事本”来编辑RTF格式文件。简化的标准RTF文件看起来就像你在上图中看到的那样。它由文本和控制字(字符串)构成。上半部分是源代码,下半部分显示了如何在Microsoft Word中显示这个文件。
RTF文件不支持任何宏语言,但它们通过“\object”控制字支持Microsoft对象链接和嵌入(OLE)对象以及Macintosh Edition Manager订阅者对象。用户可以将相同或不同格式的对象链接或嵌入到RTF文件中,例如,用户可以将由Microsoft公式编辑器创建的数学方程式公式嵌入到RTF文件中。简化后,它将作为十六进制数据流存储在对象的数据中。如果用户使用Word打开此RTF文件,它会通过OLE函数将对象数据移交给公式编辑器应用程序,并以Word可以显示的格式返回数据。换句话说,即使Word无法在没有外部应用程序的情况下处理它,该公式也会显示为嵌入在文件中。这几乎就是文件“3027748749.rtf”正在做的事情,但唯一的区别是,它增加了很多混淆,如下图所示,.RTF标准的主要缺点是它带有太多的控制词,而普通的RTF解析器则会忽略它们不知道的任何东西。因此,攻击者有很多混淆RTF文件内容的途径。
尽管RTF文件被严重混淆了,但研究人员还是能够使用rtfdump/rtfobj工具来验证结构并提取实际的对象数据有效载荷,下图显示了该文件试图启动Microsoft公式编辑器(类名:EQuATioN.3)的过程。
在图6中,你还可以看到攻击者正在使用\objupdate技巧。这会强制嵌入对象在显示之前进行更新。换句话说,用户在加载之前不必单击该对象。一般情况下,这不会产生什么问题,但是通过强制打开文件,漏洞马上就会被利用。
上图中的objdata数据,会将将二进制转化为十六进制表示的数据流。如果想详细了解此过程请点击这里。
我们可以找到类似于以上FormBook文章中描述的MTEF数据标头,但是为了避免检测,攻击者已经改变了原有的标头。除了在MTEF版本字段中,actor已经使用随机值填充了标头字段,MTEF版本号字段的值需设置为2或者3,才能让漏洞利用成功。
在MTEFF数据标头之后,我们会看到一个未知的MTEF字节流标记(F1 01),后面紧跟一个字体标记(08 E0 7B…)。字体标记后面的字节(B9 C3 …)看起来不像正常字体名称,这就让研究人员起疑了,可能攻击者就是在此发起的漏洞攻击。通过解码这些字节,研究人员发现它们确实和他们之前进行的研究中看到的样本非常不同。
这与我们之前看到的非常相似。在下图中,我们可以看到研究人员之前研究中解码的shellcode。
可以看到,攻击者刚刚更改了寄存器的一些设置,虽然如此,研究人员已经非常确定这是CVE-2017-11882,不过为了出于谨慎,还得进行详细确认和验证。
2017年11月14日,微软发布了11月份的安全补丁更新,其中比较引人关注的莫过于悄然修复了潜伏17年之久的Office远程代码执行漏洞(CVE-2017-11882)。该漏洞为Office内存破坏漏洞,影响目前流行的所有Office版本。攻击者可以利用漏洞以当前登录的用户的身份执行任意命令。
借助动态分析引擎PyREBox来验证
为了验证恶意RTF文件是否利用的是CVE-2017-11882,研究人员使用了由Talos团队开发的动态分析引擎PyREBox。该工具允许研究人员检测整个系统的执行情况,并监控不同的事件,例如指令执行,内存读写,操作系统事件,还提供交互式分析功能,允许研究人员随时检查任何模拟系统的状态。有关该工具的其他信息,请点此。
在此次分析中,研究人员还利用了影子堆栈插件(shadow stack plugin),该插件于今年早些时候在EuskalHack Security Congress III上与其他漏洞利用分析脚本(shellcode检测和stack pivot检测)一同发布的。这个脚本可以监控指定进程(公式编辑器进程)上下文中执行的所有调用以及RET指令,并同时维护一个影子堆栈,以用来跟踪所有有效的返回地址(那些在每个执行的调用指令之后的地址)。
研究人员唯一需要做的就是配置插件来监控公式编辑器进程(插件会等待该进程执行),并在模拟的guest虚拟机中打开RTF文件。只要RET指令跳转到不在调用指令之前的地址,PyREBox就会停止执行系统。这种方法允许研究人员检测出堆栈溢出漏洞,这些漏洞会覆盖存储在堆栈中的返回地址。一旦执行停止,PyREBox就会产生一个交互式IPython shell,它允许研究人员检查系统并调试或跟踪公式编辑器进程。
检测到返回无效地址0x44fd22时,PyREBox在停止执行
检测到返回无效地址0x44fd22时,PyREBox停止执行,该地址属于CVE-2017-11882中的易受攻击的函数。在本文的样本中,恶意软件开发者决定利用此漏洞,用公式编辑器的主要可执行模块0x0044fd22中包含的地址覆盖返回地址。如果研究人员检查这个地址(参见上图),研究人员就会看到它指向另一个RET指令,该指令将从堆栈中弹出另一个地址并跳转到该地址。此时影子堆栈插件再次检测到这种情况,在下一次漏洞利用时停止执行。
上图显示了shellcode执行的第一个阶段,这段代码会在第二个RET指令后执行。此shellcode将调用GlobalLock函数(0x18f36e),然后将跳转到包含shellcode第二阶段的第二个缓冲区。
第二阶段shellcode
第二阶段shellcode包含一系列jmp/call指令集合以及一个解密循环:
第二阶段shellcode的解密循环
此解密循环将解包shellcode的最终有效载荷,最后跳转到此解码缓冲区。PyREBox允许研究人员在执行期间的任何时刻转储包含shellcode的内存缓冲区。有几种方法可以实现这一点,但最实用的方法是使用Volatility框架(可通过PyREBox shell获得)列出进程中的VAD区域并转储包含有趣代码的缓冲区,然后研究人员可以将此缓冲区导入IDA Pro以进行更深入的分析。Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
解码的第二阶段(最后一阶段shellcode)缓冲区
最后一阶段shellcode非常简单,它利用标准技术在PEB中可用的已加载模块的链接列表中查找kernel32.dll模块,然后,将解析其导出表以找到LoadLibrary和GetProcAddress函数。通过使用这些函数,该脚本会先解析了几个API函数(ExpandEnvironmentStrings,URLDownloadToFileA和ShellExecute),从URL下载并执行xyz.123二进制文件,我们已从Threat Grid的分析结果中看到过这个文件。启动此可执行文件的shellcode的名称为“scvhost.exe”,我们之前在ThreatGrid的分析结果中也看到过这个名称。
我们还看到了其他几个使用完全相同的感染链的活动,但它们最终都会将Loki作为最终的有效载荷,详情请看IoC附录。
有效载荷分析
现在让我们来看看最终的有效载荷文件“xyz.123”(a8ac66acd22d1e194a05c09a3dc3d98a78ebcc2914312cdd647bc209498564d8)或“scvhost.exe”。
$ file xyz123.exe xyz123.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
将文件加载到dnSpy以确认该有效载荷文件是否是一个严重混淆的.NET可执行文件。dnSpy是一款针对 .NET 程序的逆向工程工具。该项目包含了反编译器,调试器和汇编编辑器等功能组件,而且可以通过自己编写扩展插件的形式轻松实现扩展。该项目使用dnlib读取和写入程序集,以便处理有混淆代码的程序(比如恶意程序)而不会崩溃。
类构造函数(cctor)首先会执行如下方法,将一个大型数组加载到内存中并加以解码。
<Module>.ҭъЩӂӬҀУ\u0486\u0489їҒреӱҤЫѝйҹП()
cctor的其余部分会从数组中重构xs.dll和其他代码,并在入口点继续执行其他例程。最后,它通过调用p.m.()方法跳转到xs.dll中。
很明显,研究人员可以根据其中的信息判断处这个程序集使用Agile.Net混淆工具进行了混淆。
由于没有自定义混淆,研究人员只执行了该文件,一段时间后,再通过Megadumper转储它,Megadumper工具可以直接从内存中导出.NET可执行文件。
反混淆代码的第一步
不幸的是,混淆工具使用了H.G()方法加密了所有字符串,研究人员无法看到这些字符串的内容。
幸运的是,de4dot .NET反混淆工具只用一个命令就可以破解这个加密过程。研究人员只需要告诉de4dot .NET样本中的哪个方法可以在运行时解密字符串,具体方法是输入解密方法对应的令牌(本文是 0x06000001 )。 由于De4dot在自动检测Agile .NET混淆工具方面不太灵,因此研究人员需要使用-p参数手动输入该信息。
de4dot .NET反混淆工具
虽然看起来操作失败,但其实所有的混淆字符串都已经被de4dot .NET反混淆工具替换并恢复了,如下所示。
解码后的字符串
通过分析这些源代码,研究人员发现攻击者使用的是具备信息窃取或具有RAT功能的恶意软件 Agent Tesla 。 Agent Tesla包含许多恶意功能,例如密码窃取,屏幕捕获和下载其他恶意软件的能力。然而,该产品的销售说明上显示Agent Tesla只适用于密码恢复和儿童安全追踪。
密码窃取方法示例
该恶意软件带有密码窃取程序,可用于超过25种常见应用程序和其他rootkit功能,如键盘记录,剪贴板窃取,屏幕截图和网络摄像头访问。恶意软件可以窃取许多应用中的密码,其中就包括:
· Chrome
· Firefox
· Internet Explorer
· Yandex
· Opera
· Outlook
· Thunderbird
· IncrediMail
· Eudora
· FileZilla
· WinSCP
· FTP Navigator
· Paltalk
· Internet Download Manager
· JDownloader
· Apple keychain
· SeaMonkey
· Comodo Dragon
· Flock
· DynDNS
如下图所示本次使用的Agent Tesla版本还支持使用SMTP、FTP以及HTTP协议发送窃取的数据,但仅限于HTTP POST方法。攻击者会预先在恶意软件的配置数据中的一个变量中硬编码数据窃取方式,等到攻击启动后,此预定义方式就会被检测到。
if (Operators.CompareString(_P.Exfil, "webpanel", false) == 0) ... else if (Operators.CompareString(_P.Exfil, "smtp", false) == 0) ... else if (Operators.CompareString(_P.Exfil, "ftp", false) == 0)
HTTP数据窃取例程
如下所示,恶意软件还会创建POST请求字符串。
POST请求
然后,在发送盗取的信息之前用3DES对其进行加密(加密过程如下图所示)。图26(HTTP数据窃取例程)中的_P.Y(“0295A … 1618C”)方法可以创建字符串的MD5哈希值,此哈希值会被用作3DES加密算法的密钥。
DES加密方法
总结
这是一个非常高级的恶意软件传播方法,可以避免被大多数防病毒应用程序检测到。之所以会如此,是因为攻击者非常狡猾使用了RTF标准,并使用经过修改的Microsoft Office漏洞来下载Agent Tesla和其他恶意软件。不过目前,研究人员还未搞清楚攻击者是手动修改了漏洞利用的方式还是使用工具自动生成shellcode。无论使用的是哪种方式,都表明攻击者已经具有了修改汇编代码的能力,使得生成的opcode字节看起来还原来的完全不同,这样不仅可以避免被检测到,还能仍然利用原有的漏洞特点。
IoC
检测出来的恶意传播文件
cf193637626e85b34a7ccaed9e4459b75605af46cedc95325583b879990e0e61 - 3027748749.rtf A8ac66acd22d1e194a05c09a3dc3d98a78ebcc2914312cdd647bc209498564d8 - xyz.123 38fa057674b5577e33cee537a0add3e4e26f83bc0806ace1d1021d5d110c8bb2 - Proforma_Invoice_AMC18.docx 4fa7299ba750e4db0a18001679b4a23abb210d4d8e6faf05ce2cbe2586aff23f - Proforma_Invoice_AMC19.docx 1dd34c9e89e5ce7a3740eedf05e74ef9aad1cd6ce7206365f5de78a150aa9398 - HSBC8117695310_doc
恶意传播域名
avast[.]dongguanmolds[.]com avast[.]aandagroupbd[.]website
来自 hxxp://avast[.]dongguanmolds[.]com的Loki样本
a8ac66acd22d1e194a05c09a3dc3d98a78ebcc2914312cdd647bc209498564d8 - xyz.123 5efab642326ea8f738fe1ea3ae129921ecb302ecce81237c44bf7266bc178bff - xyz.123 55607c427c329612e4a3407fca35483b949fc3647f60d083389996d533a77bc7 - xyz.123 992e8aca9966c1d42ff66ecabacde5299566e74ecb9d146c746acc39454af9ae - xyz.123 1dd34c9e89e5ce7a3740eedf05e74ef9aad1cd6ce7206365f5de78a150aa9398 - HSBC8117695310.doc d9f1d308addfdebaa7183ca180019075c04cd51a96b1693a4ebf6ce98aadf678 - plugin.wbk
与Loki有关的URL
hxxp://46[.]166[.]133[.]164/0x22/fre.php hxxp://alphastand[.]top/alien/fre.php hxxp://alphastand[.]trade/alien/fre.php hxxp://alphastand[.]win/alien/fre.php hxxp://kbfvzoboss[.]bid/alien/fre.php hxxp://logs[.]biznetviigator[.]com/0x22/fre.php
其他关联样本
1dd34c9e89e5ce7a3740eedf05e74ef9aad1cd6ce7206365f5de78a150aa9398 7c9f8316e52edf16dde86083ee978a929f4c94e3e055eeaef0ad4edc03f4a625 8b779294705a84a34938de7b8041f42b92c2d9bcc6134e5efed567295f57baf9 996c88f99575ab5d784ad3b9fa3fcc75c7450ea4f9de582ce9c7b3d147f7c6d5 dcab4a46f6e62cfaad2b8e7b9d1d8964caaadeca15790c6e19b9a18bc3996e18