Clipsa – 多功能密码窃取器 – Avast

高层次概述

Clipsa 是一款多功能的密码窃取工具,使用 Visual Basic 写成,专注于盗取加密货币、对不安全的 WordPress网站进行暴力破解和窃取管理员凭据、替换剪贴簿中的加密地址,以及在被感染的设备上挖矿。Clipsa 的几个版本还会部署 XMRig钱币挖矿器,以从被感染的计算机中赚取更多收益。

Clipsa 以恶意可执行文件形式扩散,可能伪装成媒体播放器的编解码器包安装程序。一旦在感染的设备上运行,Clipsa就能执行多项行动,例如查找受害者剪贴簿中的加密钱包地址,然后将受害者想要发送资金的地址替换为由 Clipsa 背后的坏人拥有的钱包地址。此外,Clipsa还能搜索和窃取 wallet.dat 文件,并安装加密货币挖矿器。

另外,Clipsa 利用被感染的 PC 爬取互联网,以寻找易受攻击的 WordPress网站。发现易受攻击的网站后,它便尝试通过暴力破解进入该网站,并将有效的登录凭据发送至 Clipsa 的 C&C 伺服器。虽然我们无法确定,但我们相信
Clipsa 背后的坏人会从被攻陷的网站中窃取更多数据。我们也怀疑他们利用被感染的网站作为次级 C&C伺服器,来存储挖矿器的下载链接或上传和存储窃取的数据。

攻击活动概述

我们估计,攻击向量最可能是针对媒体播放器的恶意编解码器包安装程序(如 Ultra XVid Codec Pack.exe
Installer_x86-x64_89006.exe)。尝试为其媒体播放器安装这些编解码器的用户,不小心下载了恶意安装程序而非干净的安装包。一旦用户开始安装过程,Clipsa就会在其机器上部署,并立即开始恶意行为。

该活动在印度最为普遍,Avast 已封锁超过 43,000 次 Clipsa 感染尝试,保护了超过 28,000 名印度用户免受该恶意软体的侵害。
我们还在菲律宾和巴西观察到更高的感染尝试率,Avast 在这两个国家分别保护了超过 15,000 和 13,000 名用户。自 2018 年 8 月 1日以来,Avast 总共保护了超过 253,000 名用户,超过 360,000 次。我们保护所有用户免受 Clipsa 和其所有组件的侵害。


图示说明 Clipsa 从 2018 年 8 月到 2019 年 7 月所针对的国家


图示说明 Clipsa 随时间扩散的情况(点击次数)

分析

Clipsa 使用单个可执行二进制档案,带有多个参数(命令行参数)。这些参数区分不同的程式阶段,它们作为独立进程同时运行。每个阶段专注于不同的功能,并由
Clipsa 的初始化过程启动,后者并没有任何参数。

Clipsa 使用以下参数来表示各阶段:
1. 不带参数
2. --CLIPS
3. --CLIPSS
4. --WALLS
5. --PARSE
6. --BRUTE

第二到第四阶段旨在窃取用户数据,重点放在与加密货币钱包相关的数据上。第五和第六阶段则专注于寻找易受攻击的 WordPress网站并窃取其管理凭据。在接下来的分析中,我们将重点讨论这些阶段的具体情况。

无参数阶段

当恶意软体在感染的机器上运行时,程序会自动启动,且无任何参数。该阶段允许 Clipsa 在系统中安装和隐藏自身。随后,它将继续初始化其他执行恶意操作的阶段。

预安装

在预安装阶段,Clipsa创建一个讯息对话框,使其看起来像某种安装过程。然而,该对话框(见下图)实际上只是伪装,让用户认为他们下载的编解码器包正在安装。事实上,该对话框仅显示随机生成的数字(逐步累加)并打印总和。Clipsa还在增量之间添加随机休眠,让过程显得更自然。


图示说明安装过程的伪装

当总和达到 99%
时,该过程会关闭对话框。在这一虚构的安装过程中,恶意软体并没有执行任何恶意或有用的行为。我们认为此行为的目的是延迟实际的恶意过程,以避免在自动沙盒工具中被检测到。

虚构的安装完成后,Clipsa 会检查任务管理器是否正在运行,使用 Windows 管理工具(WMI):
Select * from Win32_Process WHERE Name = 'taskmgr.exe'
如果它正在运行,则终止程序以避免用户检测。

