# 我在 Upwork 上兩次撞上北韓駭客的假面試

> 一個藏著惡意 npm 套件的測試專案，一個要用 curl | bash 安裝的假會議軟體。兩次 Contagious Interview 攻擊的完整經過，我怎麼用 Claude Code 鑑識，以及為此做的工具 Tsuba。

- URL: https://oliverz.dev/zh-hant/blog/upwork-contagious-interview
- Author: Oliver Zhang (https://oliverz.dev)
- Language: zh-Hant
- Published: 2026-10-28
- Tags: security, upwork, malware, macos, contagious-interview

> **簡單說：** Contagious Interview 是北韓駭客的假徵才攻擊。他們冒充客戶或招募人員，在 Upwork、LinkedIn 這類平台上找開發者，最後讓你親手執行一個「測試專案」，或者安裝一個「會議軟體」。辨識它只要記住一條：任何徵才流程要你在自己電腦上執行陌生的程式碼，都先停下來。如果已經執行了，馬上斷網，排查背景程序和可疑資料夾，更改密碼，並在重要網站上登出所有已登入的裝置。

## 第一次：2026 年 6 月

一個自稱烏克蘭人的客戶在 Upwork 上找到我，說手上有個專案想請我幫忙。他傳來一個 Node.js 測試專案，叫「Online_Store」。

惡意程式碼就藏在 npm 相依套件裡。具體是哪個套件我已經記不太清楚了，印象中是一個和 Tailwind 有關的套件。專案一跑起來，我的電腦上就被悄悄建立了一個 `~/.node_modules` 資料夾，裡面放著 axios 和 socket.io-client，專門用來往外偷資料。

等我察覺時，它已經在背景跑了好幾天。說起來也是運氣：我一個英國同事碰上了一模一樣的事，聽他說完，我才意識到自己可能也中招了。

## 第二次：2026 年 10 月

這次對方自稱是立陶宛人，代表一家叫 Veyron Capital 的資本公司（veyron[.]capital），在 Upwork 上一口氣發了好幾個 Web3 職缺。

他先私訊我，然後約了一次 Upwork 視訊會議。會上他沒開鏡頭，而且全程用中文跟我聊。聊完他要我加他的 Telegram，接著把我拉進一個群組，說要我寫一個 Web3 demo，再在會議上展示給團隊看。

到了展示的時候，他們說有同事在外地出差，用不了平常的會議工具，得換一個叫「Zeff」的會議軟體（zeff[.]app）。群組裡另一個人負責「教」我安裝，給了兩種方式：在終端機裡執行一道 `curl | bash` 指令，或者下載一個 DMG。

這次我沒裝。吃過一次虧，看到「為了開個會，要在終端機裡跑一道來路不明的指令」，我馬上就意識到這又是同一套手法。

## 事後回頭看

這兩次都是北韓駭客的「Contagious Interview」（傳染性面試）攻擊，手法就是假徵才、假面試：先用一個看起來很正常的工作機會建立信任，再讓你親手執行他們準備好的程式碼。

![兩次攻擊走的是同一套劇本：聯繫、建立信任、提出要求、投放惡意程式。第二次我在投放惡意程式那一步停下了。](https://oliverz.dev/posts/upwork-contagious-interview/attack-flow.zh.svg?v=e6bd3191)

更讓我在意的是，macOS 內建的 XProtect 和傳統防毒軟體，兩次都毫無反應。

## 用 Claude Code 當鑑識調查員

第一次中招後，真正把問題挖出來的是 Claude Code。我用的是 Fable 5（Max），給它開放權限，讓它像調查員一樣把整顆磁碟掃一遍，再排查背景程序。它很快就發現，那個惡意程式還在執行，接著又帶著我一步步完成補救。

## 損失

萬幸，這次沒有損失。這類惡意程式最想偷的是加密貨幣錢包，而我電腦上一個錢包都沒有；常用的網站帳號我也都開了兩步驟驗證，就算密碼被偷走，對方也登不進去。

不過有一點要提醒：這類程式通常還會偷瀏覽器裡儲存的登入狀態（cookie）。拿到它，對方可以繞過兩步驟驗證直接登入你的帳號。所以如果你中招了，除了更改密碼，也記得在各個重要網站上把所有已登入的裝置都登出一遍。

## 我做了一個工具：Tsuba

經歷了這兩次，我看出了問題在哪：這類攻擊每次換個包裝，用的又都是 node、curl、bash 這些再普通不過的工具，傳統防毒軟體根本不會覺得它們可疑。

所以我做了一個 macOS 選單列小工具，叫 Tsuba（鍔，日本刀上護手的那塊鐵）。它的想法很簡單：陌生的程式碼第一次執行之前，先替你看一眼。它會分析這段程式碼要做什麼、從哪裡來、像不像已知的攻擊手法，然後決定放行、提醒還是攔下。

![陌生的程式碼執行之前，先經過 Tsuba 的四道檢查，再決定放行、提醒還是攔下。](https://oliverz.dev/posts/upwork-contagious-interview/tsuba-check.zh.svg?v=822632bc)

拿我遇到的兩次來說：

- **第一次那種假面試專案**：你執行 `npm install` 或 `npm start` 之前，它會查相依套件在不在公開的惡意套件名單上，再檢查專案原始碼裡有沒有藏起來的程式碼、寫死的遠端位址，或者偷讀錢包和密碼庫的操作。拿不準的專案，還可以先放進沙箱裡試跑，看它實際會做什麼。
- **第二次那種假會議軟體**：碰到 `curl | bash`，它會先把遠端腳本下載下來但不執行，檢查它到底要做什麼；下載的 DMG 也會檢查簽署、公證和來源。

Tsuba 免費，而且開源（[GitHub](https://github.com/chihyungchang/Tsuba)，Apache 2.0 授權）。Apple 晶片和 Intel 兩種版本的下載，以及更多介紹，都在 [Tsuba 的產品頁](https://oliverz.dev/zh-hant/products/tsuba)。如果你也在 Upwork 這類平台上接案，或者常常要跑別人傳來的程式碼，可以裝一個試試。
