随着2025年软件开发生态的日益复杂和依赖多样化,软件供应链安全问题成为行业聚焦的核心。恶意攻击者通过开源包管理器如NPM和PyPI上传带有恶意代码的包,借助CI/CD自动化流程快速渗透企业开发流,给安全防护带来了巨大挑战。此次袭击不仅反映出攻击技术手段的不断进化,也折射出攻击者在跨生态系统复制战术的趋势。对这些演变趋势的了解,对于保持软件供应链的安全性至关重要。以Xygeni安全团队最近发现的两起典型案例为引,本文对2025年软件供应链攻击的技术细节、攻击流程与防御策略做出全面解读。Xygeni基于其Malware Early Warning(MEW)工具的威胁情报,刺探出PyPI上的恶意包graphalgo与NPM上的express-cookie-parser两者具有高度相似的攻击架构,展现出攻击者跨注册表复用方法的明显特征。
两者均通过“冒名顶替”策略,将自身伪装成广泛使用且可信赖的开源包,通过微妙更名和README文件模仿获取用户信任。例如,PyPI上的graphalgo包装成一个图算法工具,试图替代被重命名的真实项目graphdict;NPM上的express-cookie-parser包则模仿著名的cookie-parser包,甚至复制了其README.md文件。在代码层面,两者均采用了代码混淆手法以逃避静态分析,使用了基于ZLib压缩和Base64编码的简单层级混淆,明显意图隐藏本质恶意行为。这种混淆不仅阻碍了初步审查,也加大了自动化检测的难度。此外,恶意包充当初始“投放器”,从共享的远程文件服务器拉取第二阶段恶意载荷。该远程种子文件位于一个GitHub仓库的环境变量示例文件中,内容表面上仅为JWT密钥和端口信息,实则成为动态生成C2服务器域名的关键依据。
利用基于SHA256哈希的域名生成算法(DGA),攻击者实现了命令与控制服务器的动态变化,极大地规避了传统的黑名单拦截机制。NPM版本中还嵌入了固定哈希值“496AAC7E”作为DGA逻辑参数,体现了攻击配置的复杂度。为了实现持久化,恶意程序将启动脚本分别部署在多平台Google Chrome用户数据目录的Scripts子目录下。Python版本对应startup.py,JavaScript版本对应startup.js,这些启动脚本作为恶意行为执行的根基,对系统具有隐蔽的长期影响力。执行完成后,恶意包会自动清理自身痕迹,删除初始的混淆代码文件,甚至修改正常的包文件如__init__.py和index.js,去除涉及恶意载荷的引用,以逃避进一步侦查。针对这些不断进化的威胁,开发者应采取多层面防护策略。
首先是依赖审查机制的加强,主动识别依赖库中潜在的恶意包,及时移除已知风险组件,如graphalgo和express-cookie-parser。其次,保障系统环境整洁,通过全面扫描并检查Chrome用户数据目录中是否存在异常启动脚本,防范隐蔽的持久化攻击。安全工具的引入是关键,集成如Xygeni MEW等先进的静态和动态分析工具,可以大幅提升恶意包的检测率,同时结合软件组成分析(SCA)和秘密管理解决方案,形成环环相扣的防御闭环。原则上,开发环境应遵循最小权限准则,限制有害代码扩散的能力,在网络层面加强流量监控,及时捕获异常的C2流量,尤其是基于DGA算法动态生成的域名连接请求。持续的安全培训和供应链风险意识培养亦不可忽视,员工和开发者应了解冒名顶替、代码混淆、远程载荷执行等关键攻击手法,提升预警和应对能力。通过深入分析graphalgo和express-cookie-parser这两个典型案例,不难看出,2025年的软件供应链攻击愈发智能和隐蔽,跨生态跨平台的攻击链条更具协同效应。
恶意包不仅依赖技术创新,更善于利用开发者的信任和自动化流程的便利性实施攻击。对此,安全领域需要不断革新检测技术,强化社区合作,提升响应效率,构筑从代码仓库到生产环境的全链条防护。作为软件开发和安全从业者,必须紧跟攻击演变,重新审视依赖管理与构建流水线安全,打造更为韧性的供应链安全体系,为数字时代的软件供应生态保驾护航。