安装

然后,Clipsa 将自身复制到 %APPDATA%\Roaming 目录中,具体的文件夹和二进制档案名称根据 Clipsa的版本而定。较新版本的一个示例是:
C:\Users\user\AppData\Roaming\AudioDG\condlg.exeC:\Users\user\AppData\Roaming\AudioDG\zcondlg.exe

一些较旧的版本则位于:
C:\Users\user\AppData\Roaming\WinSys\coresys.exeC:\Users\user\AppData\Roaming\WinSys\xcoresys.exe

接下来,我们将仅考虑使用 AudioDG 路径的新版本,以及其 C&C 伺服器 poly.ufxtools[.]com。有关其他 C&C伺服器的进一步细节,请参见下文的 C&C 伺服器部分。

在安装过程中,还会创建额外的目录和文件:
C:\Users\user\AppData\Roaming\AudioDG\log.datC:\Users\user\AppData\Roaming\AudioDG\obj\
C:\Users\user\AppData\Roaming\AudioDG\udb\

此外,condlg.exe 的路径被添加到注册表自启动项,以确保该恶意软体的持久性:
HCU\Software\Microsoft\Windows\CurrentVersion\Run\11f86284

注册表键名 11f86284 是从对 H3c7K4c5:H3c7K4c5 的 SHA-256哈希计算的前四个字节生成的。请注意,在后续分析中,我们会多次看到字符串 H3c7K4c5,主要是在加密函数中。

此外,还会创建一个名为 condlg.exe 的新进程(不带参数),该进程用作下拉程序,并开始其他恶意阶段。不过,此进程是从隐藏的 AudioDG文件夹启动的,这正是 Clipsa 知道它已经安装在系统上的方式。

最后,初始的 Clipsa 进程注定会结束。即使整个 Clipsa安装过程成功,该恶意软体还是会向用户显示错误信息,以使用户相信编解码器安装失败,让他们认为实际上什么都没有安装:


图示说明 Clipsa 成功安装后的错误讯息

condlg.dll 文件

在安装过程中,Clipsa 会检查用户执行恶意软体的目录中是否存在额外的文件。这个文件通常名为 65923_VTS.vob
setup.dll。然而,这既不是多媒体容器也不是库文件。该文件实际上是一个加密文本文件,Clipsa 将其解密并保存为新文件:
C:\Users\user\AppData\Roaming\AudioDG\condlg.dll

该文件包含数千个比特币地址。如后面所示,这个文件将在 CLIPS 阶段使用,期间将剪贴簿中的加密钱包地址替换。但是,其存在并不是必要的,Clipsa在没有它的情况下也能正常运行。

请注意,原始文件的命名基于 Clipsa 伪装成媒体播放器的编解码器包安装程序的假设。

解密过程非常直截了当。Clipsa 加载该文件并用当前索引对字节数组中的每个字节进行异或运算,取余数为 0xFF:

挖矿

一旦 Clipsa 在系统上成功安装,它会使用进程 condlg.exe 收集有关被感染系统的信息(如操作系统版本、序列号和用户名),并将该信息发送到
poly.ufxtools[.]com 文件存储库。此步骤也作为一个心跳,识别伺服器是否依然在线。实际数据呈现如下形式:
xxxxxxxx|PING|OS version|0|0|0|0|0|0|0|0
其中第一列是根据驱动器(恶意软体所在位置)序列号以十进制形式计算的 SHA-256哈希的前四个字节和用户名,形成用户指纹。第三列为操作系统版本(纯文本),后面紧随著从 AudioDG\log.dat
文件中解析出的一系列数字(默认为零)。有关日志文件的更多信息,将在我们的分析结尾的日志子部分中介绍。

如果 poly.ufxtools[.]com 正常运作,则该恶意软体会下载并执行 XMRig 钱币挖矿器。该下载是使用以下请求进行的:
poly.ufxtools[.]com/wp-content/plugins/WPSystem/dl.php?a=d
文件名为从随机生成的 0-1 之间的小数(四舍五入到小数点后七位)计算出来的 SHA-256 哈希的前四个字节:
C:\Users\user\AppData\Local\Temp\xxxxxxxx.exe

