追踪 Chaes 杀伤链

引言

Chaes 是一款仅在巴西运作的银行木马,于2020年11月首次由 Cybereason 报告。2021 年第四季度,Avast 观察到 Chaes 活动的增加,检测到超过 66605 名巴西客户的感染尝试。在我们的调查中,我们发现该恶意软体通过许多受危害的网站进行分发,包括一些高度可信的网站。总的来说,Avast 合共在 800 个网站上发现了 Chaes 的遗留物,其中超过 700 个包含巴西国别代码顶级域名 (TLD)。所有受害网站均为 WordPress 网站,这使我们猜测攻击向量可能是利用 WordPress CMS 的漏洞。然而,我们无法进行法医鉴定以证实此理论。我们立即将调查结果分享给巴西计算机应急小组BR Cert,希望能阻止 Chaes 的扩散。截止到本报告发布之时,我们所观察到的一些网站上仍然存在 Chaes 的遗留物。

Chaes 的特征是使用多阶段交付方式,利用多种脚本框架,如 JScript、Python 和 NodeJS,以及以 Delphi 语言编写的二进制档和恶意的 Google Chrome 扩展。Chaes 的最终目标是盗取存储在 Chrome 中的凭证,并拦截巴西流行银行网站的登录信息。

在本篇报告中,我们将展示我们对于 2021 年第四季度发现的 Chaes 样本的分析结果。关于最新活动的后续更新将通过 Twitter 或后续文章分享。

感染方案

当有人访问一个受到 Chaes 攻击的网站时,会弹出以下提示,要求用户安装 Java Runtime 应用程序:

如果用户按照指示操作,他们将下载一个冒充合法 Java 安装程序 的恶意安装程序。如下面所示,这个假安装程序在外观和行为上都与合法的巴西葡萄牙语 Java 安装程序非常相似。

一旦安装开始,用户的系统将被妥协。几分钟后,所有的网络凭证、Chrome 所存储的历史记录和用户档案将被发送给攻击者。用户可能会发现 Google Chrome 自动关闭并重新启动。这表明,之后与以下巴西银行网站的所有互动将被监控和拦截:

mercadobitcoincombrmercadopagocom[arbr]mercadolivrecombrlojaintegradacombr

技术分析

被感染的网站

在检查受攻击网站的 HTML 代码时,我们发现插入的恶意脚本如下所示:

在这个例子中,V=28 可能代表版本号。我们还发现了其他版本的 URL,如下:

https//is[]gd/EnjN1xV=31https//is[]gd/oYk9ieluD=30https//is[]gd/Lg5g13V=29https//is[]gd/WRxGbaV=27https//is[]gd/3d5eWSV=26

该脚本创建了一个 HTML 元素,持续显示在页面上,诱使用户点击“Java Runtime 下载”。这个元素引用了来自可疑 URL 的图像:

https//sysdmt[]net/indexphpDhttps//dmtsys[]net/

并执行从以下地址下载 Microsoft Installer:

https//bkwot3kuf[]com/wL38HvYBiOl/indexphpget 或https//f84f305c[]com/aL39HvYB4/indexphpget 或https//dragaobrasileiro[]combr/wpcontent/themes/getCorsFilephp

Microsoft Installer

下方的流程图显示了恶意安装程序执行后的感染链。

在 MSI 包内,安装程序包含了三个恶意 JS 文件 installjs、schedjs 和 sucessojs,这些文件的名称被重命名为 Binary。每个文件都执行不同的任务,但都能将进度汇报给指定的 CnC:

installjs

这个脚本的目的是下载并执行名为 runScript 的设置脚本,该脚本将为下一步加载器准备适当的 Python 环境。它向硬编码的域名发送 HTTP 请求后,下载并执行被混淆的 runScript,以执行以下任务:

检查网络连接使用 googlecom创建 APPDATAlt随机生成的文件夹名称gtextensions 文件夹下载受密码保护的压缩档,如 python32rar/python64rar 及 unrarexe 到该扩展文件夹将新创建的扩展文件夹路径写入 HKEYCURRENTUSERSoftwarePythonConfigPath执行一些基础的系统剖析使用 unrarexe 命令,并将密码作为参数执行以解压 python32rar/python64rar连接到 C2 下载32位和64位的 initpy 脚本以及两个加密的有效负载。每个有效负载都有随机生成的名称。

