秘密洩漏:邁向深淵的一步saster

把家裡的鑰匙交給犯罪者絕對不是個好主意。但這是大多數開發現代軟體的組織經常會遇到的情況。

在關於機密外洩的第一篇文章中,我們將分析為什麼這種情況經常發生,其後果是什麼,以及採取哪些措施來預防或減輕這個問題並處理機密外洩事件。

我的天!我把我的雲端存取金鑰推送到了一個公用倉庫。

硬編碼的秘密 DevOps 工具的原始碼或設定檔中的秘密可能會落入不法分子之手。如果秘密是 commit如果將程式碼洩漏到公共原始碼庫中,那肯定沒救了。但即使是私有程式碼庫也不安全,因為秘密資訊也可能透過應用程式二進位檔案、日誌或被盜的原始程式碼洩露。

現在回想起來,這令人不安。 一個簡單的疏忽竟導致嚴重的安全漏洞,這種情況發生的頻率有多高? 只需谷歌一下“AWS金鑰洩漏“,”GitHub 訪問令牌洩露等等。不要把這些例子當作對某家供應商的隱性推薦。請使用您自己的例子!

例如,臭名昭著的 Codecov攻擊 2021 年 4 月發生的攻擊之所以成為可能,是因為 Codecov Docker 映像中包含 git 憑證,攻擊者可以利用這些憑證存取 Codecov 的私人 git 儲存庫,並在 Codecov 的 bash 上傳腳本中添加一行程式碼,用於收集環境變數和 git 儲存庫 URL。

需要注意的是,攻擊所得的部分賞金是獲取存取其他系統的秘密,許多攻擊都會在憑證、加密金鑰和代幣竊取方面投入大量資金。 

問題是 硬編碼的秘密很常見2022年3月,Lapsus$ APT 洩漏的 189GB 三星的源代碼和其他敏感文件。分析顯示,其中包含一些 6,600硬編碼的秘密90% 用於內部系統,10% 用於外部服務和工具,例如 GitHub、AWS 或 Google。這些金鑰包括 AWS/Twilio/Google API 金鑰、資料庫連接字串和其他敏感資訊。這代表了大多數程式碼庫的最新技術水平。

機密外洩是供應鏈攻擊最容易發生的途徑。

軟體包依賴專案前是供應鏈攻擊最常見的目標,但並非唯一目標。攻擊者可以創建一個新的軟體包,最終將其安裝到受害者的軟體中(使用)。 搶注 以及其他技術),但通常情況下,它們會嘗試透過修改軟體倉庫中的原始程式碼來感染現有軟體包(SCM)例如 GitHub、GitLab 或 BitBucket,或透過向 NPM、PyPI、RubyGems、Maven Central 等公共註冊表添加惡意版本。

