paint-brush
RAT 突变体如何在 Python 中窃取数据并逃避检测经过@hernanortiz
3,749 讀數
3,749 讀數

RAT 突变体如何在 Python 中窃取数据并逃避检测

经过 Hernán Ortiz7m2023/02/02
Read on Terminal Reader

太長; 讀書

尽管我们的安全研究人员每天都会发现恶意 Python 包,但一种我们称之为 RAT 突变体的新型恶意软件正在引起我们的注意。随着时间的推移,他们已经转变和适应,变得更加规避和危险。以下是他们如何窃取您的加密货币钱包和个人数据、远程控制您的鼠标和键盘以及如何进化以逃避检测的故事。
featured image - RAT 突变体如何在 Python 中窃取数据并逃避检测
Hernán Ortiz HackerNoon profile picture



“聪明的忍者不会去寻找他不完全了解的敌人。”——《忍者神龟》中的斯普林特


作为一名对科幻小说充满热情的技术作家,我在 Sonatype 的工作中最激动人心的部分之一就是我有机会与安全研究团队合作。


自从我们发现 上个月的一系列 Python 包对应于我们所说的 RAT 突变体——利用远程访问木马和信息窃取程序功能的新型恶意软件——我们的安全研究人员有一种挥之不去的似曾相识感。


这种情况并不少见:他们不断评估来自开源注册表的数百个可疑包,以确定它们是否真的是恶意的。在此过程中,他们会识别包裹之间熟悉的模式,有时,在认识到强烈的相似性后,他们会进行进一步的研究以追踪背后的参与者/活动。


从 2022 年的最后一周到 2023 年初,我们的 AI 系统标记了上传到 PyPI 注册表的可疑包,包括pyrologin easytimestamp discorder discord-dev style.pypythonstyles 。我们的安全研究人员查看了它们并确认它们确实是恶意的。经过进一步分析,他们注意到这些软件包添加了一系列在 Python 恶意软件中不常见的功能。


在已成为事实上的策略中,不良行为者将有效负载隐藏在setup[.]py文件中,因此开发人员只需使用简单的 pip 安装即可被感染。在这种情况下,他们会无意中启动一个 PowerShell 脚本,该脚本下载一个 ZIP 文件来安装库,让攻击者控制受害者的鼠标、键盘、截取屏幕截图并创建隐藏的远程连接。最重要的是,这些软件包还会泄露密码、cookie 和加密货币钱包数据等敏感信息,甚至会尝试安装远程访问工具。我们的发现符合Phylum的技术报告非常相同的包。


尽管如此,安全研究员 Carlos Fernandez 还是有一种挥之不去的似曾相识感。在我们公开这些软件包后的一周内,他脑海中闪过看到该恶意软件早期版本的记忆。威胁行为者可能一直在随着时间的推移发展他们的恶意软件,但我们需要确定,所以我戴上我的 OSINT 帽子来帮助他看看他的直觉是否有任何道理。

起源故事

回顾我们的数据库,2022 年 9 月 25 日,一个名为pygradient的包被上传到 PyPI 存储库。我们的 AI 将其标记为可疑,我们的安全研究人员确认它包含恶意软件,并且捆绑了另一个名为pystyle的软件包的源代码。这两个库都是由比利山羊356 ,又名 BillyTheGoat,又名 BillyV3(由 loTus04 和 BlueRed 贡献)。这位来自法国的作者(至少这是他在 GitHub 中的位置和通过他的 Discord 频道使用的语言所暗示的)被认为是背后的人海波龙,我们经常在最近上传的恶意软件中发现的 Python 混淆器,也是W4SP窃取者,一个信息窃取者,自 7 月以来一直活跃在持续的供应链攻击打开注册表。


W4SP 窃取程序拥有持久性(每次用户重新启动 PC 时它都会重新激活)、混淆(作者保证它完全无法检测)和隐写术技术来隐藏图像文件中的多态和高度混淆的有效负载。恶意软件通过硬编码的 Discord webhook 地址将所有受害者的 Discord 帐户、信用卡、密码和加密钱包发送回攻击者。对此恶意软件感兴趣的不良行为者通过支付约 20 美元的加密货币购买了它。



解码图像后,会显示隐藏的 base64 混淆 Python 代码。



最初, pystyle并没有恶意——一个无害的样式和颜色控制台输出包,以增强可读性和用户体验。但根据 Phylum 的研究,一旦它变得流行(该软件包在 PyPI 上仍然活跃并且每月累积超过 40,000 次下载),他们决定在几个版本中添加 W4SP 恶意软件。


诸如pystyle之类的开源软件包可以充当潜伏代理数月之久,但稍后会被其作者出于恶意目的而激活。这是一个冒险的举动,因为他们流行的软件包可能会被像我们这样的安全研究人员发现,他们会将其报告为恶意软件包并永久删除。这就是为什么他们经常创建新的包,而不是在其中包含无害库的源代码、添加某种类型的恶意负载并以新名称上传它:一些通用的、听起来温和的、看起来无辜的东西。诸如pygradient类的名称。