这个钱币挖矿器使用多层混淆。起初,其 Base64 编码的覆盖层被解码,创建一个新的 PowerShell 脚本。此脚本从另一个 Base64编码字符串中解码一个 GZIP 文件。这个档案被解压,并创建一个稍加混淆的最终脚本。然后,这个最终脚本会解码几个额外的 Base64 字符串,其中一个就是
XMRig 二进制文件,然后被执行。

文件 65923_VTS.asx 和 setup.bin

最后,Clipsa 会检查用户的本地化是否符合以下硬编码列表中的任何一个:
ARE,AUS,AUT,BEL,BGR,CAN,CHE,CHN,CYP,CZE,DEU,DNK,ESP,EST,FIN,FRA,GBR,GEO,HKG,HUN,
IDN,IRL,ISR,ITA,JPN,KOR,LUX,LVA,MAC,MCO,MYS,NLD,NOR,NZL,PHL,POL,PRT,QAT,SAU,SGP,
SVK,SVN,SWE,SWZ,THA,TUR,TWN,USA

如果用户的区域设置 符合上述硬编码列表中的任何一项,Clipsa 会试图在启动恶意软体的目录中找到另外两个文件:
65923_VTS.asx setup.bin

如果这些文件之一存在,Clipsa 会将其复制到本地临时文件夹:
C:\Users\user\AppData\Local\Temp\xxxxxxxx.exe
其中 xxxxxxxx
是使用上面提到的随机生成器生成的四个随机字节。复制文件后,该文件也被执行。请注意,这些文件中仅需找到其中一个,因为它们实际上是同一文件的两个名称变体。Clipsa并没有将此文件直接包含在其二进制文件中。然而,某些安装程序中很可能包含这个文件,并与 Clipsa 一起被放置。在我们的分析中,我们并没有发现此文件与
Clipsa 安装程序捆绑在一起。不过,我们确实通过其他渠道发现了它。

文件 65923_VTS.asx 是另一个钱币挖矿器。它挖掘 Monero 加密货币,并将资金发送到地址:
49Y3XrW9mPtAqVDmFjAWNXF5X8sEgTS23Sa6ZVvJwFEEMa5rG7Yt3zaDY2TKH1sfChjPkUqYpygyKNVy
hPguXU1f4WGFp2f
在一个池中:
pool.supportxmr[.]com

该挖矿器使用了几种抗调试技术、少量混淆和持久性行动。我们发现的一些样本也包含在加密器中。

提到一些挖矿器的特性,挖矿器会在执行后将其总是复制并重命名到新位置:
C:\Users\user\AppData\Roaming\Host\svchost.exe
(因此,该文件 Temp\xxxxxxxx.exe 真的只是临时的),并从此位置创建新的进程。这样混淆了用户,使他们认为这个挖矿器是合法的
Windows 进程。此外,还将自启动项写入登录档,也将自己注册到任务计划程序中,使用一个相当讽刺的名称,并使用以下命令:
cmd.exe /c SCHTASKS /Create /SC MINUTE /MO 2 /TN "Microsoft MalwareProtection Command Line Utility" /TR
"C:\Users\user\AppData\Roaming\Host\svchost.exe"

这个挖矿器还使用多执行绪,其中一个执行绪定期检查以下活动进程列表:
taskmgr.exe procexp64.exe procexp.exe processhacker.exe procmon.exewireshark.exe vnc.exe anvir.exe
以及以下打开的窗口:
Process Hacker [%s\%s] Process Hacker [%s\%s]+ (Administrator) ProcessExplorer - Sysinternals: www.sysinternals.com [%s\%s]
其中字符串 %s 分别代表:
%USERNAME% %COMPUTERNAME%
如果找到这些窗口或进程中的任何一个,挖矿器将暂停其行动。这是为了说服用户,他们的电脑没有任何问题。

正常下载

在挖矿器下载和执行后,Clipsa 从 URL 下载额外的文件:
poly.ufxtools[.]com/wp-content/plugins/WPSystem/ok.php
至路径:
C:\Users\user\AppData\Local\Temp\xxxxxxxx.log
然而,在我们的分析中,该 URL 返回 0 字节,我们无法验证该文件的目的。

tsk.dat 文件

