ReversingLabs的研究人员发现了一种影响npm平台的新的恶意供应链攻击。“typosquatting”活动于8月首次出现,并推送了一个恶意软件包,即节点隐藏控制台窗口,该软件包下载了一个Discord机器人程序,该机器人程序为植入开源rootkit r77提供了便利。
这是 ReversingLabs 研究人员首次发现提供 Rootkit 功能的恶意开源软件包,并表明开源项目可能越来越多地被视为分发恶意软件的途径。
typosquatting 造成开源恶意软件
这只是一系列利用 npm 的恶意供应链攻击中的最新一起。例如,8 月份,ReversingLabs 研究人员发现了与 npm针对加密货币提供商的活动相关的其他恶意软件包的证据。7 月,我们报道了Brainleeches,这是另一个基于 npm 的活动,该活动针对最终用户和开发人员,使用恶意代码,旨在通过虚假的 Microsoft.com 登录表单收集用户数据,并在无意中包含 npm 包的应用程序中植入凭据收集脚本。
与之前的活动一样,这一最新发现在很大程度上依赖于一种称为“typosquatting”的技术,在这种技术中,网络犯罪分子会建立恶意软件包,其名称与合法且广泛使用的开源模块非常相似。 在这种情况下,名为node-hide-console-windows的恶意软件包模仿合法的 npm 软件包node-hide-console-window,该软件包用于切换应用程序的控制台窗口可见性。正如您所看到的,这两个包几乎完全相同,只有字母“s”来区分恶意包和合法包。 正如威胁研究团队在之前的活动中所看到的那样,攻击者还采取了其他步骤,使那些急于将节点隐藏控制台窗口功能添加到其应用程序的开发人员无法区分这些软件包。例如,恶意软件包的 npm 页面被设置为看起来与合法软件包的页面非常相似。此外,恶意npm包已发布10个版本,与node-hide-console-window相同。这项最新的活动于八月底开始。
图 1:合法软件包的版本
在对 npm 公共存储库进行例行监控期间,恶意的node-hide-console-windows软件包引起了 ReversingLabs 研究人员的注意。该团队使用ReversingLabs 软件供应链安全平台定期扫描 npm 包。我们的研究人员会识别并手动审查包含可疑特征的包裹。
当我们的研究人员发现恶意软件包时,我们会将其报告给 npm 维护人员,以便将其删除。我们还自行进行更深入的分析,以更好地了解恶意供应链活动。node -hide-console-windows软件包显示了我们团队经常在恶意软件包中发现的许多特殊行为,从而引发了更严格的审查。
图2:node-hide-console-windows的行为指标
例如,除了该包的可疑熟悉的名称和版本历史记录之外,负责该包的维护者帐户是新创建的,并且未连接到任何其他 npm 项目。更重要的是,经 RL 的软件供应链安全平台检查,恶意代码位于node-hide-console-windows文件index.js内,该文件被指定为package.json内的 main 。该文件中的代码没有被混淆,看起来也不是非常值得信赖。当它运行时,它获取了一个可执行文件,该可执行文件随后立即被引爆。
DiscordRAT - 开源木马?
因此,研究团队查看了 index.js 文件获取的可执行文件。我们的分析很快就将其识别为DiscordRAT 2.0的副本,这是一个开源“Discord 远程管理工具”,旨在“仅用于教育用途”。简而言之:这是开源恶意软件。
这并不是恶意行为者第一次在实际攻击中使用 GitHub 上提供的开源恶意软件的副本。例如,5 月份,我们观察到一个恶意 npm 包nodejs-encrypt-agent,其中包含一个恶意可执行文件,该文件原来是 TurkoRat ,这是一个与合法 npm 包pkg打包在一起的开源信息窃取程序。最近,与最近的Roblox 活动相关的第三阶段可执行文件被发现是一个 PyInstaller 编译的可执行文件,为另一个开源信息窃取者 Luna Grabber 提供服务。
对于潜在的攻击者来说,DiscordRAT 2.0使用起来非常简单。其作者在readme.md文件中提供了易于理解的详细说明。该机器人需要在 Discord 开发者门户注册并添加到 Discord 服务器或行会中,恶意行为者可以通过该服务器或行会来控制它。
在部署之前,必须从 Discord 开发者门户获取机器人令牌以及添加机器人的行会 ID。然后将其包含在恶意 DiscordRAT 2.0 可执行文件中,该可执行文件可以通过各种渠道传递给受害者,包括网络钓鱼电子邮件附件、存放在公共存储库和针对开发人员的软件包等。
该团队使用 IDA Pro 应用程序从 DiscordRAT 的配置中提取了这两个标识符。此恶意可执行文件中使用的机器人令牌是:
MTEzNTM5NDcwMTk3ODEwoDAxNg.GtdDHG.Aaj0Z8_IKQtFSG2p6VIQeDqNBvd-PkLeTD8WnE。公会ID为:1140853704396902591。
图 3:DiscordRAT 的配置
为了发现有关管理 DiscordRAT 的 Discord 公会的更多信息(并可能从受害者的计算机收集敏感信息),该团队使用了开源工具 DiscordLookup。原来,该公会于8月15日上线,距离第一个版本的恶意node-hide-console-windows包发布仅10天。
图 4:公会创建时间戳
执行一次,无需进一步操作
DiscordRAT 使管理受感染的主机变得容易。一旦恶意可执行文件运行,它就会在关联的 Discord 服务器中创建一个通道 - 每个受害者一个通道。同时,初始有效负载被发送到受感染的主机(图 5)。
图 5:开始发送到新创建的 Discord 通道的有效负载
接下来,机器人正在等待恶意行为者发送其他命令。DiscordRAT 提供了一系列命令,从提取信息到通过禁用 Windows Defender 和防火墙、终止进程、阻止使用受害者的鼠标和键盘以及关闭或“蓝屏”受感染设备来控制受害者的计算机。( DiscordRAT 的 GitHub 页面上提供了这些命令的详细完整列表。)
找到问题的根源
当我们继续调查包和可执行文件时,当我们注意到名为!rootkit 的命令之一时,我们的兴趣被激起了。该命令允许恶意攻击者在受害者的计算机上 启动r77 rootkit 。
与 DiscordRAT 一样,r77 是开源恶意软件的一个示例,拥有大量文档,即使是新手也可以轻松部署。r77 是一个无文件的 Ring 3 Rootkit,能够伪装文件和进程,并且可以与其他软件捆绑或直接启动。r77 是 DiscordRAT 2.0 的最新成员,该开源恶意软件 ( Discord-RAT ) 的早期版本缺乏启动 rootkit 的能力。同样有趣的是:我们研究的 DiscordRAT 2.0 可执行文件没有使用最新版本的 r77 rootkit,而是使用旧版本的 rootkit。
就功能而言,当僵尸程序收到!rootkit命令时,就会启动 r77 rootkit,并创建两个注册表子项来隐藏僵尸程序的存在。其中一个子项用于隐藏可执行文件的路径。另一个用于隐藏机器人的进程,这意味着启动机器人的可执行文件以及可执行文件的路径对受感染设备的用户隐藏。
(我们还发现了另一个命令!unrootkit,它可以从受害者的计算机中删除 r77 rootkit。)
这不是我们第一次遇到 r77 rootkit。该恶意软件是之前许多恶意活动的主角。然而,这是 ReversingLabs 研究人员第一次发现 r77 隐藏在 npm 上的恶意开源包中。
但是等等……还有更多!
我们分析的所有 10 个版本的node-hide-console-windows 都下载了服务于 DiscordRAT 2.0 的相同恶意可执行文件。有趣的是,最后两个版本添加了一个伪装成可视化代码更新的恶意有效负载,除了 DiscordRAT 之外,还 由index.js 获取。
再一次,这种无法解释的行为是一个重大危险信号,需要进行更深入的分析:随机 npm 包从未连接到官方页面的任意页面下载 Visual Studio Code 的更新,并与各种不同的可疑行为配对。
图 6:第二个下载的可执行文件的行为指标
在这种情况下,与可视化代码更新相关的恶意有效负载是一个为Blank-Grabber 服务的 PyInstaller 编译的可执行文件,这是一个用 Python 3 编写的信息窃取程序,在其原始作者将项目控制权转移给其中一位贡献者后,该程序最近更换了维护者。我们最近在Roblox 活动中看到了一个提供 PyInstaller 编译的开源信息窃取程序的开源包,尽管该活动的可交付成果是 LunaGrabber 而不是 Blank-Grabber。尽管如此,这些相似之处表明恶意行为者正在转向开源项目来植入恶意软件,同时逃避防病毒检测。
IOC
以下 IOC 是 ReversingLabs 研究人员对节点隐藏控制台 Windows软件供应链活动调查的一部分而收集的。
npm
有效载荷
结论
与IconBurst 等其他恶意供应链活动相比,r77 rootkit 活动在开发人员中的影响范围有限。在被 npm 维护者检测并删除之前,node-hide-console-windows被下载了大约700次——只是与恶意 IconBurst 软件包相关的下载量的一小部分。那么,这是一场复杂的、有针对性的活动,还是只是噪音——低技能脚本小子的简单玩笑?目前团队还不清楚。
一方面,我们的研究表明,恶意行为者努力让他们的包看起来值得信赖。正如我们所观察到的,该活动背后的参与者创建了一个 npm 页面,该页面与被误植的合法软件包的页面非常相似,甚至创建了 10 个版本的恶意软件包来镜像他们所模仿的软件包。
另一方面,该活动中使用的所有项目都是有详细记录的开源恶意软件,“出于培训目的”发布到 GitHub 等主要平台。换句话说,整个活动都是由在线免费公开的组件组成的。攻击者只需付出很少的努力即可构建和执行此类活动。对已知且频繁部署的开源恶意软件的依赖也增加了目标组织检测到的机会。
尽管如此,对于成千上万使用流行的开源项目(如node-hide-console-window )的开发人员来说,这种区别并不重要。无论该活动的复杂程度如何,这些软件包都突显了 npm 或 PyPI 等公共存储库以及 GitHub 上潜伏的始终存在且不断增长的危险。像 Rootkit 这样危险和具有侵入性的东西对每个人来说都很容易获得,有详细的记录,并且随时可以使用。
这种可用性使得供应链攻击(曾经是资源充足且复杂的民族国家或网络犯罪团体的领域)变得容易被低技能的恶意行为者和“脚本小子”攻击。对于各种开发组织来说,这比针对 3CX或SolarWinds等狡猾、有针对性和隐蔽的活动更糟糕。这是因为它表明供应链攻击之门现在向低风险参与者敞开,他们可能会愚弄粗心的开发人员,并以产生深远影响的方式渗透到开发管道中。
与我们最近强调的其他活动一样,该活动强调组织需要改进其工具来检测开源软件包的风险。与本例一样,这些攻击取决于开发人员对命名中的小细节的不注意——在本例中是单个字母“s”。但这并不是潜在供应链攻击者可以使用的唯一伎俩。使用混淆代码是一个主要的警告信号。其他指标包括可疑的命名和包版本控制、具有粗略历史记录的新包、小于预期的下载和依赖项等等。
在项目中使用公共存储库中的包时,开发人员应该密切注意这些小但重要的细节,以避免恶意包作为依赖项引入到一些较大的项目中。
开发组织还需要仔细检查他们所依赖的开源、第三方和商业代码的功能和行为,以便跟踪依赖关系并检测其中潜在的恶意负载。
转载来源:https://www.reversinglabs.com/blog/r77-rootkit-typosquatting-npm-threat-research
图片来源网络侵权可联系删除