runScriptjs 内容

schedjs

这个脚本的目的是设置持久性,保证从前一步下载的 initpy 能够执行。schedjs 主要通过创建一个 Scheduled Task 来实现,并作为备用措施创建一个 Startup link。最终,这两者都能确保在重新启动后执行以下命令:

ltpython32python64gtpythonwexe initpy /m

ScheduledTask 配置

sucessojs

这个脚本向 CnC 报告受害者的初始安装已经成功,并为下一阶段准备就绪。

Python 加载器链

由 schedjs 创建的 Scheduled Task 最终会启动 initpy,接著启动 Python 的内存加载链。这个加载链涉及多层 Python 脚本、JS 脚本、shellcode、Delphi DLL 和 NET PE,我们将在本节进一步解释。令人印象深刻的是,最终有效负载在 initpy 过程PID 2416 和 4160中被执行,具体如下面所示:

initpy

混淆内容

initpy 会对由 runScriptjs 下载的随机名称的档案进行 XOR 解密和解压缩,产生另一个 Python 脚本。新的 Python 脚本中嵌入了两个有效负载:以加密形式存在的 image 和 shellcode。image 代表 Chaes 加载模块,名为 chaesvydll,而 shellcode 是一个在内存中的 PE 加载器。我们发现在 Chaes 的后续阶段中,这个特定的加载器 shellcode 多次出现。通过使用 CreateThread API 运行 shellcode,并提供正确的参数指向 chaesvydll,该 Python 脚本最终会将 chaesvydll 加载到内存中:

chaesvydll 被嵌入的 shellcode 加载到内存

追踪 Chaes 杀伤链 Chaesvydll

Chaesvy 是一个 Delphi 模块,会加载一个内嵌的 NET 可执行档,而该可执行档会运行两个 JavaScript:scriptjs 和 enginejs。这两个脚本拥有 Chaesvy 模块的核心功能。

scriptjs

此脚本作为 NET 框架和 JScript 框架之间的介面,提供执行任何脚本和模块的必要工具,这些脚本和模块将在未来由 enginejs 下载。默认情况下,scriptjs 会尝试检索在 initpy 的参数中指定的有效负载路径。如果未找到有效负载,它将执行 enginejs。

enginejs

此脚本采用两种方法来检索 JS 有效负载:getBSCode() 和 getDWCode() 两者每六分钟调用一次。

getBSCode 是主要方法,也是唯一我们能观察到的负载供应。加密的有效负载隐藏在一个 Blogspot 页面的注释代码中,显示如下。如果未被 Chaes 感染,该网站是完全无害的。

Blogpost 页面显示隐藏的恶意代码

另一方面,当执行 enginejs 时,它将从 ltdiv id=rssfeedgt 开始解析字符串,这是加密有效负载的标记:

免费加速器梯子

隐藏的代码

使用硬编码的密钥通过 AES 解密此文本后,将获得 instructionsjs,并执行该脚本。此脚本负责下载和执行 Chaes 的恶意 Chrome “扩展”。有关 instructionsjs 的更多信息将在下一节中提供。

getDWCode 是检索 instructionsjs 的次要方法。它采用 DGA 方法当 getBSCode 失败时每周查找一个活动域名。由于我们未能观察到此方法被成功使用,我们无法提供此处的分析。然而,你可以访问我们的 Github,查看完整的算法。

Instructionsjs

Instructionsjs 是交付链的最后阶段。在这之前的任何步骤都没有实质性收益。instructionsjs 的工作是下载并安装所有恶意扩展,这些扩展将利用 Chrome 浏览器并对受到感染的用户造成损害。所有有效负载的地址已被硬编码,如下所示:

扩展被分为受密码保护的压缩档和加密的二进制文件。未压缩的有效负载是可以独立运行的 PE 文件,而压缩的则为扩展添加了必要的 NodeJS 包以供其运行。以下是 chremows6364 压缩档内容的示例:

以 dllfilename 参数如 chromeows2bin的所有二进制文件都被加密,包括压缩档内的文件。解密算法位于 scriptjs 中,如前所述。要解密和运行每个二进制文件,Chaes 需要调用 initpy,并将文件路径作为参数指定。