在返回以有关用户系统的信息的心跳后,Clipsa 会发出请求:
poly.ufxtools[.]com/wp-content/plugins/WPSystem/dl.php?a=i
在我们的分析中,此请求返回了一个字符串 ogirejsorg584erg4sgef,这代表来自 C&C 伺服器的“任务”。

该任务被保存到新文件中:
C:\Users\user\AppData\Roaming\AudioDG\tsk.dat
该文件包含有关从中收到请求的 C&C 的信息,以及任务。这两个值都使用 SHA-256 哈希进行哈希(仅使用前两个字节),并用硬编码的字母 P
T 作为前缀:
Pf66ef67b Tf8ab7df4
其中 f66ef67b 是从 http[:]//poly.ufxtools[.]com(没有安全括号)计算的, f8ab7df4 是从任务字符串
ogirejsorg584erg4sgef 计算的。

阶段初始化

此时,Clipsa 执行阶段的初始化,并依次启动。为此,使用二进制文件 zcondlg.exe。Clipsa 同时启动带有以下参数的进程:
zcondlg.exe --CLIPS zcondlg.exe --CLIPSS zcondlg.exe --PARSE zcondlg.exe
--BRUTE zcondlg.exe --WALLS

完成此初始化后,进程 condlg.exe 不会终止。相反,它每 10 秒创建一个新的 BRUTE进程。这些新进程用作“暴力破解工作者”,承担新的暴力破解任务,试图获取 WordPress 网站的管理员登录凭据(有关 BRUTE阶段的详细信息,请参见下文)。

bool.scan 文件

启动 WALLS 阶段后(参数 --WALLS),创建文件 bool.scan
C:\Users\user\AppData\Roaming\AudioDG\bool.scan
该文件为空,作为检查此阶段是否启动的标志。这防止 Clipsa 重复扫描整个磁碟以查找加密货币钱包。

CLIPS 阶段

此阶段专注于修改用户的剪贴簿。剪贴簿会不断检查并验证其内容是否符合比特币(BTC)或以太坊(ETH)地址格式。如果找到格式正确的地址,Clipsa会用预定义列表中最相似的 BTC地址替换该地址。这是一种简单的方式来窃取用户的资金,当他们例如将自己的加密钱包地址复制并粘贴给朋友时,实际上误导用户将资金发送到其他地方。

替换钱包地址

在实际替换过程开始之前,Clipsa 会检查文件是否存在
C:\Users\user\AppData\Roaming\AudioDG\condlg.dll
然而,该文件是一个文本文件,我们在 condlg.dll 文件小节中看到了它的解密过程。如果该文件存在,则该恶意软体会读取其内容并与以下 BTC钱包地址进行比较:
这个地址是 `condlg.dll` 文件中的第一个地址,因此 Clipsa 检查该文件是否包含有效内容。如果是,Clipsa将在选择过程中使用这个庞大的地址列表。
如果在剪贴簿中找到有效的以太坊地址,则仅用:

替换。这意味着不使用其他 ETH 地址,选择过程被省略。

在我们的分析中,该钱包接收到的 ETH 总额为 55.059107 ETH(在本出版时约为 ~12,632.76美元)。请注意,因为一些资金可能来自其他来源,所以总额并不一定反映 Clipsa 实际窃取的加密货币数量。

如果文件 condlg.dll 未找到或其内容不同,Clipsa 将解密两个不同的 BTC 钱包地址列表。这两个列表然后被连接,形成一个包含 2,000个有效 BTC 地址的列表(见 A.1 BTC 地址列表(2000))。有关接收资金的详细信息,请参见我们分析结尾的接收资金小节。

从这个列表中, *最相似 *的地址会被选中,并用作在用户剪贴簿中找到的有效 BTC 地址的替换地址。

Clipsa 使用的可用 BTC 地址的完整列表可以在 A.2 BTC 地址列表(完整)中找到。

选择过程

选择过程设计为两个阶段。在第一阶段中,算法根据原始地址是以 1 还是 3 开头,从 BTC 地址中选择子列表。列表中的所有其他地址都会被忽略。请注意,BTC地址符合正规表达式:[13][a-km-zA-HJ-NP-Z1-9]{25,34}

