傳染性面試:詐騙者如何利用虛假工作邀約部署惡意軟體

開發者的現代求職過程通常發生在私訊(DMs)中。雖然 LinkedIn 是建立人脈的金礦,但它也已成為複雜社交工程攻擊的主要媒介。開發者 ashishb 最近分享的一個案例揭示了一個令人不安的趨勢:詐騙者冒充招聘人員或創辦人,以「技術面試」或「專案評估」為藉口,誘騙技術專家在他們的本地機器上安裝惡意軟體。

這不僅僅是一個簡單的釣魚連結;這是一個多階段的攻擊,利用了開發者對其工具的信任——特別是 GitHub、VS Code 和 npm 生態系統。

攻擊剖析:兩個案例研究

在兩個獨立的事件中,作者在 LinkedIn 上被接觸,要求擔任技術顧問。兩者都遵循幾乎相同的劇本:專業的接觸、簡短的介紹性對話以建立信任,然後要求審查程式碼庫。

案例 1:VS Code 與 npm 生命週期觸發器

在第一個案例中,攻擊者冒充一名歐洲軟體工程師。在簡短的會議並審查了 Figma mocks 之後,「招聘經理」敦促候選人複製(clone)一個 GitHub 儲存庫,並透過 VS Code 分享螢幕。

危險在於該儲存庫的配置。分析顯示了四個不同的攻擊向量:

  1. VS Code 自動執行: .vscode/tasks.json 檔案被配置了 runOn: folderOpen 觸發器。一旦在 VS Code 中打開該資料夾,它就會執行一個 curl/wget 指令來從 Vercel 託管的 C2(指令與控制)伺服器下載並執行 shell script。
  2. 環境變數外洩: 伺服器程式碼包含一個函數,在啟動時會解碼 C2 URL 並將整個 process.env(包括 AWS keys、Stripe secrets 和資料庫 URIs)POST 到攻擊者那裡。
  3. 遠端程式碼執行 (RCE): 同種伺服器端邏輯將來自 C2 伺服器的 HTTP 回應直接導向 new Function() 調用,允許攻擊者在受害者的機器上執行任意程式碼。
  4. npm 生命週期鉤子 (Lifecycle Hooks): package.json 包含了 prepare 腳本。因為 npm install 會自動觸發 prepare 腳本,因此當開發者嘗試安裝依賴項時,惡意軟體就會被啟動——甚至在應用程式啟動之前。

案例 2:混淆後的後門

第二個攻擊涉及一個用於所謂房地產 MVP 的 Bitbucket 儲存庫。這次攻擊更為隱蔽,將其酬載(payload)隱藏在錯誤處理程序中。

  • 酬載: 一個名為 errorHandler.js 的檔案使用了 Function.constructor 來執行傳遞給它的字串。
  • 觸發器: 惡意軟體在驗證器中間件(validator middleware)的模組頂層被觸發。這意味著只要伺服器啟動並引用了該中間件,後門就會啟動。
  • 偽裝: 攻擊者使用 config.env.example 檔案來儲存 C2 URL 和秘密標頭(secret headers)。透過 dotenv 明確地載入這個「範例」檔案,即使使用者尚未建立真實的 .env 檔案,惡意軟體仍能正常運作。

更大的背景:國家級威脅

這些攻擊反映了已知進階持續性威脅(APT)組織使用的戰術。作者指出這與以北韓為基地的詐騙者(例如 Lazarus Group)有相似之處,他們先前曾使用社交工程來入侵開發者並從 DeFi 協議中竊取數億美元。透過瞄準「技術顧問」角色,攻擊者可以接觸到高價值目標,這些人很可能擁有存取敏感生產環境或加密金鑰的權限。

如何保護自己

對於開發者來說,當面對未知的儲存庫時,「信任但要驗證」的模型是不夠的。以下是需要留意的紅旗信號與防禦策略:

需留意的紅旗信號

  • 立即要求存取程式碼: 在簽署 NDA 之前,或在您正式加入組織之前,要對任何要求您在這些階段分享儲存庫的人保持警惕。
  • 壓力迫使在本地執行: 對於那些在視訊通話期間堅持要求您在個人機器上 clone 一個 repo 並執行 npm installnpm start 的面試官,要保持懷疑。
  • Web3 「顧問」角色: 正如社群所指出的,目前「Web3 技術顧問」角色的未邀約邀約是高風險信號。

技術防禦措施

  • 避免本地執行: 絕不要在您的主機機器上從不受信任的來源執行 npm install 或執行二進位檔案。
  • 使用雲端 IDE: GitHub Codespaces 或 Gitpod 等工具可以提供一個可拋棄、隔離的環境,來保護您的本地檔案系統和環境變數免於受損。
  • 容器化: 在 Docker 容器或專用的沙盒中執行不受信任的程式碼。這能確保如果一個程序嘗試外洩 process.env env 變數,它所能看到的僅限於容器的有限環境,而非您的個人秘密。
  • 使用虛擬機: 對於高風險的評估,租用雲端上的可拋棄式 VM,以確保與您的家中使用網路完全隔離。

"對於開發者來說,當面對未知的儲存庫的時,"No one puts out their code repository publicly unless it is meant to be open-source... No one shares their private code repository without an NDA."

透過將每個未邀約的儲存庫視為潛在的惡意軟體傳遞媒介,開發者可以保護自己的機器和所持有的秘密。

Sources