扩展的安装可以简化为以下步骤:

向一个 HTTP 请求 (aws/isChremoResetphp) 发送请求,以检查特定的 uid 下的 Google Chrome 是否已被控制。如果没有,则关闭 Chrome 和 NodeJS。更多有关 uid 的信息将在下面的“在线”部分中提供。根据三种情况构建下载请求:32位、64位和未找到 Google Chrome。每种情况都将包含适合版本的扩展及其下载链接。下载扩展,并妥善解压压缩的有效负载。为新下载的模块创建一个 hosts 文件。该文件中的内容是从以下池中随机选择的 CnC 地址:

每个扩展将使用 hosts 中指定的地址进行 CnC 通信。

通过 pythonexe initpy 将每个扩展启动,并提供正确的参数,如下所示:

扩展

在线

onlinedll 是一个短命的 Delphi 模块,由 instructionsjs 执行,该模块的主要目的是通过生成一个 uid 来指纹受害者,该 uid 是 C VolumeSerialNumber、UserName 和 Computername 的连接。uid 已被写入注册表键 SOFTWAREPythonConfiguid,然后包含在 beaconing 信息中。

此注册表键也是 instructionsjs 之前获取 uid 的地方,并向 CnC 查询受害者的 Chrome 是否已被控制。在 instructionsjs 第一次启动时,此注册表项尚未创建,因此 Chrome 进程总是会被终止。

onlinedll 从 hosts 文件中检索指定的 CnC 伺服器,并执行 beaconing 请求 /aws/newClientphp,将受害者的 uid 和基本系统信息发送出去。

Mtps4 (MultiTela Pascal)

模块 mtps4 是一个用 Delphi 编写的后门,其主要目的是连接到 CnC,并等待响应的 PascalScript 执行。与前一个模块相似,CnC 是从 hosts 文件中获取的。mtps4 向伺服器发送一个带有硬编码的 UserAgent 的 POST 请求,其中包含 uid 和命令类型。它目前支持两个命令:start 和 reset。如果 reset 命令的回应是 ( SCRIPT OK ),则会终止该进程。

start 命令则稍显有趣。

带有“start”命令的 HTTP 请求示例

作为对此命令的回应,预期将接收一段包含注释的 PascalScript 代码 ( SCRIPT OK )。

mtps4 使用 https//githubcom/remobjects/pascalscript 编译以支持 PascalScript。在运行之前,该脚本会创建一个窗口,复制屏幕并覆盖整个桌面,以避免在系统上执行恶意任务时引起怀疑。

不幸的是,在调查过程中,我们无法获得来自 CnC 的实际脚本。

Chrolog (ChromeLog)

Chrolog 是一款用 Delphi 编写的 Google Chrome 密码盗取工具。虽然它被列为一个扩展,但 Chrolog 是一个独立的工具,用于从 Chrome 数据库中提取用户个人数据,并通过 HTTP 将其外泄。CnC 伺服器同样从 hosts 文件中获取。

HTTP 请求 数据外泄/aws/newUploadphp Cookies、Web Data 和 Login Data加密/aws/newMasterKeyphp Chrome 主密钥,用于解密 Login Data/aws/newProfileImagephp 收集到的个人资料图片的 URL,来自 Local State 中的 lastdownloadedgaiapictureurlwithsize 属性/aws/newPersonalDataphp 用户名、全名、gaianame/aws/bulkNewLoginphp 所有 Login Data 被解密并添加到 localsql 数据库中。然后将对应的数据库部分外泄/aws/bulkNewUrlphp 历史记录 被添加至 localsql 数据库。然后将对应的数据库部分外泄/aws/bulkNewAdditionalDataphp Web Data 被写入 localsql 数据库,然后将对应的数据库部分外泄/aws/bulkNewProcessphp 所有运行中的过程被收集并写入 localsql 数据库,然后将对应的数据库部分外泄Cookies、Web Data、Login Data、历史记录和 Local State标准存放于 APPDATALocalGoogleChromeUser DataDefault

Chronodx (Chrome Noder)

chrolograr 内容包含 NodeJS 包和 chronodxbin,即 Chronod2dll。

Chronodx 依赖项“name”:“chremows”确实是定义的方式

