近期,安全社区发现了一起针对开发者生态系统的供应链攻击事件。攻击者通过篡改上游 GitHub 仓库,将恶意载荷潜入广受欢迎的 Laravel 开发工具包中,试图在用户安装依赖时同步植入后门。从我们的应急响应经验来看,攻击者利用了多语言开发环境(如 PHP 与 JavaScript 混用)中不同包管理工具的兼容性漏洞,这种“跨语言攻击链”往往容易被安全审计所忽略。
攻击链深度解析
本次攻击的核心逻辑在于利用了包管理工具的生命周期钩子(Lifecycle Scripts)。攻击者并未直接修改 PHP 项目中常见的 composer.json,而是巧妙地将恶意脚本隐藏在 package.json 中。由于开发者在进行依赖审计时,往往将重心放在 PHP 相关的元数据上,从而忽视了伴随安装的 Node.js 脚本。
当开发者执行安装命令时,恶意脚本会被触发并执行以下动作:
- 从攻击者控制的 GitHub Releases 仓库下载二进制文件。
- 将文件保存为 /tmp/.sshd,这一环节是很多企业容易忽视的,攻击者通过伪装成 SSH 相关进程名,试图在系统排查时利用“合法进程名”来欺骗管理员。
- 修改执行权限并将其置于后台运行,同时通过抑制错误输出(Suppressing Errors)来隐藏执行痕迹。
混淆与伪装手法
攻击者不仅在包安装阶段进行投毒,还将同样的逻辑嵌入到 GitHub Actions 工作流中,伪装成“依赖缓存同步”等常规任务。这种双重感染策略确保了无论是在本地开发环境还是自动化的 CI/CD 流水线中,恶意代码都能获得执行机会。
特别需要注意的是,攻击者利用了版本控制中的“分支跟踪”(如 dev-main 或 dev-master)机制。由于这些版本标签是动态指向仓库最新状态的,攻击者可以在不修改版本号的情况下多次植入或移除代码,这为溯源和清理带来了极大的困难。
安全建议与 Solar 经验分享
类似攻击近年来明显增加,针对复杂的开源供应链,我们建议企业采取以下加固措施:
首先,严格审查依赖项的安装脚本。在生产环境部署中,应尽量避免使用 dev-main 等动态分支版本,转而使用锁定的特定版本号(Hash 或 Tag)。
其次,强化 CI/CD 的安全管控。不仅要审计代码逻辑,更要审计流水线中的构建脚本,严禁不明来源的 curl 下载行为,并对构建环境的网络出口进行严格限制,防止恶意二进制文件从外部下载。
最后,建立跨语言的防御视角。在包含 PHP、Node.js、Python 等多种技术的混合开发项目中,不能仅局限于单一包管理器的安全扫描,必须对整个项目目录下的所有配置文件进行联动审计。
如果您想了解勒索病毒的最新发展趋势,或在实际业务中遇到类似安全事件,欢迎关注“Solar应急响应团队”。
全国热线:400-613-6816
官网:www.solarsecurity.cn / www.sierting.com
