2024 年 3 月 29 日,微軟工程師 Andres Freund 在排查 SSH 異常延遲問題時,偶然發現 XZ Utils 壓縮函式庫(幾乎所有 Linux 發行版的標準元件)被植入了精心設計的後門。更令人驚愕的是:這個後門由一個名為「Jia Tan」的帳號在兩年多的時間內,透過數百次真實的程式碼貢獻,逐步贏得維護者信任後植入——這是一場針對開源軟體基礎設施的國家級精密行動。
一、XZ Utils 後門事件:完整解析
攻擊時間線
- 2021 年 10 月:「Jia Tan」帳號首次出現,開始向 XZ Utils 提交真實有效的程式碼修復
- 2022–2023 年:持續貢獻,建立信譽,並透過社交壓力加速讓原始維護者 Lasse Collin 交出部分權限
- 2024 年 2 月:在 5.6.0 和 5.6.1 版本的發布壓縮包(tarball)中植入後門,但不在 Git 原始碼中——需要特定建置環境才能觸發
- 2024 年 3 月 29 日:Freund 發現異常,公開揭露。後門剛開始出現在 Debian 和 Fedora 的測試版和 rolling release 版本中
- 同日:全球各大 Linux 發行版緊急回滾至安全版本(5.4.x)
後門的技術手法
攻擊者的技術水準令研究社群震驚:後門藏在測試用的二進位檔案中,並透過複雜的建置腳本在編譯時注入,繞過一般的程式碼審查。目標是劫持 systemd 呼叫 OpenSSH 的過程,在特定條件下讓持有特定 RSA 金鑰的攻擊者無需密碼即可取得 root 存取。
安全研究員後來確認「Jia Tan」很可能是一個國家支持的威脅行為者,行動計畫規模和耐心遠超一般駭客組織。
二、軟體供應鏈攻擊的類型
| 類型 | 說明 | 典型案例 |
|---|---|---|
| 維護者帳號入侵 | 劫持合法維護者帳號,推送惡意更新 | event-stream(npm, 2018) |
| 社交工程滲透 | 長期假扮貢獻者,贏得信任後植入後門 | XZ Utils(2024) |
| 套件名稱偽裝 | 發布名稱相似的惡意套件(Typosquatting) | crossenv vs cross-env |
| 惡意依賴注入 | 在合法套件的依賴中植入惡意版本 | ua-parser-js(npm, 2021) |
| 建置環境攻擊 | 攻擊 CI/CD 管線或建置伺服器 | SolarWinds Orion(2020) |
| PyPI/npm 投毒 | 上傳含惡意程式碼的套件到公開倉庫 | 多起 PyPI 竊密套件(2025) |
三、2020–2026 年重大供應鏈攻擊事件
SolarWinds Orion(2020)
俄羅斯 APT29 組織(Cozy Bear)攻入 SolarWinds 的建置環境,在 Orion 網路監控軟體的更新中植入後門。受害者包括美國財政部、國務院、國防部等政府機關,以及微軟、FireEye 等大型企業,估計 18,000 個組織下載了被感染的更新。
Codecov 供應鏈攻擊(2021)
攻擊者篡改 Codecov 的 Bash 上傳工具,收集使用者的 CI 環境變數(包含 API 金鑰、AWS 憑證)。受影響的公司包括 Twilio、HashiCorp、Rapid7 等。
ua-parser-js(npm, 2021)
流行的 npm 套件 ua-parser-js(每週數千萬下載)的維護者帳號被劫持,攻擊者發布含密碼竊取和加密貨幣挖礦程式的惡意版本。
PyPI 投毒潮(2024–2025)
研究員持續發現針對 Python 開發者的惡意套件,通常使用與知名函式庫相近的名稱(如 `requets` 偽裝 `requests`),或在初始合法版本中隱藏惡意更新。2025 年 Google 和 Checkmarx 聯合發現的一批套件,專門竊取加密貨幣錢包私鑰。
四、為什麼 Checksum 驗證如此重要
所有主流套件管理器和軟體發布平台都會提供官方雜湊值(Checksum),讓使用者驗證下載的完整性:
- npm:package-lock.json 中記錄每個套件的 SHA-512 integrity hash
- pip:PyPI 提供每個版本的 SHA-256 雜湊,可用
pip download --hash驗證 - GitHub Releases:大多數專案會在 Release 頁面提供 SHA-256 或 SHA-512 的 checksum 檔
- Linux 發行版:ISO 映像通常附有 SHA-256SUMS 或 MD5SUMS 檔案
驗證方法很簡單:下載檔案後,計算其雜湊值,與官方公佈的值比對。如果兩者不符,下載的檔案可能已遭到竄改或損毀,切勿安裝。
五、開發者與組織的防護實務
對個人開發者
- ✅ 鎖定依賴版本:使用 package-lock.json、poetry.lock 等鎖定檔,避免自動升級到未經審查的新版本
- ✅ 下載後驗證 Checksum:安裝重要套件或軟體前,對照官方公佈的雜湊值
- ✅ 審計直接依賴:定期用
npm audit、pip-audit或Dependabot掃描已知漏洞 - ✅ 最小化依賴:每個額外依賴都是潛在的攻擊面,非必要不引入
- ✅ 觀察套件異常行為:突然要求新的系統權限、包含混淆程式碼、依賴樹意外擴大都是警示訊號
對中小型組織
- ✅ 使用私有套件倉庫(Artifactory、Nexus)做代理,快取和控制允許的版本
- ✅ 在 CI/CD 管線中整合 SCA(軟體組成分析)工具,如 Snyk、FOSSA
- ✅ 建立軟體物料清單(SBOM),追蹤每個依賴的來源和版本
- ✅ 限制 CI/CD 服務帳號的最小權限,避免構建過程能存取生產環境憑證
六、XZ Utils 事件的深遠影響
XZ Utils 事件推動了整個開源生態的安全反思:
- 維護者燒盡問題(Burnout):大量關鍵基礎設施套件由一到兩名義務維護者負責,攻擊者正是利用原始維護者的疲憊和壓力進行社交工程
- GitHub 安全政策強化:事後 GitHub 和 OpenSSF 推動更嚴格的貢獻者驗證、簽名提交要求
- 記憶體安全語言的推動:美國 CISA 在事件後加強推動將關鍵基礎設施從 C/C++ 遷移到 Rust 等記憶體安全語言
- Sigstore 普及:軟體簽名基礎設施 Sigstore 的採用加速,讓每個套件版本都有可驗證的發布來源
總結
- XZ Utils 後門是史上最精密的供應鏈攻擊之一:兩年社交工程、技術水準媲美國家級行動,最終被一個偶然觀察到的 SSH 效能異常所揭穿
- 供應鏈攻擊的風險在於:你安裝的不只是一個套件,而是整個依賴樹的所有信任
- Checksum 驗證是最基本也最有效的防線之一——下載重要軟體後,務必對照官方雜湊值
- 鎖定依賴版本、最小化依賴、定期審計漏洞,是個人開發者最容易執行的防護習慣
- 開源基礎設施的安全是集體責任——資助和支持關鍵套件的維護者,是降低供應鏈風險的根本之道