今天小编分享的互联网经验:CryptoClippy 恶意軟體窃取葡语用户的加密货币,欢迎阅读。
Unit 42 最近发现了一个针对葡语用户的恶意軟體活动,旨在将加密货币从合法用户的钱包中转移到由攻击者控制的钱包中,该活动使用了一种被称为 CryptoClippy(加密货币剪辑器)的恶意軟體,它可以监控受害者的剪贴板,寻找加密货币钱包地址被复制的踪迹,以此来发起攻击并窃取加密货币。
攻击时,CryptoClippy 会将实际钱包地址替换为攻击者自己的地址。为了将恶意軟體植入到用户的计算机,该活动中的攻击者使用谷歌广告和流量分发系统(TDS)将受害者重定向到假冒 WhatsApp Web 应用程式的恶意網域名。他们借此来确保受害者是真正的用户,而且他们是葡语使用者。对于被发送到恶意網域的用户,攻击者试图诱骗他们下载恶意檔案,包括 .zip 或 .exe 檔案,从而获得最终的有效负载。
什么是加密货币剪辑器?
CryptoClippy 旨在将加密货币资金从合法用户的钱包转移到由攻击者控制的钱包。当计算机 CryptoClippy 时,恶意軟體会不断检查受害者的剪贴板,看看他们是否复制了加密货币钱包地址,其攻击逻辑是,如果一个人将钱包地址复制到剪贴板,这表明他们可能正在将加密货币从一个钱包转移到另一个钱包。
CryptoClippy 使用正则表达式来识别地址属于哪种类型的加密货币。然后,它将剪贴板条目替换为攻击者的钱包地址。由于钱包地址通常很长,有时超过 40 个字元,粗心的用户是不会注意到地址的变化。
CryptoClippy 利用的是 SEO 攻击,因此当一个人搜索 "WhatsApp Web" 时,搜索结果的前几天就会显示一个虚假结果。一旦进入该网页,受害者就会被提示下载一个 .zip 檔案,该檔案包含一个由恶意脚本组成的 .lnk 檔案。这些脚本引发了一系列安装 CryptoClippy 的事件。各种 CryptoClippy 变体具有多种额外功能,可以帮助攻击者完成他们的加密窃取活动。这包括能够通过执行 RC4 加密的 PowerShell 脚本来建立远程桌面協定(RDP)后门。
此脚本包含 Windows Management Instrumentation(WMI)、终端服务系統資料庫操作、icacls、net 命令和日志清除的元素。这些漏洞使攻击者能够在内存有效负载之外进行访问。
此外,该变体还具有针对以太坊和比特币加密货币钱包的功能。鉴于数字货币在拉丁美洲越来越受欢迎,这并不奇怪。
撰写本文时,攻击者控制的比特币地址显示收到 0.039954 比特币,大致相当于 982.83 美元,以太坊(ETH)地址也显示了收到资金,其中 0.110915556631181819 ETH(约等于 186.32 美元)是从三个不同的 ETH 地址发送的。
此活动中的攻击者采用了多阶段的方法,试图绕过基于签名和启发式的安全防护。这种方法包括使用模糊化的 PowerShell 脚本和编码的有效负载来逃避检测,目前似乎只有少数安全程式可以在 VirusTotal 中检测到这种恶意軟體。
攻击流程
攻击会从传播一个 .zip 檔案开始,该檔案包含一个模糊化的 PowerShell 命令行脚本组成的 .lnk 檔案。受害者輕按兩下 .lnk 檔案后,就会执行 PowerShell 脚本,该脚本将下载第二阶段和几个模糊 / 加密的有效负载。当执行第二阶段 PowerShell 脚本时,它会对 CryptoClippy 加载程式进行解混淆 / 解密并执行它。然后加载程式会将其窃取程式组件注入 svchost.exe 中。
CryptoClippy 将在剪贴板 API 中設定基于用户模式事件的挂钩和回调函数,在将受害者的以太坊 / 比特币加密钱包复制到剪贴板时,将其替换为攻击者的加密钱包。它还包含与 C2 伺服器通信的功能。
CryptoClippy 攻击流程如下所示:
通过 LNK 檔案攻击
受害者最初下载的 .zip 檔案中的 .lnk 檔案包含一个截取的命令,如下图所示。輕按兩下该檔案将执行一个模糊命令,该命令位于快捷方式的目标資料欄中,负责检查攻击者控制的網域。
LNK 檔案的目标資料欄包含要运行的命令
.lnk 檔案使用了几种不同的字元填充方法进行混淆,其中包括以下字元集:
^ !! :~
下图显示了如何在 .lnk 檔案中使用这种方法。
LNK 字元混淆
反混淆后,LNK 得到以下 PowerShell 命令,该命令将通过 HTTP 協定将字元串 uiPX 上传到攻击者控制的網域 tunneldrive [ . ] com。
PowerShell 命令将字元串上载到攻击者網域
需要注意的是,在目前观察到的示例中,攻击流程可以追溯到扩展名为 .lnk 的檔案。这些檔案通常包含在 .zip 中。然而在分析中,研究人员观察到另一种变化,其中初始有效负载是一个 .exe 檔案,该檔案出自前面提到的網域 mydigitalreversion [ . ] com。
当 WhatsApp Web 的 .exe 檔案一旦执行,它就会联系前面提到的 tunneldrive [ . ] com 網域。然后,它将释放并执行一个 .bat 檔案来自我删除。
这个 .bat 檔案 ( 如下图所示 ) 使用了一种模糊处理来构建其有效负载。
BAT 檔案在第一阶段被释放
第一阶段
第一个 PowerShell 脚本加载程式 Ricoly.ps1 由 Ricoly.bat 批处理檔案启动并执行。Ricoly.ps1 脚本的目的是解密同样位于 C:Users\AppDataRoamingRicoly 中释放的第二阶段模糊 / 加密脚本 ps。
Ricoly.ps1 脚本使用的 XOR 密钥大部分是静态設定的硬编码,而 XOR 密钥的一部分是从计算机的处理器 ID 动态派生的。这将锁定有效负载,如下图所示。
第二阶段
研究人员使用以下 CyberChef XOR 秘钥来解密第二阶段的有效负载:
CyberChef 用于解码第二阶段 PowerShell 脚本檔案 ps 的内容
在第一阶段下载时,会将名为 sc 的加密 EXE 檔案写入檔案系统。这个 EXE 檔案将成为第二阶段 ps 脚本的目标。
第二阶段 PowerShell 脚本 ps 的功能是充当反射 PE 加载程式。它使用 .NET 方法和 D/invoke 来处理 .NET 委托,以逃避检测和动态解析。
ps 脚本将确定作業系統是 32 位还是 64 位。它还将确定 kernel32.dll 作为反射加载程式所需的 API 功能,通过使用 GetDelegateForFunctionPointer 解析所需的 API(如 VirtualAlloc 和 CreateThread)来实现这一点。
然后,ps 脚本将对有效负载进行 XOR 解密,并调用 EXE 檔案 sc。
使用 D/invoke 方法和 XOR 操作的第二阶段 PowerShell 脚本
反射加载到内存中的 EXE 檔案 sc 充当主加载程式,使用系统调用将代码注入另一个新创建的进程。新创建的 svchost.exe 进程包含 CryptoClippy。
檔案夹名称和互斥字元串生成器
窃取程式的前几个函数将首先映射出檔案系统,以创建要使用的檔案夹。这是通过使用 API GetWindowsDirectoryA、GetVolumeInformationA 和 SHGetFolderPathA 来实现的。
窃取程式包含一个函数,它将创建字母数字字元串。此字元串生成器用于主程式中的多个位置。它首先用于在 AppData 路径下创建一个唯一的檔案夹名称。为此,使用一个常量值作为字元串生成器的参数。
在本示例中,常量是 0x79FE6D,它将在字元串生成器函数中使用,并映射到格式字元串 %08x-%08x。
常量引用和函数字母数字生成器的 xref
字元串生成函数将使用提供给函数的常数值和从受害者系统查询的卷序列号。它将创建以下字元串作为示例:079fe6d-de786dd1。
常量值和卷序列号连接成格式字元串
该算法将按每个字元拆分,以此来打乱字元串 079fe6d-de786dd1。第一个操作将是由字元串的第一个字元执行的对 FFFFFFFF 值的异或。
然后,所得到的运算将被右移 1,并被常数 0x82F63B78 异或。结果异或操作将遵循相同的操作集,在 16 个字元示例字元串 079fe6d-de786dd1 中,每个字元总共执行 8 次。
算法完成后,返回要添加到 AppData 目录的檔案夹名称。本例中的檔案夹名称为 55abf82d,完整路径为 C:UsersxxxAppDataRoaming55abf82d。这将根据作为输入提供的常量和卷序列号而变化,以创建唯一的字母加数字字元串。
使用的算法的结果,即要创建的檔案夹名称
互斥锁
攻击者的互斥锁的创建也使用字元串生成器函数,该函数作为参数提供了一个不同的常量值。在本例中,值为 0x24F2D5。
用于创建带有卷序列号的互斥锁的常量值
用户模式事件挂钩設定
为了便于窃取者剪切剪贴板的加密钱包地址,并将其替换为二进制檔案中包含的硬编码钱包,它将首先调用 API SetWinEventHook 来設定事件挂钩,以便在触发特定事件时调用负责与剪贴板数据互動的函数。
EVENT_OBJECT_FOCUS EVENT_OBJECT_VALUECHANGE EVENT_SYSTEM_FOREGROUND
事件挂钩設定将具有一个从所有进程以及所有现有线程接收事件的进程范围,然后跳过连接负责创建挂钩的所属进程。在設定事件挂钩之后,创建一个 Windows 事件对象。它通过调用用于同步的 Windows API CreateEventA 来实现这一点,当特定事件发生并完成时,它将向线程发出信号。
windows 事件钩子和注册类的反编译视图
创建 Windows 对象事件之后,窃取程式将使用 API RegisterClassExA。此 API 提供了一个指向 WNDCLASSEX 结构的指针,该结构包含 wcbClass 和各种结构資料欄。
在此之后,调用 CreateWindowExA,它将创建一个具有前面 API 所指向的结构的視窗。在这个结构中,我们分析的重要資料欄是 lpfnWndProc 資料欄,它指向恶意軟體开发者的剪贴板函数。
后门
在 CryptoClippy 执行期间,此威胁将解密并写入檔案 Tozzia.bat 和 Tozzia.ps1 到檔案系统,这些檔案系统嵌入到檔案系统中。执行批处理檔案 Tozzia.bat,然后执行 Tozzia.ps1。
Tozzia.bat 檔案内容
下图显示了 Tozzia.ps1 被写入檔案系统并执行,从而进行持久性攻击。
Tozzia.ps1 内容
下图显示了 Tozzia.ps1 通过创建计划任务来获得持久性。
执行 Tozzia.bat 的计划任务
在 Tozzia 脚本解密后,另外两个脚本 Giddia 和 Knowledgeprojects 也被解密,但没有被执行或写入檔案系统。从内存中提取 Giddia 和 Knowledgeprojects 这两个脚本,可以看到几百行额外的脚本代码。
Giddia 脚本包含执行与终端服务相关的系統資料庫属性值的功能,目的是削弱它们。它还包含网络命令和本地帐户相关操作的功能。
PowerShell 脚本名 Giddia
Giddia 功能
名为 Knowledgeprojects 的 PowerShell 脚本
Knowledgeprojects 脚本包含使用 PowerShell 清除日志的功能。
通过恶意广告(Malvertising)传播
研究人员观察到这种利用谷歌广告和 TDS 的恶意軟體活动。当用户搜索 "WhatsApp 网络 " 时,攻击者使用了出现在搜索结果中的谷歌搜索广告。这使他们能够诱骗受害者打开并下载他们的恶意压缩 .zip 檔案。在 2022 年初收到这一攻击的警报后,谷歌实施了额外的保护措施,并表示,其系统在检测和防止再次攻击方面有所改进。
此外,攻击者使用 TDS 过滤恶意登录页面上的真正用户和机器人。TDS 过滤器通过使用各种标准来确定客户端设备是否是真实用户以及葡语使用者,从而排除机器人和互联网爬虫。
首先,TDS 检查连接设备是否来自虚拟专用网络(VPN)IP 地址。使用 VPN 会使攻击者难以确定受害者设备的位置和特征,也会使其更难传播恶意内容。
接下来,TDS 进行用户代理检查。用户代理是网络浏览器发送到网站以识别其自身及其功能的文本字元串。通过检查客户端设备的用户代理,TDS 通过检查接受语言 ( Accept-Language ) 标头来确定首选浏览器语言是否为葡语。TDS 还可以检查其他信息,如设备类型、作業系統、浏览器版本和地理位置。
最后,TDS 遵循超文本传输協定(HTTP)GET 标头标准。HTTP GET 标头是由 web 浏览器发送到伺服器以检索资源的请求消息。标头可以包含各种信息,例如请求的 URL、用户代理、Accept-Language 标头和 referer 标头。检查 HTTP GET 标头中的条件是 TDS 确定浏览器的首选语言是否为葡语的另一种方法。
如果 TDS 确定连接不符合上述标准,受害者将被重定向到另一个登录页(如下图所示),并被提示点击 " 继续到 WhatsApp Web"。这将重定向到合法的 WhatsApp Web 網域,而不会有任何进一步的恶意活动,有效地逃避了受害者和安全軟體的检测。
恶意網域名的内容
但是,如果 TDS 确定该连接满足上述条件,受害者将被重定向到恶意登录页面,并提示他们下载恶意的 .zip 檔案
受害者的浏览历史
这个网站伪装成 WhatsApp 的官方网站,提供 WhatsApp 桌面。从 mydigitalrevival [ . ] com 下载此檔案就会下载所谓的 WhatsApp.zip。
mydigitalrevival [ . ] com 网站
研究人员发现的属于本次活动的其他網域名还有 preflightdesign [ . ] com 和 pickconferences [ . ] com,它们的葡语版本也有同样的内容。
当受害者成功加载恶意网页并下载所提供的 .zip 檔案时,其中包含一个 .lnk 檔案,如下图所示。
初始 ZIP 檔案中包含 LNK 檔案
在执行 .lnk 檔案后,研究人员观察到下载到 C:Users\AppDataRoamingRicoly 中的以下檔案:
Ricoly.bat;
Ricoly.ps1;
两个混淆的加密檔案(ps,sc);
一个混淆的加密辅助配置檔案(pf);
第一个 PowerShell 脚本加载程式 Ricoly.ps1 由 Ricoly.bat 批处理檔案启动并执行。Ricoly.ps1 脚本的目的是解密第二阶段的模糊化 / 加密的脚本 ps。
第二阶段 PowerShell 脚本 ps 的功能是充当反射 PE 载入程式。ps 檔案将以写入檔案系统的名为 sc 的加密 EXE 檔案为目标。sc 檔案是反射加载的,最终用作 CryptoClippy 的载入程式。
主要可执行檔案
在执行 .lnk 檔案和两个后续的 PowerShell 脚本之后,CryptoClippy 操作由一个可执行载入程式和主要可执行檔案组成。CryptoClippy 的载入程式是一个 64 位的 EXE 檔案,其中主窃取程式 EXE 檔案嵌入在 .data 部分中。载入程式使用系统调用,在执行时似乎与 SysWhispers2 实现重叠。
SysWhispers2 是一个更隐蔽的代码执行实现,用于绕过对用户模式 API 的检查。这种绕过是可能的,因为用户模式 API 通常由应用程式使用,包括 AV/EDR 产品通过用户模式挂钩进行内省。
CryptoClippy 的主要可执行檔案是用 C 编写的,它是用传输层安全性(TLS)库 Mbed-TLS 静态编译的。可执行檔案的主要功能包括它自己的名称生成算法即檔案路径、互斥对象和事件对象。主可执行檔案还广泛使用了一个名为 pf 的本地辅助檔案,该檔案包含一个加密的证书。CryptoClippy 使用它自己的算法从辅助檔案中消除字元查找表的混淆,从而从查找表中指向值的指针构建明文证书。
该威胁还使用两个不同的 RC4 密钥进行各种字元串解密。字元串解密例程将使用内存中内置的结构,用于结构中的索引位置、字元串偏移量和字元串大小。这些字元串与对象名称、網域、加密钱包和持久性脚本有关。
RC4 Key: 1b43233d5a054808061c190336320e46 RC4 Key: 4646070B47445451604F291809444703
窃取加密货币
CryptoClippy 的主要目标是识别正在复制到剪贴板中的加密钱包字元串。CryptoClippy 設定用户模式事件挂钩,并使用回调函数执行将复制到 Windows 剪贴板中的以太坊或基于比特币的钱包替换为攻击者拥有的硬编码钱包值。下图显示了捕获剪贴板输入的視窗。根据载入程式的执行流程,这个特定的应用程式通常是不可见的。
窃取剪贴板里的内容
CryptoClippy 剪贴板函数的反编译视图(如下图所示)显示,攻击者使用的钱包地址将被 RC4 解密,以便稍后在任何加密钱包的替换中使用。
CryptoClippy 将对被填入剪贴板的数据执行字元串检查。它将检查与以太坊或比特币相关钱包相关的常见前导字元。复制到剪贴板中的字元串将循环确定字元数。在下图的第 27 行,从总字元数中减去 25 并进行比较,看看它是否小于或等于 9。
CryptoClippy 剪贴板函数的反编译视图
此字元串检查操作适用于以 1 开头的比特币地址。否则,代码路径将被跳过,下图所示的调试视图显示了 API GetClipboardData 和 API 的返回值,其中包含复制的以太坊钱包地址。
以太坊钱包地址 0xdB055877e6c13b6A6B25aBcAA29B393777dD0a73
一旦获得剪贴板数据,将执行上面反编译视图中指出的字元串检查,查找使用的特定加密钱包类字元。下图就是一个以太坊钱包,随后检查起始字元值 0x。
使用的以太坊钱包 0xB49eae711FBa241f657dA46A998833A6591848b
负责操作剪贴板的函数将使用 API SetClipboardData 将用户以太坊钱包地址替换为 0xB49aeae711FBa241f657dA46A998833A6591848b。
上图是钱包地址的一小部分。下表包含用户提供的值,这些值被之后就会被攻击者发现并被替换。
复制钱包和替换钱包的示例
为了保持对受害者计算机的访问,CryptoClippy 将 Ricoly.link 添加到 Startup 檔案夹(AppDataRoamingMicrosoftWindowsStart MenuProgramsStartupRicoly.lnk)来获得持久性。Ricoly.nk 将在用户登录时启动,它将执行 Ricoly.bat 脚本,然后执行 Ricoly.ps1。
维护访问权限的其他工作包含在 rc4 加密的 PowerShell 脚本 Tozzia.ps1 中,注入 svchost.exe 的 CryptoClippy 有效负载提取 Tozzia.bat 和 Tozzia.ps1 檔案。Tozzia.ps1 脚本包含与终端服务的系統資料庫修改、本地帐户创建、网络命令和事件日志清除相关的各种功能。
总结
过去几年,窃取加密货币的攻击越来越多。大概的攻击手段有:
· 使用 TDS;
· 针对特定目标范围;
· 将有效负载与环境相匹配;
· 采用更复杂和更隐蔽的技术来隐藏加载程式和剪辑功能;
· 创建操作所需的自定义算法;
我们经常看到传播这种威胁的两种特殊方法,一是使用僵尸网络(如 Laplas Clipper 和 Smokeloader),二是可能存在底层恶意軟體即服务(MaaS)功能(如 Eternity Clipper)。