研究人员近日发现了一种新型供应链攻击,大量恶意软件包正在涌入各大代码仓库,这些包中隐藏着人眼无法识别的不可见代码,令传统安全防御手段几乎失效。

打开网易新闻 查看精彩图片

来自Aikido Security的研究人员于上周五披露,他们发现了151个恶意软件包,这些包于3月3日至9日期间被上传至GitHub。供应链攻击已有近十年历史,通常通过上传与主流代码库高度相似的恶意包,诱使开发者误将其引入自己的项目,部分恶意包甚至被下载数千次。

此次发现的恶意包采用了一种更新颖的手法:在几乎所有编辑器、终端和代码审查界面中,部分代码内容完全不可见。虽然大多数代码以正常、可读的形式呈现,但恶意函数和攻击载荷——通常是暴露恶意行为的关键线索——被编码为人眼不可见的Unicode字符。Aikido表示该技术首次被发现是在去年,它使得人工代码审查和其他传统防御手段几乎形同虚设。此次受攻击的代码仓库还包括NPM和Open VSX。

这些恶意包之所以难以检测,还因为其可见部分质量极高。

"这些恶意注入并不是以明显可疑的提交方式出现的,"Aikido研究人员写道,"周边的代码改动看起来十分真实:文档微调、版本更新、小幅重构和漏洞修复,风格上与目标项目高度一致。"

研究人员怀疑,他们将这一攻击组织命名为Glassworm,该组织正在利用大语言模型生成这些看似合法的软件包。"在我们目前观察到的规模下,手动为151个以上不同代码库定制代码改动根本不现实,"他们解释道。同样追踪该组织的安全公司Koi也表示,怀疑该组织在使用AI技术。

这些不可见代码借助Unicode规范中的"私用区"(Private Use Areas,有时也称为Private Use Access)来实现,该区域是Unicode为定义表情符号、旗帜等特殊符号而保留的私用字符范围。这些字符在计算机处理时可对应美国字母表中的每一个字母,但其输出对人类完全不可见。审查代码或使用静态分析工具的人只能看到空白或空行,而在JavaScript解释器中,这些字符点则会被转化为可执行代码。

这些不可见的Unicode字符早在数十年前就已被设计出来,此后逐渐被人遗忘,直到2024年才被黑客重新用于向AI引擎注入恶意提示。虽然这些文字对人类和文本扫描工具不可见,但大语言模型却能轻松读取并执行其中的恶意指令。AI引擎此后虽已设置了一些限制此类字符使用的防护措施,但这些防护仍会被周期性绕过。

此后,这种Unicode技术已被应用于更传统的恶意软件攻击中。在Aikido本次分析的其中一个恶意包中,攻击者使用不可见字符对恶意载荷进行了编码。检查代码时什么都看不到,但在JavaScript运行时,一个小型解码器会提取真实字节并将其传递给eval()函数执行。

"传递给s()函数的反引号字符串在任何查看器中看起来都是空的,但其中塞满了不可见字符,一旦解码就会生成完整的恶意载荷,"Aikido解释道,"在以往的事件中,解码后的载荷会以Solana作为传输通道获取并执行第二阶段脚本,能够窃取Token、凭证和密钥信息。"

自在GitHub上发现这批新的恶意包以来,研究人员还在npm和VS Code市场中发现了类似的包。Aikido表示,目前检测到的151个包很可能只是整个攻击活动的一小部分,因为其中许多在首次上传后已被删除。

防范供应链攻击的最佳方式,是在将任何软件包及其依赖项引入项目前仔细检查,包括核查包名是否存在拼写错误。如果对大语言模型参与生成恶意包的怀疑属实,今后恶意包可能会越来越难以与合法包区分,尤其是在不可见Unicode字符被用于编码恶意载荷的情况下。

Q&A

Q1:什么是供应链攻击?开发者为什么难以发现这类威胁?

A:供应链攻击是指攻击者上传与主流代码库名称或结构高度相似的恶意软件包,诱使开发者误将其引入项目。此次发现的新型攻击更难识别,因为恶意代码使用了人眼不可见的Unicode字符进行编码,在编辑器和代码审查工具中只显示为空白,而JavaScript解释器却能正常执行其中的恶意指令,传统静态分析手段几乎无法检测。

Q2:Glassworm攻击组织是如何利用大语言模型发动攻击的?

A:研究人员怀疑Glassworm使用大语言模型批量生成看似合法的恶意软件包。这些包的可见部分质量极高,包含文档更新、版本迭代、小幅代码重构等与正常项目一致的改动,难以通过肉眼或常规工具识别。在如此大规模的攻击中,手动制作超过151个定制化恶意包几乎不可能,因此研究人员和安全公司Koi均怀疑背后有AI技术的参与。

Q3:开发者应该如何防范使用不可见Unicode字符的恶意软件包?

A:目前最有效的防御方式是在引入任何第三方软件包前进行严格审查,包括核查包名拼写、检查代码依赖项,以及使用能够识别不可见Unicode字符的专用安全工具。由于传统静态分析工具无法检测此类隐藏代码,建议团队引入专门针对Unicode私用区字符的扫描能力,并对来源不明或新近上传的软件包保持高度警惕。