在第二阶段中,使用特定的算法。它比较两个 BTC 地址(原始地址和从子列表中选择的地址),计算一个 相似度指数 SI
,这是两个字符串之间的距离。相似度指数的变化取决于比较的字节,外围字节对相似度指数影响更大,中央字节影响较小。字节从地址的两侧进行比较。

这个计算可以用以下公式表示:

其中 n 是希望计算的字符串开头和结尾的长度, i 是字符串中的索引, v 是表示匹配强度的值:
v=0 当字节匹配时
v=1 当字节大小写不敏感匹配时
v=2 当字节不匹配时
从这一定义中,我们可以看到,相似度指数最低的钱包地址是从子列表中选出的。

最后,请注意,Clipsa 使用 n=2 作为计算 SI
值的参数,实际上仅检查了前两个和后两个字节以进行相似性比较。上述描述的选择过程是合理的,因为用户更容易注意到前未来字元的改变。

保存结果

当剪贴簿中的地址成功被替换后,Clipsa 会创建一个新文件:
C:\Users\user\AppData\Roaming\AudioDG\rep.dat
该文件包含有关哪个地址被替换为哪个地址的加密信息。该信息以以下格式表示:
pattern|original address|new address
其中 pattern 是随机选择的字符串:1,22,1。但如果钱包地址是 ETH 地址,则 pattern 设置为字母
E。Clipsa 为何在 1,22,1 字符串中进行选择,尚不清楚。在我们看来,使用一个前缀 B 并省略“混淆”就足够了。

在后续阶段,文件 rep.dat 随后会在 CLIPSS 阶段作为日志数据发送到 C&C 伺服器。

字符串加密

如上所述,保存到 rep.dat 文件中的字符串是加密的。此外,几乎所有在 Clipsa二进制文件中找到的字符串也是加密的。这个加密过程实际上是恶意软体作者用来混淆 Clipsa 中字符串的相同过程。Clipsa包含几种类型的自定义加密/解密函数。然而,这一功能是最常见的。

一个自定义加密函数旨在达到字符串的加密。为了正确解释该过程,让我们先看一下下面的 Python 代码中的解密函数:

字串 encrypted 是这个解密函数的输入。请注意,这个字符串始终仅包含有效的 ASCII 值。

不过,加密函数的处理方式略有不同。它将要加密的明文转换为十六进制形式。然后,它从预定义字母中随机选择两个字母:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
这两个字节(xx)将附加到字符串 H3c7K4c5xx 之后,Clipsa 会尝试解密
它。可以将其看作是上面列出的解密函数的单一步骤。如果所需输出等于明文,则这两个字节被视为有效,并被保存为密文。这一过程会重复,直至生成所有字节的密文,并且可以正确解密为明文。因此,整个加密过程是非确定性的,即一个明文可以加密成多个密文。

举个例子,假设将硬编码的以太坊地址替换为相同地址,代表如下字符串:
E|0x4966DB520B0680fC19df5d7774cA96F42E6aBD4F|0x4966DB520B0680fC19df5d7774cA96F42
E6aBD4F

加密输出可能如下所示:
IZZNRwqRnwWUdb56NoutldDWpJkJl4s6OCWOQV9Ur5Brz1ctf3GUm0SDjq52BuoxPRY4PB9hGDmu5lVc
H6R0Ng0Qg4AFk2gT4xHSakkEtxrWXfBgnwnAllIruQlLGOJlt0LKLLIwgw3fjaSIng3losV8l4cfs6xq
WgUwmPEDN7oSGG3NZSmLDHqlLFsKthuTJqpQD8kZN7meKeafK5SD0bHK48yuFcWuElwZldwuV3S6RM7A
ngcWOXSfy2bmvS4Sj9015auLkziW2uBJqs5t4XFUZAfmrUH04hsyUyDPKMBHH6pQTPAK3aS6bmcqxf1A
9RTuLT5IWdlGS1oVq6QFfcUl3AKR

CLIPSS 阶段

CLIPSS 阶段与 CLIPS 阶段紧密相连。它持续搜索 rep.dat 文件。当找到该文件时,Clipsa会解密其内容(详情见字符串加密)并解析值。如果未找到该文件或其内容无效(例如为空),则过程将暂停一秒,然后重复。

