跳到主要內容
文章

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

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

發布於
閱讀
約 4 分鐘
標籤
  • security
  • upwork
  • malware
  • macos
  • contagious-interview
目錄
  1. 第一次:2026 年 6 月
  2. 第二次:2026 年 10 月
  3. 事後回頭看
  4. 用 Claude Code 當鑑識調查員
  5. 損失
  6. 我做了一個工具:Tsuba

簡單說: 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」(傳染性面試)攻擊,手法就是假徵才、假面試:先用一個看起來很正常的工作機會建立信任,再讓你親手執行他們準備好的程式碼。

兩次攻擊走的是同一套劇本:聯繫、建立信任、提出要求、投放惡意程式。第二次我在投放惡意程式那一步停下了。
兩次攻擊走的是同一套劇本:聯繫、建立信任、提出要求、投放惡意程式。第二次我在投放惡意程式那一步停下了。

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

用 Claude Code 當鑑識調查員

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

損失

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

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

我做了一個工具:Tsuba

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

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

陌生的程式碼執行之前,先經過 Tsuba 的四道檢查,再決定放行、提醒還是攔下。
陌生的程式碼執行之前,先經過 Tsuba 的四道檢查,再決定放行、提醒還是攔下。

拿我遇到的兩次來說:

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

Tsuba 免費,而且開源(GitHub,Apache 2.0 授權)。Apple 晶片和 Intel 兩種版本的下載,以及更多介紹,都在 Tsuba 的產品頁。如果你也在 Upwork 這類平台上接案,或者常常要跑別人傳來的程式碼,可以裝一個試試。

追蹤我

我會持續分享正在做的專案、實驗和心得。

YouTube 上發影片,X 上發短筆記。這裡的每篇文章都會連結到兩邊。

YouTube