一句话总结: 2026 年,假"客户"两次想让我运行他们的代码。6 月那次得手了:测试项目把恶意软件藏在它的一个 npm 依赖里,跑了好几天,没有任何杀毒软件吭声。10 月那次我拒绝了。两次走的都是 FBI 认为与朝鲜有关的同一套路;没有人正式认定我这两次是谁干的,但它们和这套路吻合。FBI 的建议:不要在工作电脑上运行面试代码,非运行不可就用一台单独的虚拟机,并通过另一个渠道核实招聘方是谁。
6 月:测试项目本身就是恶意软件
完整经过见我之前的文章 我在 Upwork 上两次撞上朝鲜黑客的假面试。简单说:一个自由职业平台上的"客户"给了我一道编程测试。
"He sent over a Node.js test project called "Online_Store". The malicious code was hidden in one of its npm dependencies."(他发来一个叫"Online_Store"的 Node.js 测试项目。恶意代码就藏在它的一个 npm 依赖里。)
我好一阵子都没察觉:"By the time I noticed, it had been running in the background for days."(等我发现时,它已经在后台跑了好几天。)
而且什么都没有警告我:"neither macOS's built-in XProtect nor traditional antivirus made a sound, either time."(macOS 自带的 XProtect 和传统杀毒软件,两次都一声没吭。)
10 月:不开摄像头,"装一下这个会议软件"
四个月后,来了一个新"客户",这次来自一家假公司。视频通话时,"He kept his camera off"(他一直没开摄像头)。接着,"we had to switch to a meeting app called "Zeff""(我们得换用一个叫"Zeff"的会议软件),而要装它,我得"run a curl | bash command in the terminal, or download a DMG. I didn't install it."(在终端里运行一条 curl | bash 命令,或者下载一个 DMG。我没装。)
命令和地址都不会出现在视频和本文里:这里讲的是怎么识破诱饵,而不是它会装上什么。
一套已知的套路
回头看,两次尝试的形状一样:"Both attacks followed the same playbook: contact, build trust, the ask, the payload. The second time, I stopped at the payload."(两次攻击走的是同一套剧本:联系、建立信任、提出要求、投放恶意代码。第二次,我在投放恶意代码那一步停下了。)
FBI 曾对这种形状发出过警告。它的公共服务公告 PSA 240903 题为"North Korea Aggressively Targeting Crypto Industry with Well-Disguised Social Engineering Attacks"(朝鲜以伪装巧妙的社会工程攻击猛烈针对加密货币行业)。我的两次经历和它描述的模式吻合;没有人正式认定它们的来源,所以我不会说是朝鲜黑了我。
为什么瞄准的是人
币安被盗后,Aikido 的 Mackenzie Jackson 在接受 BBC 采访时描述了一种转变。用 BBC 的话说:"He says hackers have shifted from going after company infrastructure to going after the machines of the people who run it."(他说,黑客已经从攻击公司的基础设施,转向攻击运维这些设施的人所用的机器。)
至于手段:"Jackson says techniques vary, but include tricking workers into installing malware under the pretext of a job interview, or interfering with code that developers rely on."(Jackson 说,手法各不相同,但包括以求职面试为借口诱骗员工安装恶意软件,或者篡改开发者所依赖的代码。)
Jackson 描述的是常见手法,并不是在说币安是怎么被攻破的。
危险信号
FBI 把这一条列为指标之一:"Requests to conduct a "pre-employment test" or debugging exercise that involves executing non-standard or unknown Node.js packages, PyPI packages, scripts, or GitHub repositories."(要求进行"入职前测试"或调试练习,其中涉及运行非标准或来历不明的 Node.js 包、PyPI 包、脚本或 GitHub 仓库。)
从我自己的两次经历里,还能再加两条:一个始终不开摄像头、想换用一个你从没听说过的软件的"客户";以及要你把一条命令粘贴进终端的要求。
补救办法
- 不要在工作电脑上。 FBI:"Avoid taking pre-employment tests or executing code on company owned laptops or devices."(避免在公司所有的笔记本电脑或设备上参加入职前测试或运行代码。)
- 非运行不可,就隔离开。 FBI 的建议,概括来说:在一台没有连接公司的设备上用虚拟机,或者用测试方提供的设备。
- 通过另一个渠道核实。 FBI:"Develop your own unique methods to verify a contact's identity using separate unconnected communication platforms."(建立你自己独有的方法,通过互不相连的独立通信平台核实联系人的身份。)
之后我做了什么
事后,我做了一个工具:"So I built a small macOS menu bar app called Tsuba"(所以我做了一个 macOS 菜单栏小工具,叫 Tsuba)。它的思路是:"before unfamiliar code runs for the first time, it takes a look for you."(陌生代码第一次运行之前,先替你看一眼。)Tsuba 免费并且开源。它排在上面这些习惯之后,而不是取代它们。
来源
- Oliver Zhang,我在 Upwork 上两次撞上朝鲜黑客的假面试,oliverz.dev,2026 年 10 月 28 日
- FBI,PSA 240903: North Korea Aggressively Targeting Crypto Industry with Well-Disguised Social Engineering Attacks,2024 年 9 月 3 日
- BBC News,关于币安被盗的直播页面,2026 年 10 月 30 日
视频用代码制作动画,脚本在 AI 辅助下撰写;上面每个事实都对照来源核实过。示意部分:项目目录树和那个标红的依赖、"未发现威胁"的盾牌、视频通话,以及打了码的终端命令。本文讲的是风险和补救办法,不是攻击的具体步骤。视频为英文。视频用 Shotloop 制作:我做的免费 Mac 应用,用代码做科普短视频,一个镜头一个镜头地改。