随后,该恶意软体会创建一个新字符串,包含五个以管道分隔的值:
fingerprint|REPL|type|original address|replaced address
其中 fingerprint 是根据用户序列号(以十进制形式)和计算机名的 SHA-256 哈希的前四个字节生成的, type
是地址的“类型”(E 代表以太坊,或随机字符串 1,22,1 代表 BTC)。 original address
replaced address 分别表示用户和攻击者的地址。

在这个明文字符串创建后,再次加密后,Clipsa 尝试将其上传到 poly.ufxtools[.]com C&C 伺服器。完成上传后,该恶意软体会删除
rep.dat 文件的内容,并重复整个过程(即等待新内容的出现)。

WALLS 阶段

WALLS 阶段旨在寻找磁碟中的 wallet.dat 文件(因此得名)。请注意,wallet.dat
是加密货币钱包的典型文件名。窃取该文件实际上意味著窃取了该钱包中的资金。此外,Clipsa 还会寻找所有包含

模式的文本文件(*.txt)。如果存在此类文件,会用 RC4 流加密器对其内容进行加密并发送到 poly.ufxtools[.]com 文件库。

然而,并非所有文件系统目录都会被搜索。该恶意软体会递归扫描整个文件系统,只排除一列表预定义的位置(使用管道分隔):
\AppData|\Boot|\PerfLogs|\ProgramFiles|\Temporary|\AMD\|\Dell\|\HP\|\Intel\|
\McAfee\|\Norton\|\NortonInstaller\|\vim\|Chrome|Drivers|Ebook|lessons|Lyrics|Microsoft|SampleMusic|Sample Pictures|savedIndexNames|TypingMaster|Windows|Games|
HeroOnline|iTunes|FIFA|League|MineCraft|nDoors|SmileGate|Steam|TwelveSky|WarRock

文件加密(RC4)

如前所述,当找到目标文件时,Clipsa 会对其内容进行加密。这是通过 RC4 流加密器来实现的。

首先,Clipsa 使用 SHA-256 哈希将硬编码字符串 H3c7K4c5 加密,并将输出用作 32 字节长的密钥:
4d7b290afaa14d86b4cf64fc5bcca8de99536196ee5a18f963d51f26d7956775
其余加密器的流程遵循典型的 RC4 实现。

保存结果 – wallet.dat

在文件内容被加密后,会创建两个新文件。加密内容被写入以 .data.bin 为扩展名的文件。第二个文件包含被窃取文件的路径的明文,扩展名为
.path.bin。此外,这两个文件的名称由两个哈希组成,使用句号分隔。第一个哈希是由用户指纹生成的(有关 CLIPSS阶段的详细信息),第二个哈希是根据被窃取文件的绝对路径计算的(仅使用前两个字节):
C:\Users\user\AppData\Roaming\AudioDG\xxxxxxxx.yyyy.data.binC:\Users\user\AppData\Roaming\AudioDG\xxxxxxxx.yyyy.path.bin
然后 Clipsa 尝试将这些文件上传到 poly.ufxtools[.]com C&C 伺服器:
poly.ufxtools[.]com/wp-content/plugins/WPSecurity/up.php

保存结果 – 文本文件

如前所述,Clipsa 也重点关注包含特定模式的文本文件。这些模式构成了

助记种子恢复短语(或“助记词序列”),用作伪随机生成器的种子。如果用户知道种子,那么他们就能确定性地生成用户首次创建钱包时所生成的相同钱包密钥。因此,Clipsa在此阶段的重点实际上是窃取助记词序列,以攻克加密货币钱包。

选择正确的文本文件

即使每个 wallet.dat 文件都被窃取,仅选择最大长度为 32,771字节的文本文件。此外,在这些文本文件内容被截断并删除所有冗余空格后,其内容必须匹配以下列表中的特定模式:
`#WWWWWWWWWWWW#

WWWWWWWWWWWWN

NWWWWWWWWWWWW#
NWWWWWWWWWWWWN

NWNWNWNWNWNWNWNWNWNWNWNW

NWNWNWNWNWNWNWNWNWNWNWNWN

NNWNWNWNWNWNWNWNWNWNWNWNW#
NNWNWNWNWNWNWNWNWNWNWNWNWN`

这些模式由字母组成。每个字母表示一个单词(由空格(0x20)分隔的字符串)。有三种类型的字母:
N – 数字(十进制)
W

