黑客的剧本:利用Python+Nuitka免杀,深度还原这场高智商的npm投毒案

admin 2026-06-30 06:39:25 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文剖析了一起npm投毒事件。攻击者伪造包名,构建JS至PowerShell再到VBS的嵌套攻击链,利用Nuitka将Python编译为pyd模块实现免杀,部署窃取浏览器密码的RAT。建议安装依赖时务必核对包名、排查异常包并严格使用锁文件。 综合评分: 81 文章分类: 供应链安全,恶意软件,免杀,漏洞预警,软文广告


cover_image

黑客的剧本:利用Python+Nuitka免杀,深度还原这场高智商的npm投毒案

原创

Hankzheng Hankzheng

技术修道场

2026年6月25日 08:00 广东

在小说阅读器读本章

去阅读

大家好,作为开发者,咱们平时写代码,“npm install” 绝对是敲得最多的命令之一。但你有没有想过,当你敲下回车的那一瞬间,拉下来的可能不是什么提升效率的神兵利器,而是一个随时准备掏空你电脑的Windows远程访问木马(RAT)

最近,国外安全团队 JFrog 曝光了一组极具隐蔽性的 npm 供应链投毒事件。攻击者伪装成前端圈极其常用的 PostCSS 相关工具,上演了一出惊天“套娃”的好戏。

今天,我就带大家深扒一下这起高智商的投毒案,看看现在的黑客为了黑进咱们的开发机,技术路径究竟卷到了什么地步。


🛑 钓鱼的艺术:碰瓷千万级下载量的“李鬼”

这次被逮住的恶意 npm 包主要有三个,目前在 npm 上甚至还能搜得到(千万别手贱去装!):

  • aes-decode-runner-pro
  • postcss-minify-selector
  • postcss-minify-selector-parser

这几个包的命名可以说是深谙“社会工程学”的精髓。特别是 postcss-minify-selector-parser,它明显是在碰瓷正牌开源库 postcss-selector-parser。要知道,正牌库的周下载量可是高达 1.27 亿次!攻击者就是赌大家在敲键盘或者复制粘贴时,会不小心拼错名字。

而且,为了显得逼真,黑客还给它们设计了“依赖链”:比如 postcss-minify-selector 宣称自己是一个 CSS 压缩器,并在 package.json 里正儿八经地把那个带毒的 parser 设置成了前置依赖。这种伪装成底层构建工具的手法,极大地降低了开发者的防备心。


🛠️ 硬核拆解:教科书级的“套娃式”执行链

不管你误装了上面哪个包,最终触发的攻击链都是一致的。这套攻击路径设计得非常精妙,主要分为四个阶段。我来给大家盘一盘它的技术实现:

第一层:JS Dropper(释放器)

一旦包被安装,埋伏在包里的 JavaScript 代码就会作为 Dropper 启动。它什么坏事都不直接干,只是将一段预写好的 PowerShell 脚本(settings.ps1)悄悄写入你的磁盘并执行。

第二层:PowerShell 与虚假域名

settings.ps1 启动后,会调用系统自带的 curl.exe。它去哪里拉取下一阶段的 Payload 呢?

好家伙,黑客专门注册了一个极具迷惑性的域名:nvidiadriver[.]net(伪装成英伟达显卡驱动)。粗心的运维如果在防火墙日志里看到这个域名,可能就直接放行了。

第三层:VBS 与 Python 运行时环境

从假英伟达域名拉下来的,是一个 ZIP 压缩包。解压后,里面竟然藏着一套完整的生态:

  1. 一个 Visual Basic 脚本 (update.vbs)
  2. 一个精简版的 Python 运行时
  3. 一个 Python 加载器 (loader.py)
  4. 一堆 .pyd 扩展模块

系统的 wscript.exe 会默默运行 update.vbs,而 VBS 的唯一任务,就是帮黑客在你的宿主机上把 Python 环境配置好,并拉起 loader.py

第四层:Nuitka 编译免杀,核心 RAT 启动

这就是整场攻击最惊艳(也最恶心)的地方。为了对抗安全人员的逆向工程和杀毒软件的静态查杀,黑客使用 Nuitka 将 Python 的核心恶意逻辑编译成了原生的 C 扩展模块(*.pyd 文件)

