一场失败的国家级攻击剖析:PinpinRAT 分析

一场失败的国家级攻击剖析:PinpinRAT 分析

一项针对开发者的复杂网络钓鱼活动已被曝光,该活动利用多阶段投放器(dropper)来安装名为 PinpinRAT 的远程访问木马(RAT)。此次攻击利用了虚假面试骗局,攻击者伪装成风险投资家,诱导开发者克隆恶意仓库并运行构建命令,从而触发一系列经过混淆处理的有效载荷,绕过标准的杀毒软件检测。

攻击向量:社会工程学

攻击始于高度针对性的社会工程学手段。攻击者使用伪造的人设——伪装成已倒闭或虚假的风险投资公司(例如 "Lua Ventures")的代表——并通过电子邮件和 LinkedIn 联系开发者。

为了建立信任,攻击者:

  • 使用看起来很真实的 LinkedIn 个人资料,拥有令人印象深刻但模糊的资历。
  • 提及早期阶段的公司,以证明咨询工作的必要性。
  • 与目标进行实际的 语音通话,通常以 "正在旅行" 为借口,来解释口音或摄像头使用上的不一致。
  • 根据开发者的公开贡献进行针对性攻击,例如在 crates.io 上发布的软件包。

PinpinRAT 投放器的技术分解

恶意有效载荷通过一个以渡轮购票应用程序 "Ticket Harbor" 为主题的 TypeScript 仓库进行交付。感染链设计得非常安静且隐蔽,利用了多层混淆技术:

1. 初始执行

当开发者运行 typecheck 或构建命令时,陷阱就会触发。该过程遵循以下序列:

  • Postinstall Hooks: 四个独立的 postinstall 钩子会执行 patch-package。其中一个钩子会在补丁文件上运行 git update-index --skip-worktree,这可以防止修改后的文件出现在 git status 中。
  • Payload Injection: 一个名为 typescript+5.9.2.patch 的文件会将一个自执行的、经过 XOR 解密的 base64 blob 注入到 typescript.js_tsc.js 中。该存根(stub)避免使用 eval() 以绕过恶意软件检测。

2. 第二阶段加载

初始存根会读取附加在图像文件(operators/3.png)中的隐藏数据块。该数据包含一个嵌入在自定义 wAsm 数据块中的小型 WebAssembly (WASM) 存根。随后,WASM 存根会产生一个分离的、静默的 Node.js 进程,该进程携带一个 1.68 MB 的经过混淆的第二阶段有效载荷。

3. 持久化与清理

该恶意软件采用了三层清理机制以避免检测:

  • git skip-worktree 技巧隐藏了补丁。
  • 投放器会重写补丁文件,在首次执行后删除其自身注入的行。
  • 第二阶段的临时目录在执行后会自动删除。

PinpinRAT 功能

PinpinRAT 是一款功能齐全的远程访问木马。它使用 RSA-2048 进行密钥交换,并使用 AES-256-CBC 进行会话加密,确保所有流量都通过 HMAC-SHA256 完整性标签进行加密。

启动时,RAT 会收集以下主机指纹信息:

  • 主网卡和所有网络接口的 IP 地址。
  • 用户名、主机名以及操作系统详情(版本、平台、架构)。
  • 进程 PID 和完整的 process.argv
  • Node.js 版本。

攻击者可以向受感染的主机发出以下命令:

  • env: 渗出所有环境变量。
  • upload: 读取并渗出任意文件。
  • download: 将攻击者提供的字节写入任何路径。
  • spawn: 使用 shell 扩展执行任意进程。
  • ls, cd, pwd, cp, mv: 完整的系统文件操作。
  • dns: 将主机作为任意名称的解析器(可能用于 DNS 隧道技术)。
  • dismantle: 自我移除恶意软件。

失效指标 (IoCs)

如果怀疑系统已被感染,应检查以下指标:

  • C2 Server: 89.124.107.161:80
  • Windows Scheduled Task: PinpinWrappedJs
  • macOS Process Masquerade: com.apple.WebKit.Networking
  • Environment Variables: NODT_PAYLOAD_PATH, NODT_PAYLOAD_ARGS
  • PNG Chunk Guard: WASMPACK (wAsm)
  • Anchor Strings: 12ff4b51, ticket-harbor-tsc-shim-anchor (在 typescript.js 中发现)
  • Artifact Directories:
    • macOS: ~/Library/Caches/runtime-cache/.cache-<randomhex>/
    • Linux: /tmp/.cache-<randomhex>/
    • Windows: %TEMP%\.cache-<randomhex>\

专家分析与缓解措施

社区讨论表明,这种攻击模式与 Lazarus Group 非常相似,极具特征,该组织以通过 LinkedIn 和面试骗局针对开发者进行攻击而闻名。

为了降低这些风险,开发者应采取以下安全实践:

  • 使用临时环境: 绝不要在个人或公司机器上运行来自面试或外部来源的不可信代码。请使用可丢弃的虚拟机 (VM) 或沙盒容器。
  • 使用受限运行时: 利用 Deno 的网络拦截/白名单功能,或使用 Bun 的 --ignore-scripts 标志来防止恶意 postinstall 钩子执行。
  • 使用供应链工具: 使用像 pnpm 这样在供应链安全方面取得进展的包管理器。
  • 对 LLM 生成的内容保持警惕: 请意识到,攻击者现在正利用 LLM 来创建极具说服力、听起来很专业的网络钓鱼邮件和 LinkedIn 个人资料。

Sources