祕密掃描
工程系統中公開的認證可為攻擊者提供容易利用的機會。 為了防範此威脅, Azure DevOps 的 GitHub 進階安全性會掃描原始程式碼中的認證和其他敏感性內容。 推送保護也可防止任何認證在一開始外洩。
儲存機制的秘密掃描會掃描歷程記錄中可能已存在於原始程式碼中的任何秘密,並推送保護可防止任何新的秘密在原始程式碼中公開。
適用於 Azure DevOps 的 GitHub 進階安全性可與 Azure Repos 搭配運作。 如果您想要搭配 GitHub 存放庫使用 GitHub 進階安全性,請參閱 GitHub 進階安全性。
關於秘密掃描警示
啟用進階安全性時,它會掃描存放庫中是否有各種服務提供者所發出的秘密,併產生秘密掃描警示。
如果存取資源需要配對的認證,則只有在相同檔案中偵測到配對的兩個部分時,秘密掃描才會建立警示。 配對可確保最重要的洩漏不會隱藏在部分洩漏的相關信息後方。 配對比對也有助於減少誤判,因為配對的兩個元素都必須一起使用才能存取提供者的資源。
Azure DevOps 中 Repos>進階安全性的 [進階安全性] 索引卷標是檢視安全性警示的中樞。 選取 [ 秘密] 索引 標籤以檢視秘密掃描警示。 您可以依狀態和秘密類型進行篩選。 您可以流覽至警示以取得詳細數據,包括補救指引。 啟用進階安全性之後,選取的存放庫會開始掃描,包括所有歷程記錄認可。 經過一段時間后,警示就會在掃描進行時開始出現。
如果已重新命名分支,則結果不會有任何影響,最多可能需要 24 小時才會顯示新名稱。
若要補救公開的秘密,請使公開的認證失效,並在其位置建立新的認證。 然後,應該安全地儲存新建立的秘密,以不直接將它推送回程式代碼的方式。 例如,秘密可以儲存在 Azure 金鑰保存庫 中。 大部分的資源都有主要和次要認證。 除非另有說明,否則將主要認證變換至次要認證的方法完全相同。
管理秘密掃描警示
檢視存放庫的警示
具有存放庫參與者許可權的任何人都可以在 [Repos] 下的 [進階安全性] 索引卷標中檢視存放庫的所有警示摘要。 在 [ 秘密] 索引 標籤上選取 ,以檢視所有秘密掃描警示。
如果最近為您的存放庫啟用進階安全性,您可能會看到一張卡片,指出進階安全性仍在掃描您的存放庫。
掃描完成後,就會顯示任何結果。 系統會針對每個偵測到的唯一認證,跨存放庫的所有分支和歷程記錄產生單一警示。 沒有分支篩選,因為它們會匯總成一個警示。
從 [秘密掃描] 索引標籤的 [信賴度] 下拉式清單中選取 [其他],即可檢視非提供者密碼。
警示詳細資料
當您流覽至警示時,會出現詳細的警示檢視,並顯示更多有關尋找的詳細數據,並提供特定的補救指引來解決警示。
區段 | 說明 |
---|---|
Location | [位置] 區段會詳細說明秘密掃描探索到洩漏認證的路徑。 歷程記錄中可能會有多個位置或多個認可,其中包含洩漏的認證。 所有這些位置和認可都會顯示在 [位置] 底下,並直接連結到代碼段,並認可它已在 中識別。 |
建議 | 建議區段包含已識別認證之第三方檔補救指引的連結。 |
關閉通知 | 秘密掃描警示沒有自動修正行為。 所有秘密掃描警示都必須透過警示詳細數據頁面手動證明為固定。 選取 [ 關閉] 按鈕,確認已撤銷秘密。 |
嚴重性 | 所有秘密掃描警示都會設定為重大。 任何公開的認證都可能是惡意執行者的機會。 |
尋找詳細數據 | 用來尋找認證的認證類型和規則會列在警示詳細數據頁面提要字段的 [尋找詳細數據] 底下。 |
使用非提供者秘密時, 信賴度:其他 標籤也會由警示詳細數據檢視中的嚴重性徽章顯示。
修正秘密掃描警示
每個秘密都有唯一的補救步驟,可引導您瞭解如何撤銷和重新產生其位置的新秘密。 警示詳細數據會共用每個警示的特定步驟或檔。
秘密掃描警示會保持開啟狀態,直到關閉為止。 若要證明已修正秘密掃描警示:
- 流覽至您想要關閉的警示,然後選取警示。
- 選取 [ 關閉警示] 下拉式清單。
- 如果尚未選取,請選取 [ 已修正]。
- 選取 [ 關閉 ] 以提交並關閉警示。
關閉秘密掃描警示
若要在進階安全性中關閉警示,您需要適當的許可權。 根據預設,只有專案管理員可以關閉進階安全性警示。 如需進階安全性許可權的詳細資訊,請參閱 管理進階安全性許可權。
若要關閉警示:
- 流覽至您想要關閉的警示,然後選取警示。
- 選取 [ 關閉警示] 下拉式清單。
- 如果尚未選取,請選取 [ 已 接受風險] 或 [誤判 ] 作為關閉原因。
- 在 [批注] 文本框中新增選擇性批注。
- 選取 [ 關閉 ] 以提交並關閉警示。
- 警示狀態會從 [開啟] 變更為 [已關閉] ,並顯示您的關閉原因。
先前關閉的任何警示都可以手動重新開啟。
保護遭入侵的秘密
一旦將秘密認可至存放庫,秘密就會遭到入侵。 Microsoft針對遭入侵的秘密建議下列動作:
- 針對遭入侵的 Azure DevOps 個人存取令牌,請刪除遭入侵的令牌、建立新的令牌,以及更新任何使用舊令牌的服務。
- 對於所有其他秘密,請先確認認可至 Azure Repos 的秘密有效。 如果有效,請建立新祕密、更新任何使用舊祕密的服務,然後刪除舊祕密。
- 識別企業資源上遭入侵令牌所採取的任何動作。
更新密碼時,請務必安全地儲存新的秘密,並確保它一律會存取,且永遠不會儲存為純文本。 其中一種可能性可能是透過 Azure Keyvault 或其他秘密管理解決方案。
秘密推送保護
推送保護會檢查任何傳入的推播是否有高信賴度秘密,並防止推送通過。 錯誤訊息會顯示您移除所有已識別的秘密,或視需要繼續推送秘密。
關於推播保護警示
推播保護警示是推播保護所回報的使用者警示。 秘密掃描做為推播保護,目前會掃描存放庫中是否有某些服務提供者所發出的秘密。
如果存取資源需要配對的認證,則只有在相同檔案中偵測到配對的兩個部分時,秘密掃描才會建立警示。 配對可確保最關鍵的洩漏不會隱藏在部分洩漏的相關信息背後。 配對比對也有助於減少誤判,因為配對的兩個元素都必須一起使用才能存取提供者的資源。
推送保護可能不會封鎖舊版的特定令牌,因為這些令牌可能會產生比其最新版本更高的誤判。 推送保護也可能不會封鎖舊版令牌。 對於 Azure 儲存體 金鑰等令牌,進階安全性僅支援最近建立的令牌,而不是符合舊版模式的令牌。
從命令行推送保護
推送保護是以原生方式建置在 Azure DevOps Git 中。 如果您的認可包含已識別的秘密,您會看到推播遭到拒絕的錯誤。
從 Web 介面推送保護
推送保護也可從 Web 介面運作。 如果在認可中識別出秘密,您會看到下列錯誤區塊會阻止您推送變更:
如果您的推送遭到封鎖,該怎麼辦
推送保護會封鎖純文本檔案中找到的秘密,這些密碼通常不限於原始程式碼或 JSON 組態檔等文本檔。 這些秘密會以純文本儲存。 如果不良動作專案取得檔案的存取權,且其發佈至公用存放庫,則秘密可供任何人使用。
建議您從標幟的檔案中移除秘密,然後從認可歷程記錄中移除秘密。 如果標幟的秘密是佔位元或範例密碼,建議您更新假密碼,在假密碼前面加上字串 Placeholder
。
如果在您先前的認可中新增秘密,請修改認可並建立新的認可:
- 從您的程式碼移除秘密。
- 使用認可變更
git commit --amend
- 再次推送變更。
如果秘密已新增到歷程記錄中,請使用互動式重訂基底來編輯您的認可:
- 使用
git log
判斷您的第一次秘密認可。 - 執行互動式重新基底:
git rebase -i [commit ID before credential introduction]~1
- 藉由在編輯器中出現的文字第一行將
pick
變更為edit
,識別要編輯的認可。 - 從您的程式碼移除秘密。
- 使用
git commit --amend
認可變更。 - 執行
git rebase --continue
來完成重新基底。
推送封鎖的秘密
不建議略過標幟的秘密,因為略過可能會讓公司的安全性面臨風險。 如果您確認已識別的秘密不是誤判,您應該先從整個分支歷程記錄中移除秘密,然後再嘗試再次推送變更。
如果您認為封鎖的秘密是誤判或安全推送,您可以略過推播保護。 在認可訊息中包含字串 skip-secret-scanning:true
。 即使您略過推播保護,在推送秘密之後,也會在警示UX中產生秘密掃描警示。