在 loader.py 被拉起后,这些 .pyd 模块开始各司其职,一套功能强悍的 RAT 就此跑通:

  • config.pyd

    存放硬编码常量、C2(命令与控制)服务器 URL 和注册表键名。

  • api.pyd & audiodriver.pyd

    负责和远端 C2 服务器 (95.216.92[.]207:8080) 进行 HTTP 数据包的通信以及整个木马进程的生命周期管理。

  • command.pyd

    进行环境嗅探,检测自己是不是在虚拟机(VM)里跑(反沙箱技术),并执行远程 Shell 命令。

  • auto.pyd (高危核心)

    专门绕过 Chrome 的 App-Bound Encryption (ABE,应用绑定加密) 保护!直接窃取你的 Chrome 保存的密码、Cookie 以及各类浏览器扩展里的敏感数据。

  • util.pyd

    作为 tar/gzip 压缩助手,方便打包窃取到的海量数据往回传。

点评

从 JS 到 PS1,再到 VBS,最后到 Python+Nuitka 的 Native 化。这套攻击链路可谓是层层嵌套,将“无文件落地”(Fileless)和“自带环境”(BYOE)的理念玩得炉火纯青。


🌐 别以为就这一个,近期的供应链“大瓜”还有不少

在这次 npm 投毒被曝光的同时,安全圈还监控到了另外几起堪称“离谱”的供应链攻击,这里给大家快速科普一下,权当开开眼界:

  1. 针对 Linux 甚至上 Rootkit 的 apintergrationpost

    这是一个冒充 Node.js 集成客户端的包。你敢信?它在 npm install 期间,居然会在后台直接编译一个原生的 C rootkit!它能建立三种系统持久化机制,伪装成 systemd 服务,支持无文件执行,甚至还能直播你的屏幕!这是针对 Linux 极其完整的 MYRA RAT。

  2. 硬吃 AI 热度的 @withgoogle/stitch-sdk

    碰瓷 Google 的 Stitch AI 工具。它的目标很明确:专偷程序员的“底裤”。一旦中招,你的 Claude Code 配置、Git 凭据、SSH 公钥、甚至 ~/.docker/config.json 都会被全部打包发往黑客的服务器。

  3. 把 C2 服务器挂在区块链上的朝鲜黑客

    最近针对 gonex-AI 的供应链攻击更是魔幻。疑似朝鲜的黑客组织 PolinRider,竟然把第二阶段的恶意命令,写在了波场(Tron)和币安智能链(BSC)的区块链交易哈希里!利用区块链“只读且不可篡改、全网广播”的特性,完美绕过了传统封堵 C2 IP 的防御手段。这就叫“只要有网,木马就能收到指令”,防不胜防!


🛡️ 总结与防御建议

看完这些,是不是有些后怕?现在的黑客早就过了单打独斗乱扫端口的年代了。他们知道,攻击一条拥有高权限的开发机,远比死磕线上的 WAF 划算得多

作为一个 IT 从业者,我们该怎么做?

  1. 管住手,看清名

    敲 npm install 或 pip install 之前,务必去官网核对一下包名。特别是不要把类似于 parser 这种后缀拼错了。

  2. 定期自查

    打开你的项目目录,全盘搜索一下有没有 aes-decode-runner-pro 等类似的可疑包。如果真的中招了,千万别只删包了事,请立即格式化机器,并重置所有相关的 Git、SSH 和数据库密码。

  3. 锁定依赖版本

    在团队开发中,严格使用 package-lock.json 或 yarn.lock,不要使用 ^ 或 ~ 这种宽泛的版本号,防患于未然。

技术的对抗永远没有终点,咱们能做的,就是保持敬畏,保持警惕。

如果你觉得这篇文章对你有启发,或者想让你的同事们也避开这些大坑,欢迎点赞、在看并转发到你的技术群里! 咱们下期硬核技术分析,不见不散!


免责声明:

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

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

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

本文转载自:技术修道场 Hankzheng Hankzheng《黑客的剧本:利用Python+Nuitka免杀,深度还原这场高智商的npm投毒案》

评论:0   参与:  0