在与 Carlos 仔细研究后,我们发现这个 proto-RAT 变异恶意软件缺少 12 月版本的一些功能:尽管它也启动了一个 PowerShell 脚本并泄露了敏感数据,但它没有使用 base64 编码的有效负载或白名单txt 文件以避免自我感染。在某种程度上,它是一种更温和、更不复杂的变体。


但随后我们查看了 11 月初上传的软件包,包括paintpydevicespoofdevicespoofer ,在深入研究之后,我们发现我们的怀疑得到证实:恶意软件确实在进化。

追逐恶意软件的模仿者

尽管 BillyTheGoat 自去年 11 月以来就没有在 GitHub 上活跃过,但我们仍在发现基于他的创作或直接从他们那里窃取的恶意软件,主要是由一位显然位于葡萄牙的用户所为泽克特.


该用户在 PyPI 中上传了一个名为pystilez的最近删除的包,错误地归功于 BillyTheGoat,看起来像开始劫持- 一种通过将其链接到流行的 GitHub 库来提高其新包声誉的技术,从而与其数百个星和分支相关联。


Checkmarx公司一直在跟踪这个坏人在一个名为apicolor (以及类似名称的变体)的包中发现了 W4SP 攻击,该包在其恶意代码中包含一个 Discord 服务器链接。链接到经过验证的 Steam 帐户的管理员配置文件和名称“zeeckt”显示为攻击者的 Steam 别名之一。


检查点还报告说,这个威胁行为者通过复制流行的 GitHub 帐户的配置文件来创建虚假用户以增加合法性。他们的一名受害者决定创造YouTube 视频在迷上他们的虚假个人资料后警告人们注意这次攻击。


一位安全研究人员出于教育目的发布了 zeeckt 的一个有效负载,他收到了 W4SP 窃取程序的合著者的有趣回复:




多么讽刺你的偷窃者被偷了。


同一位作者,显然是一名 17 岁的 Python 开发人员,在他的 GitHub 个人资料中的 README 文件中重申了他的挫败感:



我们不知道 zeeckt 从其他不良行为者那里窃取了哪些恶意代码,但可以肯定的是:这个名字继续出现在开源注册表的恶意软件活动中。


偷偷摸摸的变体蚕食你的加密财富

卡洛斯最近又发现了四个包裹泽克特: forenitq , forenith , forenityforenitz 。经过进一步调查,他将它们标记为恶意,并向 PyPI 报告以将其删除。最快的案例从发布到删除大约需要 20 分钟。


查看forenitq中的setup[.]py Carlos 发现了以下第一阶段 payload:




攻击者创建三个临时文件,使用“开始”命令从特定 URL 下载和执行 Windows 二进制文件。尽管 slug /rat/clip暗示有恶意,但我们无法在不深入了解的情况下确认该假设。


在撰写本文时,位于hxxp://20[.]226[.]18[.]203的页面仍处于活动状态,它只显示指向已过期或私密的 Discord 邀请的链接。


卡洛斯注意到这个包裹假装很受欢迎色拉玛包,使用他们的元数据进行可能的 StarJacking 尝试。


在对 RAT 文件进行去混淆处理后,他发现了一行加载了一个可能的剪贴板劫持者,但它的细节是 base64 编码的:


解码后,我们得到一段 Python 代码,旨在劫持受害者的剪贴板,以用攻击者的地址替换预期的加密货币钱包地址:


它寻找指定的模式,如比特币(bc1)、以太坊(0x)、门罗币 (4) 和莱特币(L 或 M 或 3),当找到模式时,它会将预期地址替换为攻击者的加密货币钱包地址.


该代码使用剪辑用于复制和粘贴剪贴板数据的库。如果尚未安装,它将安装库,然后将加密货币钱包地址复制到剪贴板。然后将代码设置为连续循环以监视剪贴板中的钱包地址模式。


此外,我们还发现了这个 RAT 突变体用来逃避检测的更多技术:将第一阶段有效载荷添加到文件forenitq/ansi[.]py而不是setup[.]py和第二阶段多态有效载荷,它会在每次运行时发生变化二进制文件。


攻击者还添加了一个新的命令和控件以及一个非常完整的帮助菜单——这次是se fala português:



如您所见,恶意行为者渴望窃取您的加密货币资金和系统凭据,以进一步渗透您的基础设施。他们的 RAT 恶意软件不断变异,变得更加隐蔽并对开发人员造成破坏。因此,如果您现在没有保护您的软件供应链,请考虑尽快采取行动。


IOC(妥协指标)

hxxp://20[.]226[.]18[.]203/inject/tCxFLYLT6ViY9ZnP

hxxp://20[.]226[.]18[.]203/clip

hxxp://20[.]226[.]18[.]203/rat