首页
社区
课程
招聘
[翻译]分析有趣的恶意HTA文件
2019-6-28 10:59 7785

[翻译]分析有趣的恶意HTA文件

2019-6-28 10:59
7785
## 分析有趣的恶意HTA文件

原文链接:https://inquest.net/Interesting-Analysis-of-a-Malicious-HTA-File


在本文中,我们剖析了一个我们在野外发现的[HTA文件](https://en.wikipedia.org/wiki/HTML_Application)。几天前我们在4月12日的VirusTotal上发现了这个实例。这个恶意软件实例使用了一些技术,特别是动态加载序列化的.NET库和sideload方式加载DLL,以逃避检测机制。

我们将研本最初于4月12日在我们的RADAR上探测到的样本。初始样本和一些相关报告如下:

- SHA256:7a2dd16bb0f74ebf7268b784d74dc494ee817a01c5ace5bbc12e21f943caf189
- Multi-AV:[VirusTotal](https://www.virustotal.com/#/file/7a2dd16bb0f74ebf7268b784d74dc494ee817a01c5ace5bbc12e21f943caf189/detection)
- [可下载的样本](https://github.com/InQuest/malware-samples/tree/master/2019-04-Malicious-HTA-file)

截至本博文发布时,VirusTotal上58个AV中有4个检测到此样本。接下来,我们将揭示有助于将恶意软件使用的技术,以便我们及早发现。

## 分析

此HTA文件包含三个脚本块:第一个和第三个脚本块包含JavaScript,第二个脚本块包含VBScript代码。两个JavaScript代码块都实例化了COM可见的各种.NET类,并调用它们的方法来执行不同的操作,例如base64编码字符串。例如,在第一个块中,定义了以下函数,它使用*System.Text.ASCIIEncoding*,*System.Security.Cryptography.FromBase64Transform*和*System.IO.MemoryStream* .NET类来解码base-64编码的字符串。


在第三个脚本块中,有几个.NET类用于动态加载序列化的.NET dll并使用它的类,这个类显然由[@tiraniddo](https://twitter.com/tiraniddo)的[DotNetToJScript](https://github.com/tyranid/DotNetToJScript)工具生成,[如](https://twitter.com/tiraniddo)[@bartblaze](https://github.com/tyranid/DotNetToJScript)所指出的[那样](https://twitter.com/bartblaze/status/1117097230031360000)。


在上面的代码块中,so变量首先通过调用*base64ToStream*函数来解码,该函数在第一个块中定义。然后通过调用*System.Runtime.Serialization.Formatters.Binary.BinaryFormatter*实例的*Deserialize_2*方法对 解码后的字符串进行反序列*化*。接下来,在第51行实例化类HTA,然后通过在第56行传递包括da变量的几个参数来调用其pink方法。

到目前为止,我们了解到字符串包含a.NET dll。要提取此二进制文件,我们首先需要使用base-64解码器解码so字符串并将其保存在文件中。我们知道a.NET dll文件是PE格式,因此以MZ标记开头,并且很可能以一长串空字符结束。通过了解这一点,我们可以使用诸如Hexinator之类的十六进制编辑器轻松地了解嵌入在序列化对象中的.NET二进制文件。



如图3和图4所示,PE二进制文件从0x04C7开始,到0x1CE3结束。通过转储此部分,我们可以获得嵌入式.NET库。

接下来,我们使用ILSpy对.NET二进制文件进行反编译,并查看其代码。正如前面提到的,JavaScript代码创建了一个*HTA*类的实例,然后调用它的*pink*方法。因此,让我们开始研究这种方法,看看它背后的逻辑是什么。

图5描绘了pink方法。如图所示,此函数首先解码base-64编码的doc参数,然后对其进行解压缩。然后将结果字符串保存为本地文件系统上的文件,然后代码打开此转储文件。接下来,代码从远程服务器下载第二阶段HTA文件(hxxps://www.cdn-aws.net/cgi/5ed0655734/1252/1397/ec470000/file.hta)。


要获取转储文件,我们可以简单地使用任何base-64解码器来解码第一个HTA文件中的*da*变量(此变量作为*doc*传递给*pink*方法)并将结果保存在文件中。接下来,我们可以使用7zip解压缩此文件。图6显示了结果文件的内容,它是一个诱饵PDF文件。


诱饵PDF显示了一个员工表格,如图7所示。


第二阶段HTA还包含编码的序列化.NET dll文件。它动态加载此dll,然后从*preBotHta*类实例化。接下来,通过传递包含*ad*变量作为第一个参数,还有*dllBase64*等多个参数来调用方法Work 。*dllBase64*首先进行base-64解码,然后对得到的数据进行解压缩。结果字符串是dll文件的模板,包含多个占位符。第一个占位符{yyyyyyyy}由*url*参数的大小替换(左边用0填充)。第二个占位符{rox}由*url*的协议方案替换参数,在本例中为https。第三个占位符是一个由1000个*#*字符组成的序列,由*url*替换(用#右边填充)。然后将结果作为Duser.dll转储到%appdata%\ $ inst文件夹中,其中$ inst文件夹中为“dsk \ dat2.1”。最后,执行此文件夹中的credwiz,该文件夹从%windir%\ system32 \ credwiz复制。Credwiz使用sideload方式加载Duser.dll。



在撰写本文时,dll模板中替换的URL不再有效; 因此,不可能进一步继续这种分析。

## 参考

- [DotNetToJScript](https://github.com/tyranid/DotNetToJScript)

## IOCs

- 7a2dd16bb0f74ebf7268b784d74dc494ee817a01c5ace5bbc12e21f943caf189
- dc561f43412332c6fffd30f09e5691852d8eca1f558d3befd7f9807e88124e13
- d40235adace14a5c665e19bbeff39a395a7349562d19d8228c7411502bb07bb9(诱饵)
- 81df5952c95dc5ac7145f90b75cf9ba5c59445b098eff8c99c63262a4285e7d0(Duser.dll模板)
- 4a4431615faf673bb4f248d1c5af26a2c9b551355fafe5fa56f26722772aca00
- `https://www.cdn-aws.net/plugins/1252/1397/true/true/`
- ``https://www.cdn-aws.net/cgi/5ed0655734/1252/1397/ec470000/file.hta``
``https://cdnsrc.net/mdpdYz6D9vrxpQAc7mybgEuuHEpmIKtvM6SYdHbF/1252/1397/5198626b/css`


[培训]《安卓高级研修班(网课)》月薪三万计划

最后于 2019-6-28 11:04 被dodohit编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kxzpy 2019-6-30 11:20
2
0
谢谢分享。。。。
游客
登录 | 注册 方可回帖
返回