在天穹沙箱日常运营分析过程中,监测到扩展名为 .hta 的文件,但其实际文件头却显示为 ZIP 格式,表明这类样本在文件类型上存在刻意伪装。为探究其攻击手法与规避原理,我们对该样本展开了深入分析。
-
样本名:setupi.hta -
MD5:e5e3578329be22d26443d7f6c6690485 -
SHA1:179e19367d82da0458f42ea7647236a3cda3fb71 -
文件类型:HTA -
文件大小:5.17 MB -
恶意家族:银狐 -
报告链接:https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=e2a13eddd049d417bc3f5e21a64b0e95&sk=24181101
但是文件中也包含 HTA 标签 <HTA:APPLICATION 标签。因此该样本的结构分为两部分:前面部分为 ZIP,后面部分为 HTA。
HTA(HTML 应用程序,HTML Application)是一个使用 HTML 和动态 HTML 构建的 Microsoft Windows 应用程序,运行在 Internet Explorer 中,并且支持其他的脚本语言,例如 VBS 和 JavaScript。HTML 用来创建用户界面,脚本语言则用来构建程序主体。HTA 运行时不受浏览器安全模型的限制,实际上,它就像是一个被“完全信任”的应用程序。在 Windows 上,由 mshta.exe 运行 .hta 文件,而 mshta.exe 主要依赖文件扩展名(.hta)来判断文件类型,mshta.exe 在读取 .hta 文件时,会扫描整个文件内容 (从头到尾), 如果在某处发现合法的 HTML 标记 + 脚本 (例如 <HTA:APPLICATION>、<script>、VBScript / JScript 代码等),就会把这些内容作为 HTA 应用来解析执行。
HTA 代码可以拼接到 ZIP 文件后面,还可以拼接到其他的文件 (例如 PDF、图片、BAT 脚本等) 的后面。Windows 的判断方式是基于文件扩展名(.hta),而不是严格依据文件头,一些安全产品 (如邮件网关、反病毒软件等) 更倾向于根据文件内容来判断,它们可能将此类文件当成 ZIP(PDF、图片、BAT 脚本等)处理,从而绕过一些安全产品的文件内容检查,执行隐藏的恶意脚本。
该样本首先写入了一个名为 cmsadasd.dsadsad 的文件,并创建了大量可执行程序。其中 cmsadasd.dsadsad 文件包含一个合法的签名。
写入大量文件,如 longlq.cl、lua5.1.dll 等等。
复制文件到目录 c:\Users\Public\A4y3zC\、c:\ProgramData\6mjxfjhc\,复制后的文件名和目录名均是随机生成的。
创建了一些进程,如 9wa.exe、W2ey7yY.exe 等。
下载了一个 Chrome 安装程序,下载的目标文件是合法的官方安装程序文件。
运行下载的 Chrome 安装程序,以便静默执行恶意代码。
删除了文件 yyD.zip、9wa.exe、msys-1.0.dll。
域名访问,其中可疑域名为 xiaoshihou[.]name。
head 标签中的 JavaScript 脚本会让将浏览器窗口移动到屏幕坐标为 (-3000, -3000) 的位置,窗口被移动到屏幕外,并将窗口的大小缩小到 0x0。其目的是隐藏窗口,即使用户试图恢复该窗口,也无法看到它。
<HTA:APPLICATION> 标签属性如下:
SHOWINTASKBAR=”no”:应用程序不会显示在任务栏上。
WindowState=”hidden”:应用程序窗口启动时是隐藏的。
INNERBORDER=”NO”:没有窗口的内边框。
MAXIMIZEBUTTON=”NO”:没有最大化按钮,用户不能将窗口最大化。
MINIMIZEBUTTON=”NO”:没有最小化按钮,用户不能将窗口最小化。
SCROLL=”NO”:不显示滚动条。
SELECTION=”NO”:禁用文本选择功能,用户无法选中文本。
SINGLEINSTANCE=”YES”:只能运行一个实例,如果尝试运行第二个实例,系统会忽略它。
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=9"><META HTTP-EQUIV="MSThemeCompatible" CONTENT="YES"><script>//console.log(111)while(true){try{window.moveTo(-3000, -3000);window.resizeTo(0, 0);break;}catch(e){}}</script><HTA:APPLICATION SHOWINTASKBAR="no" WindowState="hidden" INNERBORDER="NO" MAXIMIZEBUTTON="NO" MINIMIZEBUTTON="NO" SCROLL="NO" SELECTION="NO" SINGLEINSTANCE="YES" /></head><body></body></html><script></script><script>......</script>
第二个 JavaScript 脚本中包含大量混淆。
去混淆后的脚本中开头包含两个全局变量 serialized_obj4 和 serialized_obj3,经 Base64 编码。
以 serialized_obj4 为例,解码后的部分内容如下所示。解码后的内容显示了一个二进制数据的反序列化对象以及与 .NET 相关的一些类的结构,如序列化有关的 .NET 类 System.DelegateSerializationHolder,反射相关的类 System.Reflection.MemberInfoSerializationHolder ,以及一个 PE 文件。
这个 PE 文件实际上是 dll,dll 名称为 CshapeHostingBridageWrapperShowErrorWindow.dll,dll 中包含 SharpZipLib 全套组件,而 SharpZipLib 是一个完整的压缩与解压缩库。
其中的字符串被加密,存储在一个字符串数组中,在需要时调用函数动态解密字符串。字符串解密前,都会对数组中的字符串进行预处理,如移除不可见的 Unicode 字符 [U+202E](右到左覆盖符)、正则表达式 /[MjUZEFmOtuniAhrRQt=]/g 移除 base64 干扰字符、通过 shift / push / pop 操作改变数组元素顺序等。
字符串解密算法为 Base64 + RC4。
分析浏览器的 navigator.userAgent 字符串关键词,实现对用户操作系统的名称和版本的检测。
脚本中的 codeRunner3 函数可以执行多种操作:
-
创建临时目录:在 C:\Users\Public 下创建随机命名的目录结构。 -
文件解压/释放:从内置资源或网络获取加密的恶意文件,解压到临时目录。 -
文件操作:复制、移动和重命名恶意文件,主要针对 .exe、.dll、.bat等可执行文件。 -
创建快捷方式:在启动文件夹创建恶意程序的快捷方式。 -
自启动注册:通过快捷方式实现系统启动时自动运行恶意代码。 -
进程创建:使用 WScript.Shell 的 Run 方法执行目标程序。 -
延迟执行:使用 Sleep 函数延迟执行。
dotnet4 函数会检测系统是否安装了 .NET Framework 4.0 ,base64 解码前面的 serialized_obj4 和 serialized_obj3 的内容,然后将解码的数据注入到内存中执行。
只在特定日期 2025/11/26 20:42:00 前有效,过期后自动停止执行。
函数 downloadFromYouDaoYun 支持从有道云存储服务下载加密的恶意负载。
恶意文件(MD5)
e5e3578329be22d26443d7f6c66904854fa09a60c9b0df80af1a9bac26c75f6b1d98648e97fa1dd0a5befa07018aecae3c81e25ae167b188fea030c86ca1dc63009d53d4049374836e15737821054f89
xiaoshihou[.]name202.95.6[.]233
分析报告:https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=e2a13eddd049d417bc3f5e21a64b0e95&sk=24181101
天穹智能分析平台(联系我们申请账号):https://sandbox.qianxin.com