但是,要注入惡意程式碼或隱藏在複雜依賴關係圖中的惡意依賴項,則需要… login 憑證,例如使用者名稱/密碼、令牌或存取金鑰(我們稱它們為“(簡稱),分別指目標原始碼庫或公共註冊表。 

壞人有時會透過某種方式獲得鑰匙。 社會工程。 “ 攻擊 event-stream 一個流行的 NPM 套件提供了一個很好的例子。但是搜尋洩漏的 login 憑證或存取金鑰是軟體供應鏈攻擊中最常見的攻擊手段。

原始碼庫和軟體包註冊表是軟體建置過程中兩個至關重要的系統。 pipeline但是,DevOps 中有很多工具: CI/CD 系統、測試工具、配置和部署自動化工具,以及發布工具,都可能被濫用,用於向軟體中註入惡意程式碼。洩漏這些工具的有效密鑰將直接導致災難性的後果。試想一下,如果洩漏了擁有公有雲資源完全控制權的根訪問密鑰,後果將不堪設想…

通常的建議

我們說的都是老生常談,大家都知道。但請採取行動!記住,機器人會定期掃描所有公共場所。 SCM 儲存庫。以下是一些建議,排名不分先後。

  • 如果您負責IT安全管理, 定義如何處理密鑰 在安全性策略中。但策略的有效性取決於執行力度:確保組織內部(不僅包括 DevOps 團隊,還包括軟體供應商)嚴格執行機密處理準則,並確保組織的事件回應計畫包含應對機密外洩事件的措施。
  • 實施和執行 多因素認證 (多因素身份驗證、雙重認證或其他任何縮寫)。而且安全性也絲毫不打折扣:一個USB安全金鑰絕對物有所值。你得把成千上萬個憑證打包上傳(很容易),然後喝醉了把密鑰落在酒吧里,還得找個能聯繫到你的人(這種情況下發生的概率會小一些,尤其如果你滴酒不沾的話)。
  • 使用密碼管理器,並設定一個強密碼,且該密碼不應儲存到系統中。對於系統中的機密資訊處理,請使用… 秘密金庫. CI/CD 系統、雲端服務供應商 SCMs 和其他 DevOps 工具提供此服務,但您可以選擇通用的 Secret Vault 解決方案。
  • 比較喜歡 短暫的 將令牌轉換為長期有效的存取密鑰。它們更容易撤銷,並且能更有效地限制惡意行為的發生。
  • 限制憑證重複使用攻擊者會將竊取的目標憑證重複用於其他系統,這再次凸顯了使用密碼管理器的重要性。密碼管理器和金鑰庫應該能夠徹底杜絕憑證重複使用的情況。
  • 限制並監控使用 管理員 密碼非常重要,值得特別追蹤。
  • 部署  強哈希和加密回到 USB(加密)金鑰、與合作夥伴和同事傳輸憑證的嚴格程序等等。
  • 使用 秘密掃描器例如,在…中運行 pre-commit 鉤 為了避免版本控制系統中的漏洞,起到安全門的作用。 在事情發生之前 這一點很重要。或者,可以使用事後掃描來偵測洩漏的金鑰,例如作為事前檢查。 pull request 合併。注意:我們的 Xygeni 平台包含一個金鑰掃描器,支援兩種操作模式。 
  • 手動替代方案 代碼審查 搜尋硬編碼的秘密成本更高,而且是事後進行的。commit (但希望至少在秘密被外界知曉之前就能發現)。不過,審查可能會發現一些非常規的秘密,這些秘密或許能躲過保密系統的偵測。       
  • 避免意外 commit將包含機密資訊的常用文件納入版本控制,並使用適當的方法進行管理。 排除模式 (例如 `.gitignore` 範本),並考慮到諸如此類的文件 .env.npmrc.pypirc臨時文件……這確實是安全防護體系中的另一層保障。
  • 最後一點:允許雲端服務提供者在條件允許的情況下對其金鑰進行洩漏掃描。至少,這一點應該要做到。 五月 我們會及時通知您洩漏事件,但對於雲端服務供應商來說,安全性至關重要。 事後 秘密掃描在掃描地點和頻率方面不太透明,通常需要明確設置,但當其他所有方法都失敗時,它無疑是最後的選擇。

我的天!我把雲端存取金鑰上傳到公用倉庫了,這是第二版。

這種情況可能發生在任何人身上。捲起袖子加油乾吧!

立即更新/撤銷/停用洩漏的金鑰!如果帳戶啟用了完善的多因素身份驗證 (MFA),風險會大大降低。對於例如網站中的私鑰,操作可能會比較複雜(需要為新的私鑰頒發新憑證並撤銷現有憑證),但現代工具提供了快速更新憑證或撤銷令牌的方法。 

如有提供,請依照供應商建議的步驟操作,例如: 本範例中使用的是 AWS.

查明洩漏原因。了解洩漏發生經過對於資訊揭露、分析、控制和經驗總結等活動至關重要。

然後向受影響方報告洩漏情況,並解釋您為堵住洩漏和減少損失所採取的措施。損失無法挽回,洩漏已經發生。請保持透明,並告知相關人員,以便他們也能採取行動。 

然後從…開始 取證。 “ 曝光視窗 指的是密鑰洩漏到密鑰失效之間的時間間隔。請準備好讀取日誌,並追蹤受影響帳戶在此期間的異常​​活動。刪除受影響帳戶及其產生的帳戶和密鑰。請注意,如果受影響帳戶擁有管理員權限,修復工作將會更加複雜。 

重寫(版本控制)歷史記錄 這很複雜。即使是極權國家也嘗試過,但都徒勞無功(此處雙關)。而且這可能無關緊要:駭客或公共程式碼庫上的機器人可能已經克隆了程式碼庫,或者已經提取了其中的精華,尤其是在暴露視窗足夠大的情況下。 

如果你喜歡冒險,想親自看看機器人需要多長時間才能偵測到洩漏的秘密,可以試試以下這些陷阱: 金絲雀代幣 讓你自己嘗試。記住,機器人會將預設設定列入黑名單。 canarytokens.org 領域…

欲了解更多信息,請閱讀 Kovacs, E.“洩漏的三星原始碼中發現了數千個密鑰“。《安全周刊》,2022年3月。Dyjak,A.“幾天前我做了一個關於秘密的小實驗。 commit已發佈到公共 Git 倉庫…“。推文主題,2020 年 11 月。Rzepa,P。”AWS 存取金鑰在 GitHub 程式碼庫中洩露,亞馬遜方面做出了一些改進。「. Medium,2020 年 11 月。
sca-tools-software-composition-analysis-tools
優先處理、補救並保護您的軟體風險
註冊免費帳號。
不需要信用卡。

確保您的軟體開發和交付安全

使用 Xygeni 產品套件