在如今的敏捷开发过程中,第三方代码库已经成为每个企业及开发人员不可或缺的一部分。但这也意味着,在引入第三方代码的过程中,很可能无意间将存在安全漏洞的代码直接置入开发产品当中,增加软件供应链风险。
网络安全研究人员已经发现了多达11个恶意Python包,它们从Python包索引(PyPI)存储库中累计下载次数超过41,000次,可以被利用来窃取Discord访问令牌、密码,甚至阶段依赖混淆攻击。
在DevOps公司JFrog披露之后,Python包已从存储库中删除:
importantpackage / important-package
pptest
ipboards
owlmoon
DiscordSafety
trrfab
10Cent10 / 10Cent11
yandex-yt
Yiffparty
检测规避技术
其中两个包(“importantpackage”、“10Cent10”和它们的变体)在被攻破的机器上获得了一个反向shell,使攻击者能够完全控制系统。另外两个包“ipboard”和“trrfab”伪装成合法的依赖项,旨在利用一种称为依赖项混淆或名称空间混淆的技术自动导入。
与域名抢注攻击不同,恶意行为者故意发布带有拼写错误的流行变体名称的包,依赖混淆通过向公共存储库上传大量有毒组件,这些组件的名称与合法的内部私有包相同,但具有更高的版本,有效地迫使目标的包管理器下载并安装恶意模块。
依赖“importantpackage”也因其新颖的过滤机制而脱颖而出,以逃避基于网络的检测,其中涉及使用快速的内容分发网络(CDN)掩盖其与攻击者控制的服务器的通信作为与pypi[.]org的通信。
恶意代码“导致一个HTTPS请求被发送到pypi.python[.org(这与对PyPI的合法请求难以区分),随后CDN将其作为一个HTTP请求重新路由到[命令和控制]服务器,”JFrog的研究人员Andrey Polkovnychenko和shacharmenashe在周四发表的一份报告中解释道。
最后,“ipboards”和第五个名为“pptest”的包都被发现使用DNS隧道作为数据抽取方法,依靠DNS请求作为受害者机器和远程服务器之间的通信通道。JFrog表示,这是首次在上传至PyPI的恶意软件中发现这种技术。
针对流行的代码注册表(如NPM)、JavaScript注册表、PyPI和RubyGems)的努力已经变得司空见惯,成为一系列攻击的新前沿。
JFrog的高级研究主管Menashe说:“包管理器是无意安装恶意代码的一个日益增长和强大的载体,而且[……]攻击者的方法越来越复杂。”“这些恶意软件包中使用的先进逃避技术,如新颖的外渗或DNS隧道,表明了一个令人不安的趋势,即攻击者对开源软件的攻击正变得越来越隐秘。”
事实上,在至少三个NPM开发人员账户被恶意分子入侵,将恶意代码插入流行包“ua-parser-js”、“coa”和“rc”之后,本周早些时候,GitHub概述了加强NPM注册表安全性的计划,要求从2022年第一季度开始对维护人员和管理员进行双因素认证(2FA)。
软件开发和版本控制平台还透露,它解决了NPM注册表中的多个缺陷,这些缺陷可能会泄露私有包的名称,并允许攻击者绕过身份验证,在不需要任何授权的情况下发布任何包的版本。
在像PyPI这样的流行软件库中不断发现恶意软件包,这是一个令人担忧的趋势,可能导致广泛的供应链攻击。建议开发人员在从公共存储库下载软件包时要格外小心。
攻击者能够利用简单的混淆技术来引入恶意软件,这意味着开发人员必须时刻关注代码安全并保持警惕。这是一个系统性的威胁,需要引起软件存储库的维护人员和开发人员等多个方面的积极解决及重视。
对于开发人员来说,诸如验证库签名和使用自动应用程序安全检测工具如静态代码安全检测工具、SCA等扫描项目中可疑代码,及时检测并修复代码缺陷及安全漏洞,应该是任何CI/CD管道的重要组成部分。当发现恶意代码时,诸如此类的自动化工具可以发出警报,以快速定位及修正缺陷。
关键词标签:第三方软件安全 源代码安全 静态代码检测 恶意代码
参读链接: