在一场大规模的软件供应链攻击中,密码窃取者通过ChromePass从Windows系统上的 Chrome窃取证书。
在npm开源代码存储库中发现了一个使用合法密码恢复工具的凭据窃取代码,它潜伏在npm开源代码存储库中,等待从该源提取代码的庞大应用程序群中植入。
研究人员从Windows系统上的Chrome中捕获了恶意软件窃取凭据。密码窃取器是多功能的:它还可以侦听来自攻击者的命令和控制 (C&C) 服务器的传入命令,可以上传文件、从受害者的屏幕和摄像头进行记录以及执行shell命令。
关于npm
npm(最初是 Node Package Manager或NPM的缩写)是JavaScript运行时环境 Node.js的默认包管理器,Node.js建立在Chrome的V8 JavaScript引擎之上。它类似于 GitHub、RubyGems和PyPI等其他代码存储库,因为它是(非常长的)软件供应链的一部分。
“庞大”似乎不足以来形容这个软件生态系统:npm托管着超过150万个独特的包,每天为全球约1100万开发人员提供超过10亿次JavaScript包请求。
滥用Google ChromePass实用程序
除了文本JavaScript文件,npm还包含各种类型的可执行文件,例如PE、ELF和 Mach-O。ReversingLabs 研究人员在周三的一篇文章中发表了他们的发现,他们表示,在对代码存储库进行分析期间,他们发现了一个有趣的嵌入式 Windows 可执行文件:凭证窃取威胁。标记为“Win32.Infostealer.Heuristics”,它出现在两个包中:nodejs_net_server和temptesttempfile。
至少就目前而言,第一个主要威胁是nodejs_net_server。
一些细节:
nodejs_net_server:自2019 年2月首次发布以来,已发布12个版本,总共下载超过 1,300次的包。它最后一次更新是在六个月前,由某人使用“chrunlee”的名字创作。根据 ReversingLabs 的说法,chrunlee似乎也是 GitHub上的活跃开发人员,该开发人员正在开发61个存储库。
通过静态分析,研究人员在nodejs_net_server包的多个版本中发现了 Win32.Infostealer.Heuristics 文件。它的元数据显示该文件的原始名称是“a.exe”,位于“lib”文件夹内。研究人员指出,带有类似扩展名的单字母文件名会向威胁猎人发出危险信号。果然,a.exe 原来是一个名为ChromePass 的实用程序:一种用于恢复存储在Chrome 网络浏览器中的密码的合法工具。
chrunlee 通过12个版本增强了nodejs_net_server包,直到去年12月最终使用脚本下载密码窃取程序对其进行升级,开发人员将其托管在个人网站上。研究人员推测,它随后被调整为运行 TeamViewer.exe,“可能是因为作者不希望恶意软件与其网站之间存在如此明显的联系”。
分析师称,chrunlee 发布了第一个版本,“只是为了测试NPM包的发布过程”。三个月后,恶意软件制造商实施了远程shell功能,并在多个后续版本中进行了改进。然后,在2020 年4月,chrunlee对版本1.0.7 和1.0.8 中的shell功能进行了小的修改。最后,在2020 年12月,版本1.1.0更新了一个脚本来下载密码窃取工具。
第二个问题包
temptesttempfile:总下载量超过800次。令人不解的是,这个包的主页和GitHub存储库链接指向的是不存在的网页。
chrunlee的npm包之一——tempdownloadtempfile——也有不存在的链接。它的一个文件——file/test.js——实现了与nodejs_net_server包版本中发现的相同的远程shell 功能,但这个包不执行执行劫持,并且它缺乏持久性机制,使其目的有些不清晰。
有趣的开发者F-Up
的分析师在挑选nodejs_net_server代码时发现了一个开发“有趣的事实”:它的作者 chrunlee不仅编写了一个凭据窃取程序,而且还意外发布了自己存储的登录凭据,与密码窃取器紧密地联系在一起,使作者自己成为攻击的对象。
“npm库发布的版本1.1.1和1.1.2包含了在作者的个人电脑上测试ChromePass工具的结果,”研究人员观察到。”这些登录凭据被存储在’ a.txt ‘文件中,该文件与密码恢复工具’ a.exe ‘位于同一文件夹。”
此外,该文本文件有282个从chrunlee浏览器捕获的登录凭据,其中一些可能仍然有效(ReversingLabs 没有验证它们)。而且,其中一些凭据具有最蹩脚的密码(例如“111”)和用户名“admin”。
目前已删除恶意软件包
GitHub发言人声明称:在调查后,这两个软件包都被删除了。
早期的npm劫持
这不是npm第一次被有毒代码渗透。今年早些时候,npm中发布了三个恶意软件包;研究人员表示,任何被代码损坏的应用程序都可能从Discord用户那里窃取令牌和其他信息。
2018年7月,攻击者破坏了ESLint维护者的npm凭据,并向npm注册表发布了流行的“eslint-scope”和“eslint-config-eslint”软件包的恶意版本。恶意代码复制了运行 eslint-scope机器的npm凭据并将其上传给攻击者。
几个月后,也就是2018年11月,又发现了另一个恶意软件包:它依赖于流行的软件包“event-stream”的 3.3.6 版。这个名为“flatmap-stream”的恶意包包含一个加密的有效载荷,专门用于从Copay应用程序中窃取比特币。
存储库是越来越受欢迎的目标
尽管该恶意软件在npm注册表中存在超过三年的事实令人担忧,但值得庆幸的是,这也给反病毒安全公司一个标记恶意软件的机会。高级安全研究员表示,Chrome密码窃取恶意软件“进一步证实了对开源生态系统的攻击如何存在并且可能多年未被发现。”
请注意,这不仅仅是网络攻击者瞄准线中的npm。本月早些时候,研究人员偶然发现了一组渗透到PyPI中的加密矿工,也就是Python Package Index (PyPI),这是一个用 Python编程语言创建的软件代码存储库。
根据该报告,npm渗透说明开发人员过度信任第三方代码,重用库以获得快速、简单的结果,并且很少在将库纳入他们的项目之前进行深入的代码或包的安全评估。
当然,有很多代码需要弄清楚。尤其在引入第三方代码库中的代码时,使用静态代码检测工具或开源代码测试可以有效发现代码中的安全漏洞及问题,降低软件安全风险。靠完成软件包安装即算完成任务,很可能会导致意外安装恶意软件。
在这次分析中,恶意软件包使用合法的Windows密码恢复工具ChromePass,从用户的Chrome浏览器中窃取密码。威胁行为者通常依靠合法的组件和服务来实施网络攻击以逃避检测。
网络安全公司指出,软件供应链攻击正成为恶意行为者的“一种强有力的策略”,开发人员成为其组织及其客户群的关键切入点。针对开发人员的最常见的攻击媒介之一是利用公共软件包存储库。因此在使用时,及时进行代码安全检测十分重要。
由于这些存储库拥有大量托管包,它们为恶意软件潜伏提供了一个很好的藏身之处。在这些存储库中反复发现恶意包已经证明,对安全解决方案的需求日益增长,这些解决方案能够提供可靠的识别和保护以抵御这类攻击。
参读链接
https://www.woocoom.com/b021.html?id=6d516e31a6ae4346bb07855800ad74ad
https://threatpost.com/npm-package-steals-chrome-passwords/168004/
来源:freebuf.com 2021-07-23 10:01:54 by: 中科天齐软件安全中心
请登录后发表评论
注册