chronodx 扩展包可分为两部分:一个名为 Chronod2dll 的加载器和一个名为 indexchronodx2js 的 JavaScript 银行木马。首先,Chronod2dll 执行 HTTP 请求 /dsa/chronod/indexchronodx2js 来获取 indexchronodx2js。如果成功,Chronod2dll 将静默在背景中运行,直到检测到用户打开 Chrome 浏览器。当这种情况出现时,它将关闭浏览器,并重新启动自己的 Chrome 实例,同时执行从 nodeexe 运行的 indexchronodx2js。

Chronodx 处于闲置状态

Chronodx 重新开启 Chrome 并执行 nodeexe indexjs 命令在这种情况下,Indexjs 是 indexchronodx2js

Indexchronodx2js 利用 puppeteercore,这是一个提供 Chrome 浏览器控制 API 的 NodeJS 框架,用于恶意目的。Indexchronodx2js 实现了许多功能以拦截巴西的流行银行网站,包括:

bancobrasilcombr/aapfbancodobrasilcombr/aapfbbcombr/aapfmercadopagocom//cardtokens/mercadopagocom/enterpass/mercadolivrecom/enterpass/lojaintegradacombr/public/login/mercadobitcoincombr

当用户访问以上任一网站时,indexchronodx2js 会开始收集受害者的银行信息,通过一系列 HTTP 命令发送给攻击者。CnC 伺服器存储在 hosts 文件中,但是如果未在系统中找到,则将使用硬编码的备用 CnC:

C2 命令 含义/aws/newQRMPClientphp 当在上述银行网站上发现 QR 码扫描时,应该将用户信息发送给攻击者,但该功能目前已注解掉/aws/newContaBBPFphp 当拦截 Bancodobrasil 银行网站时,发送用户银行信息/aws/newContaCefphp 当拦截 Caixa 银行网站时,发送用户银行信息/aws/newCaixaAcessophp 告诉攻击者受害者已访问 Caixa 银行页面/aws/newMercadoCartaophp 当拦截 Mercado 银行网站时,发送用户银行信息/aws/newExtraLoginphp 当登录到某页面时发送用户凭据

Chremows (Chrome WebSocket)

Chremows 是另一个使用 NodeJS 和 puppeteercore 的扩展,功能类似于 Cybereason 在 2020 报告中提到的 nodejs。Chremows 针对两个平台 Mercado Livre (mercadolivrecombr) 和 Mercado Pago (mercadopagocombr),这两者都属于一家名为 Mercado Libre Inc 的在线市场公司。

chremows 依赖项

chremows 与 chronodx 模块的结构相同,包含一个名为 CreateChrome64dll 的加载器,该加载器下载一个名为 indexjs 的基于 JavaScript 的银行木马。CreateChrome64dll 将自动在发现更新版本时更新 indexjs。与 chronodx 不同的是,chremows 一下载就立即执行 indexjs,并不需要 Google Chrome 打开。在一个单独的线程中,CreateChrome64dll 加载内嵌的模块 ModHooksCreateWindow64dll,该模块在 Cybereason 2020 报告中已经分析过。总的来说,这一模块有助于增强 chremows 在 Google Chrome 上的能力,让攻击者能够执行“主动”任务,例如向 Chrome 发送键击/鼠标点击,或打开指定网页。最终,CreateChrome64dll 将 Chrome 的 Local State 文件复制到 indexjs 的同一位置,并命名为 localjson。Indexjs 使用 localjson 来帮助攻击者识别受害者。

硬编码的 CnC

Indexjs 使用两种方法与攻击者通信:通过 WebSocket 和 HTTP。每种方法都有自己的 C2 伺服器,如上图所示。WebSocket 用于接收命令和发送与客户端相关的信息。另一方面,HTTP 用于将金融数据如银行凭据和帐户信息外泄给攻击者。

已知的 Indexjs WebSocket 命令列表:

来自 C2 的命令 功能welcome 将 uid 和从 localjson 中提取的资讯发送给攻击者control 攻击者建立对 Google Chrome 的控制权uncontrol 攻击者取消对 Google Chrome 的控制ping 检查与客户端的连接是否正常command 发送命令,例如键击、鼠标点击openbrowser 以最小尺寸开启隐藏的 Chrome 窗口

如果用户保持连接到 WebSocket CnC 伺服器,则每六分钟会自动转到目标的 Mercado Pago 和 Mercado Livre 页面,并执行恶意任务。在这一过程中,攻击者会失去直接对浏览器的控制。目标页面是需要用户登录的银行、信用和商家页面。如果用户未登出这些页面,攻击者将开始收集数据并通过以下 HTTP 请求进行外泄:

/aws/newMercadoCreditophp/aws/newMercadoPagophp

如果用户未登录这些页面,但在 Chrome 中保存了密码,则在例行操作结束后,攻击者将再次取得对 Chrome 的直接控制权,并手动登录。

总结

Chaes 利用许多网站,特别是使用 WordPress 的内容管理系统CMS来提供恶意安装程序。在这些网站中,我们特别努力通知 BR Cert 的一些重要网站。这个恶意安装程序与远程伺服器通信以下载 Python 框架和恶意 Python 脚本,这些脚本启动了感染链的下一阶段。在最终阶段,恶意的 Google Chrome 扩展被下载到磁碟并在 Python 过程中加载。这些 Google Chrome 扩展能够盗取存储在 Chrome 中的用户凭证并收集来自巴西流行银行网站的用户银行信息。

IOCs

完整的 IOC 列表可在 这里 获得。

网络

HTML 脚本is[]gd/EnjN1xV=31is[]gd/oYk9ieluD=30is[]gd/Lg5g13V=29tiny[]one/96czm3nkv=28is[]gd/WRxGbaV=27is[]gd/3d5eWSV=26MSI 下载网址dragaobrasileiro[]combr/wpcontent/themes/getcorsfilephpchopeecia[]combr/D4d0EMeUm7/indexphpinstallbodnershapiro[]com/blog/wpcontent/themes/twentyten/pphpdmtsys[]net/indexphpupdmt[]net/indexphpsysdmt[]net/indexphpxdemeter[]com/indexphpwalmirlima[]combr/wpcontent/themes/epico/proxyphpatlas[]medbr/wpcontent/themes/twentysixteen/proxyphpapoiodesign[]com/language/overrides/pphpCnC 伺服器200[]23419591f84f305c[]combkwot3kuf[]comcomercialss[]comawsvirtual[]blogspotcomcliqno[]link108[]16621943176[]1238149176[]1233100198[]23153130191[]252110241191[]25211075

SHA256 哈希值

