朝鲜黑客PolinRider攻击:108个恶意软件包入侵四大开源生态

导语:安全研究人员近日披露,与朝鲜政府有关联的APT组织正在加大供应链攻击力度,已向npm、Packagist、Go和Chrome Web Store四大主流开源平台投放共计108个恶意软件包和浏览器扩展。这场被命名为”PolinRider”的攻击活动仍在持续,企业和开发者应立即展开自查。


一、攻击概况

1.1 活动背景

PolinRider攻击活动最早由OpenSourceMalware团队于2026年3月首次发现并命名,被认为是朝鲜”Contagious Interview”(传染性面试)行动的最新阶段。该行动自2023年起活跃,攻击者伪装成招聘人员或协作者,在LinkedIn、GitHub等平台寻找软件开发者或加密货币从业者,通过虚假的职位面试和评估诱骗目标执行恶意代码。

1.2 规模统计

根据Socket安全研究人员的分析,本次PolinRider活动中发现的162个恶意释放物对应108个独立软件包和扩展,具体分布如下:

  • npm库:19个
  • Composer包(PHP):10个
  • Go模块:61个
  • Chrome浏览器扩展:1个

截至2026年4月11日,该活动已入侵1951个公开GitHub仓库,涉及1047个独立所有者。

PolinRider攻击规模统计

二、攻击技术分析

2.1 初始入侵手段

PolinRider攻击链的起点并非传统的凭证盗取。安全研究人员指出:”威胁行为者并未使用窃取的GitHub凭证”,而是通过以下路径入侵开发者环境:

  1. 恶意VS Code扩展或npm包:攻击者诱导开发者安装带有恶意代码的扩展或软件包
  2. 维护者账户接管:通过过期域名接管或其他账户恢复路径劫持合法维护者账户
  3. 恶意版本发布:在被攻陷的账户下发布感染版本

2.2 恶意代码注入机制

一旦恶意代码执行,攻击者会搜索受害者计算机中的特定配置文件并注入恶意JavaScript代码,目标文件包括:

  • postcss.config.mjs
  • tailwind.config.js
  • eslint.config.mjs
  • next.config.mjs
  • babel.config.js
  • app.js

攻击同时使用Windows批处理脚本静默修改最后一次提交记录,使其看起来像是原始作者所为,并可能存在针对Linux和macOS的类似Git历史重写工具。

2.3 隐蔽传输与持久化

核心攻击手法包括:

  • Git历史重写:通过force push和反追溯提交(anti-dated commits)使恶意变更看起来更早、更不可疑
  • 伪装隐藏:利用空白字符填充或伪造.woff2字体文件隐藏恶意JavaScript载荷
  • 开发者工具触发:通过VS Code任务文件中的"runOn: 'folderOpen'"选项,在IDE打开工作区时自动执行任意代码

2.4 区块链架构C2

最新的攻击载荷作为JavaScript恶意加载器运行,连接区块链基础设施获取加密的第二阶段载荷,包括:

  • TRON网络
  • Aptos网络
  • BNB Smart Chain

最终载荷为DEV#POPPER RAT(远程访问木马)和OmniStealer(信息窃取木马),专门用于窃取开发者凭证和敏感数据。


三、MITRE ATT&CK框架映射

根据MITRE ATT&CK v14框架,本次攻击活动涉及以下关键技术手段:

战术阶段技术ID技术名称
初始访问T1195.001供应链妥协:软件供应链攻击
执行T1059.007命令和脚本解释器:JavaScript
执行T1603通过开发者工具执行
持久化T1548.001滥用提升权限:VS Code任务
防御规避T1070.006主机修改:Git历史修改
防御规避T1036.007伪装:合法名称或功能滥用
凭证访问T1552.001不安全凭证:明文凭证
数据窃取T1041通过C2通道窃取

四、蓝队检测与防御建议

4.1 紧急排查清单

对于可能受影响的企业和安全团队,建议立即执行以下排查操作:

开发者工作站端:

  • 检查已安装的npm、Composer、Go包列表,核实来源可信性
  • 审计.vscode/tasks.json文件,查找可疑的自动执行任务配置
  • 检查postcss.config.mjstailwind.config.jseslint.config.mjs等文件的完整性
  • 审查Git提交历史,识别异常变更

GitHub仓库端:

  • 审查仓库活动日志和发布元数据
  • 检查是否存在异常的force push操作
  • 识别修改过配置文件的可疑提交
  • 特别注意.vscode/tasks.jsonconfig.jsvite.config.jseslint.config.js等文件

4.2 事件响应流程

已安装相关恶意包的处置步骤:

  1. 隔离环境:立即将受感染工作区从网络中断开
  2. 泄露排查:从干净机器修改所有已暴露的密钥和凭证
  3. 清除感染:移除受影响版本,从已知良好状态的lockfile重新构建
  4. 全面审计:对工作站和仓库进行深度排查,识别隐藏的执行路径或可疑提交

4.3 防御纵深建设

预防层面:

  • 启用GitHub的分支保护规则,限制force push权限
  • 对关键配置文件实施代码签名或完整性校验
  • 审查所有自动化构建流程的触发条件

检测层面:

  • 部署依赖包安全扫描工具(如Socket、Snyk)
  • 监控VS Code等IDE的文件夹打开事件
  • 审计npm/Composer/Go包的发布源头和版本变更

响应层面:

  • 建立供应链安全事件响应预案
  • 定期开展红蓝对抗演练,模拟供应链攻击场景
  • 保持威胁情报订阅,及时获取最新攻击活动通报

五、总结

PolinRider攻击活动的持续升级再次证明,供应链攻击已成为国家级APT组织的重要突破口。对于蓝队而言,这提醒我们几个关键点:

第一,信任边界正在扩大。 现代软件开发高度依赖开源生态,攻击者正是利用这一特点,将恶意代码植入看似正常的软件包中。每一个第三方依赖都可能成为攻击跳板。

第二,开发者工作站是核心资产。 攻击者目标明确——通过入侵开发者环境获取高价值凭证和代码资产。工作站的安全与生产环境安全同等重要。

第三,假设已被攻破。 正如此次事件所示,Git历史可以被重写,提交记录可以被伪造。防御者不应仅依赖日志和提交历史,需结合行为分析和完整性校验进行判断。

面对持续演进的供应链威胁,安全运营团队应将第三方依赖纳入持续监控范围,建立快速响应机制,从预防、检测、响应三个维度构建纵深防御体系。


参考资料

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容