字词列表中的单词
# – 未知单词

因此,文本文件中的每个单词都会被测试以检查该单词是否在

字词列表中。这是通过将文件内容中的每个单词与一个硬编码的加密字词列表进行匹配来进行的(有关字词列表的解密见下文)。如果匹配,则字符 #N
W 会附加到新模式上。在新模式完成后,若符合上述任何模式,则该文件会被复制,其内容被加密并上传。

将文本文件保存在磁碟中

保存选定的文本文件方式与被窃取的 wallet.dat 文件非常相似。它们的扩展名为 .txt
C:\Users\user\AppData\Roaming\AudioDG\xxxxxxxx.yyyy.data.txtC:\Users\user\AppData\Roaming\AudioDG\xxxxxxxx.yyyy.path.txt
请注意,在文件成功上传后,它们会从此位置删除。

字词列表解密(bip-39)

字词列表的解密过程非常直接。加密是简单的替换形式,使用查找表和密文。

对于字词列表,此查找表如下:
JyBhjP0OSI3qVQn!U4ZlvK5zsfDEdgTRx%XaF|br6YA1u87Li2mpkWNtecoGCwM9H
同时使用以下字母表:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ|!%
这是密文(经过截断)的解密过程的开始:
3q3zQszM3qZKZgXM3qKnM3qsTgM3qsRnM abandon|ability|able|about|above|
有关整个字词列表的明文,请参见 B.1 字词列表(bip-39)。

请注意,此列表与
完全匹配,用于生成加密货币钱包的助记短语。

PARSE 阶段

在 PARSE 阶段,Clipsa 会解密一份硬编码的字词列表。从这个列表中,它选择特定的关键字,以便 Google 和 Bing搜索引擎使用。所有搜索引擎结果页中的网站都会被解析并以混淆形式保存在磁碟中的单独文件中。

关键词选择

在随机选择关键字之前,Clipsa 使用一个硬编码的字符串:
w1|w2|w1 w2|w2 w1|w1 and w2|w1 at w2|w1 but w2|w1 else w2|w1 for w2|w1 ifw2|
w1 in w2|w1 of w2|w1 or w2|w1 with w2
我们可以将此字符串视为一个列表模式(用管道分隔),用于在搜索引擎中进行搜索。随机选择此字符串中的一个模式。在选中的模式中,w1w2
则会被从字词列表中随机选出的单词替换。因此,即便两者均被选中,该恶意软体也可根据所用模式跳过其中一者。

解析

当选定关键词模式后,会插入 Google 搜索:
https://www.google.com/search?q=PATTERN&start=0&num=100
其中 PATTERN 例如可以是 abandon in above

如果 Google 搜索请求不成功,则该恶意软体会尝试额外请求,使用 Bing:
https://www.bing.com/search?q=PATTERN&first=0&count=50

如果收到有效响应,Clipsa 将解析所有存在于所有 <cite> HTML 标签中的 URL,并通过删除 httphttps
<strong> 标签以及域名后的任何文本来简化这些 URL。此外,这个恶意软体会用 SHA-256 哈希对这些 URL 进行哈希,并在
AudioDG\udb\ 文件夹中创建一个新的目录结构。它使用计算得到的哈希的前两个字节作为文件名和文件夹名称(十六进制):
AudioDG\udb\xx\xx.dat
其中文件 xx.dat 内包含哈希的额外两个字节。这样,Clipsa 就知道哪些 URL 被解析,并省略搜索结果页中找到的任何重复项。

这些唯一的 URL 随后将持续被新请求访问:
http(s)://website.example/xmlrpc.php
如果 xmlrpc.php 文件在 WordPress 伺服器上可访问,返回的页面将是:
XML-RPC server accepts POST requests only
然后 Clipsa 继续访问
http(s)://website.example/wp-login.php
试图确认该网站确实为带登录页面的 WordPress 伺服器。

此时,Clipsa 尝试获取 WordPress 网站的管理员用户名。为此,该恶意软体对用户枚举执行简单的 HTTP 请求(利用 WordPress的弱配置):
http(s)://website.example/?author=1
这将经常将 URL 重新导向到:
`http(s)://website.example/author

Leave a Reply

Your email address will not be published. Required fields are marked *