档名 哈希值MSI 安装程式f20d0ffd1164026e1be61d19459e7b17ff420676d4c8083dd41ba5d04b97a08c 069b11b9b1b20828cfb575065a3d7e0b6d00cd1af10c85c5d6c36caea5e000b7 1836f3fa3172f4c5dbb15adad7736573b4c77976049259cb919e3f0bc7c4d5ea 02831471e4bf9ef18c46ed4129d658c8ce5b16a97f28228ab78341b31dbef3df a3bcbf9ea2466f422481deb6cb1d5f69d00a026f9f94d6997dd9a17a4190e3aa 62053aeb3fc73ef0940e4e30056f6c42b737027a7c5677f9dbafc5c4de3590bd e56a321cae9b36179e0da52678d95be3d5c7bde2a7863e855e331aea991d51b9 7a819b168ce1694395a33f60a26e3b799f3788a06b816cc3ebc5c9d80c70326binitpy 70135c02a4d772015c2fce185772356502e4deab5689e45b95711fe1b8b534ce 6e6a44ca955d013ff01929e0fa94f956b7e3bac557babcd7324f3062491755e2 0b5646f45f0fad3737f231f8c50f4ed1a113eb533997987219f7eea25f69d93f abc071831551af554149342ad266cc43569635fb9ea47c0f632caa5271cdf32runScriptjsbd4f39daf16ca4fc602e9d8d9580cbc0bb617daa26c8106bff306d3773ba1b74enginejs c22b3e788166090c363637df94478176e741d9fa4667cb2a448599f4b7f03c7cimage 426327abdafc0769046bd7e359479a25b3c8037de74d75f6f126a80bfb3adf18 3311b0b667cd20d4f546c1cb78f347c9c56d9d064bb95c3392958c79c0424428 c9b3552665911634489af5e3cb1a9c0c3ab5aed2b73c55ae53b8731a1de23a9fchremows fa752817a1b1b56a848c4a1ea06b6ab194b76f2e0b65e7fb5b67946a0af3fb5b e644268503cf1eaf62837ec52a91b8bec60b0c8ee1fb7e42597d6c852f8b8e9d bd5d2a0ec30fa454af1a086b4c648039422eca4fa1b1d6e8ecc4d47be7fab27f 4d2ffae69b4e0f1e8ba46b79811d7f46f04bd8482568eccf5620e6b1129c1633 faad384e124c283a8d024ee69dceaac877be52f5adbf18ca6b475a66663b0e85 969fa30802bdb81be5b57fef073896c2ee3df4211663301548f8efa86257e0cf 5a1ebf757ab9aa796a8580daafab9635660b9cc55505db194cbfefeb612e48f0 2d9e040820acca9a0fab2dc68546e0a824c4c45ee8c62332213e47e1f6923c90 e1d9effa8a56d23dbcefd2146eb5c174a245b35a4f718473452135bd064a2157 32c545e133183e6fc999e8f6a0da3c6e7fb1a12b97d2a3bbc5e84faa175a9ef6 ba3e0314b1d6e6ee10c473c1bbd883c4a5c53b5703b5ced174cd5a30b0b87160 e210217f2b5912e16a281dcbd5a5247fe2a62897dc5c2e1bf4ff61d3a07405f0 7a1d74c4d62ceee45a3cbaf79070cfc01342a05f47e0efb401c53040897bed77 550188ad28ccc07791880777c2de07e6d824a7263b9e8054423597b160e594a3 9603c4ce0f5a542945ed3ced89dd943eb865368b4e263090be9e0d9c1785615dchrolog 9dbbff69e4e198aaee2a0881b779314cdd097f63f4baa0081103358a397252a1 6dc63ea4dbe5d710b7ba161877bd0a3964d176257cdfb0205c1f19d1853cc43b 3e48f714e793b3111ce5072e325af8130b90a326eca50641b3b2d2eba7ac0a45 754eeb010795c86d1cc47b0813da6bbc6d9153f1dd22da8af694a9e2dca51cda 0762038fe591fef3235053c7136f722820de6d8457cae09d4aa9bf6cb7f497a1chronod ea177d6a5200a39e58cd531e3effb23755604757c3275dfccd9e9b00bfe3e129 7c275daab005bb57e8e97ac98b0ae145a6e850370e98df766da924d3af609285 96224c065027bb72f5e2caebf4167482fe25fb91c55f995e1c86e1c9884815c3 2688a7ac5b408911ae3e473278ecbc7637491df2f71f6f681bc3ed33045b9124 f3c1fd9e8674901771c5bfc4ce16eba75beff7df895a4dc6fdd33bedb2967a08 ddecc2606be56beae331000ba091e5e77ae11380f46eba45387c65289e6ce421 debe443266ab33acb34119f515f4622464edff198f77fd20006e2d79aafb6dfc bf4a83a19065d5c45858ceb988dce39d93c412902ead6434e85fbf2caa17db44 87502ad879a658aa463088c50facfbdbb1c6592263e933b8b99e77293fdf1384 6b6abc64053d20306147efced9df2ef75153e87a1d77ce657943b2373fb4ffb9 679a02d0ae4f5382767eb11cefad59c0664f55ed2ce3e3b3df97b78c09e18aa3 564b31c3d609d96a73ee139ec53453b985673ffacacb56ecd13d2c83bbf851e0 e649f71b68cc54f3d985e398f1c6354963ec027a26230c4c30b642d2fd5af0a6online 3fd48530ef017b666f01907bf94ec57a5ebbf2e2e0ba69e2eede2a83aafef984mtps4 5da6133106947ac6bdc1061192fae304123aa7f9276a708e83556fc5f0619aab

标签: 分析、银行木马、巴西、Chrome、桌面、恶意软件

分享:XFacebook

苹果更新:更好的 iCloud 安全性

苹果更新:更好的 iCloud 安全性发表于 2022年12月20日 作者 Glyn Moody苹果公司发布了两个重要公告,将增强用户的隐私保护,并可能在全球范围内产生积极的连锁反应:Wired 报道...