面試也不能掉以輕心的資安風險

面試作業也可能是攻擊入口:一次 Node/React 測試倉庫的伺服端惡意載入與防護重點

面試也不能掉以輕心的資安風險
Photo by Jefferson Santos / Unsplash

這是一個冒充區塊鏈公司面試、以程式碼測試為誘餌的精密釣魚攻擊案例與防護建議。

作者描述收到 LinkedIn 上看似可信的邀請:對方自稱 Symfa 的高階區塊鏈主管,提供「BestCity」專案的 React/Node 30 分鐘測試與 Bitbucket 倉庫。因趕時間,作者只做了程式清理與 Docker 設定,準備啟動時臨時用 AI 檢查,發現 server/controllers/userController.js 內嵌可疑自執行程式,透過位元陣列還原出遠端 URL,以 axios 下載內容並用 new Function 在伺服器權限下執行。該 URL 一開始可取回惡意 payload,24 小時後自動失效以滅跡;作者以 VirusTotal 行為分析驗證其為竊取檔案、密碼、加密錢包等的惡意程式,並保留分析與倉庫連結:VirusTotal 行為分析 ↗Bitbucket 倉庫 ↗

攻擊的關鍵要素:

  • 以「真公司、真人設」偽裝:完整 LinkedIn 履歷、公司頁面、員工網絡、Calendly 排程,語氣專業、需求合理。
  • 技術面精心佈局:惡意碼藏於伺服端控制器,伴隨正常管理功能,進入管理路由即以 Node 全權限執行;遠端載入、動態評估、短期存活 URL。
  • 心理操弄:以「面試測試」的熟悉流程與權威背書製造信任,並加入「先完成測試、節省會議時間」的緊迫感,降低風險意識。

風險與影響:

  • 開發者是「高價值目標」:機器中常存放環境變數、資料庫憑證、雲端金鑰、錢包與客戶資料;一旦感染,恐擴散到生產系統、造成重大資安與金流損失。
  • 攻擊可規模化:以面試作為入口、批量投放仿真代碼庫與多層混淆,可能已滲透到多人與多家公司。

作者的教訓與建議:

  • 永遠沙箱執行未知程式碼:用 Docker、VM,在隔離環境跑服務,不要在主機直接 npm start 或 node server。
  • 啟動前用 AI/工具掃描可疑模式:搜尋動態程式碼執行(new Function、eval、vm)、遠端載入、TextDecoder + 位元陣列還原 URL、隱蔽的網路請求與檔案/憑證存取。
  • 全面驗證身分與流程:LinkedIn 驗證不等於真實;交叉確認公司網域、郵件來源、面試流程與測試內容的合理性。
  • 警惕時間壓力:任何催促你「先跑程式、會議再談」都是警訊。
  • 對伺服端更敏感:服務端惡意碼擁有最大權限,危害遠超前端樣板。

本文以一個幾乎中招的實例提醒:面試代碼測試也可能是攻擊向量。開發者應將「預設不信任」與「隔離後執行」作為日常流程,用最小代價避免災難。

Read more