
什麼是 Secret Scanning?運作方式與最佳實務
在這篇部落格中,我們將討論 secret scanning 對於保護您的程式碼免於洩漏的重要性。了解不同的最佳實務,以及如何訓練您的團隊有效地儲存與使用 secrets。

隨著組織逐步強化其資料安全,他們需要處理並解決各種不同的問題。其中最關鍵的是 API keys、passwords 或 tokens 等敏感資料的暴露。為了解決這個問題,組織會使用 secret scanning 來找出已暴露的 secrets。但什麼是 secret scanning? 它是一種在程式碼庫、組態檔或 Jira、Confluence 等協作工具中尋找敏感資料的流程。
隨著軟體應用程式複雜度不斷提高,暴露 secrets 的風險百分比正呈指數成長。Secret scanning 因此變得極為重要,因為洩漏的 passwords 或 API key 可能為組織造成龐大的財務損失,因為它們可能導致資料外洩與未經授權的存取。
這篇部落格將帶您完整了解 secret scanning 及其在網路安全領域中的重要性。我們將探討最佳實務,以透過 secret management 確保強健的安全態勢。
了解 Secrets
讓我們了解在軟體開發中,secrets 在應用程式與系統安全性中所扮演的角色。
什麼是 Secrets?
若要執行例如建立安全通訊通道、識別使用者、保護個人裝置或取得個人紀錄存取權等活動,就需要存取機密憑證,這些憑證稱為 secrets。
Secrets 有不同類型,幾個例子包括 API keys、OAuth tokens、SSH keys、資料庫連線字串,以及 encryption keys。
程式碼與組態檔中常見的 Secrets 類型
Secrets 可能存在於不同位置,例如程式碼、Jira tickets,甚至是組態檔中。以下是一些常見的 secrets 類型,以及它們可能出現的位置:
- 硬式編碼的憑證: 說真的,如果某件事很容易,那它可能就是錯的。將 secrets 或 credentials 硬式編碼到程式碼中,對開發人員來說是一種方便的方式,因為這讓他們不必撰寫額外的組態與程式碼,但這可能對組織造成災難性後果。如果 passwords 或 API tokens 等敏感資訊直接被硬式編碼到應用程式原始碼中,而該程式碼又在 GitHub repository 上公開,攻擊者就能擷取這些 credentials 並重複使用。
- 組態檔 組態檔是保存所有資料的絕佳方式,例如 API key、資料庫密碼,或任何應用程式執行所需的內容,但它們也帶有同等程度的風險。如果檔案未被妥善保密或安全保存,任何人都可以存取該檔案並找到其中所有的 secrets 或敏感資訊。
- 環境變數 使用環境變數比本機應用程式更適合用來儲存 secrets。不過,如果您的執行階段記錄顯示該資訊,它們仍可能導致暴露。
- Secret Management Tools 許多組織使用 HashiCorp Vault、AWS Secrets Manager 或 Azure KeyVault 等工具來加密並儲存其 secrets。這些工具可為 secrets 提供安全儲存、加密與存取控制。然而,若要將這些工具的效益發揮到最大,我們仍應採用正確的安全實務。
暴露 Secrets 的風險
當 secrets 未受到妥善保護時,可能會為組織帶來嚴重後果。如果您的 secrets 暴露在外,了解其中風險非常重要。
Secrets 洩漏的後果
- 未經授權的存取: 攻擊者總是在尋找方法來利用系統,而對他們來說最簡單的方法,就是找到系統及其服務中洩漏的 secrets。每個應用程式、資料庫或雲端服務都受到某種 API Key 或密碼保護,而一旦暴露,就可能落入不當人士手中,進而導致他們(threat actors)取得未經授權的存取權。
- 服務濫用: 過去世界各地曾出現危險的 DDOS attacks,基本上這代表濫用某項服務以干擾並使其超載,進而讓服務無法使用,或提高供應商的營運成本。如果該服務的 API Key 洩漏,攻擊者便可能取得其存取權並加以濫用,持續發送 API 請求。這可能擾亂組織的日常營運,也會損害其聲譽。
- 法規處罰: 如果組織的 secrets 因資料外洩事件而遭到入侵,他們可能會陷入法律問題,並必須支付高額罰款。公司應遵循適當法規,以確保資料安全。
- 失去客戶信任: 客戶信任是維持組織運作的關鍵。如果組織發生資料外洩,客戶可能會失去信任,進而導致銷售下滑。
Secrets 是如何暴露的
如果 secrets 落入不當人士(threat actors)手中,就可能以多種方式遭到利用:
- 硬式編碼: 開發人員將 secrets 寫入原始碼中,若程式碼被分享或公開,這些資訊就可能變得可見。
- 錯誤組態: 不正確的設定或 misconfigs,例如公開的雲端儲存 bucket,可能會在無意間洩漏 secrets。
- 不安全的做法: 開發人員也可能一時疏忽,意外在聊天與專案工具中分享 secrets,並忘記移除那些原本就不該分享的內容。
- CI/CD 複雜性: 自動化管線通常需要 secrets,而如果在建置或部署流程中未妥善處理,這些資訊就可能洩漏。
Secret Scanning Tools 如何運作?
The secret scanning tools旨在掃描並擷取程式碼儲存庫或其他資料來源中的機密資訊,包括 passwords、API keys、access tokens 等。這些工具會透過剖析文字或程式碼,並識別與已知 secret 格式相似的模式來運作。
掃描的第一步是爬梳目標程式碼庫或資料來源。完成後,它會逐行檢查每個檔案並尋找特定模式。許多 regular expressions 被用來定義這些模式,也就是構成搜尋模式的字元序列。
Secret scanning 使用的演算法通常包括 pattern matching 與 entropy analysis。Pattern matching 會將文字(secret 的值)與不同類型專用的 regex patterns 進行比對。
隨機產生的 secrets(高熵字串)會透過 entropy analysis 偵測。其隨機性是利用字元分布來計算,而這被認為比其他技術更安全,因為它提供了不可預測性。
秘密掃描工具的限制
秘密掃描工具面臨數項挑戰。其中之一是誤判,也就是工具將非秘密字串偵測為秘密。這可能導致錯誤警示,並浪費時間與資源。
下一項限制發生在秘密被硬式編碼且經過加密時。開發人員甚至可能將秘密拆分為儲存在不同變數中的多個片段,或使用讓掃描工具難以察覺的編碼技巧。
不同環境中的秘密掃描
秘密掃描是一項重要的安全措施,應能在現代工具中運作。每種工具或平台都有其自身挑戰,並需要不同的方法來偵測秘密。
版本控制系統
- GitHub:整合於 GitHub Advanced Security 中,秘密掃描可識別憑證金鑰等已知秘密格式,並可自動掃描您的儲存庫。
- GitLab:GitLab 將 Secret Detection 作為其 CI/CD pipeline 的一部分提供。您可以設定 pipeline 透過網頁介面在提交、合併請求或排程的 pipeline 上執行,讓這些掃描在執行時間與方式上具備良好的彈性。
- BitBucket:BitBucket 或多或少依賴 Nightfall 或 GitGuardian 等產品,這些是持續監控儲存庫的第三方整合。最大的好處是,這些工具可自訂,並可依據您組織的特定需求與安全政策進行調整。
在版本控制系統中使用秘密最困難的部分,是處理秘密歷史記錄。秘密一旦被提交並推送,即使開發人員之後將其移除,它仍會保留在該儲存庫的歷史記錄中。
針對這個問題,許多組織會使用推送保護與 pre-commit hooks,在提交前掃描秘密,藉此對秘密強制執行安全檢查。
協作工具
Jira、Confluence 與 Slack 等協作平台有另一組挑戰。秘密可能會透過 Jira 和 Confluence 中的問題描述、留言或 wiki 頁面等方式傳遞。為了維持環境安全,有些組織會使用 API,允許對內容進行排程掃描,以檢查是否有任何新的秘密。
秘密可能會透過 Slack 和類似訊息平台中的聊天/群組訊息或檔案上傳來分享。這些平台最大的問題是動態內容。資訊每天都在持續變化,會有新貼文被新增、編輯或刪除。
如何回應已發現的秘密?
如果組織在其程式碼中偵測到秘密,第一個行動是判斷此情況的嚴重程度。找出已洩漏秘密的類型(例如 API 金鑰或密碼)及其對您系統的潛在影響。回答這些問題可讓您更容易建立 IR(事件回應)計畫,也能劃清事情已惡化到何種程度的界線。
接著,立即採取措施撤銷或停用已暴露的秘密,以阻止任何其他未經授權的繞過。撤銷舊秘密並發行新秘密。這個流程稱為輪替。同時,檢查您的日誌與系統中是否有任何未經授權的存取或異常活動,這些都可能表示有人濫用了該秘密。
最後,應建立一份完整的事件報告,說明秘密是如何洩漏的,以及為修復問題採取了哪些步驟。這些資訊可供您學習,並改善您的秘密管理。
處理誤判與漏判
誤判是指工具在程式碼中標記出存在秘密,但實際上並沒有。另一方面,漏判則發生在工具未能捕捉到真正的秘密時。這些問題都會降低秘密掃描工具的有效性。
誤判會因為非問題而浪費開發人員的時間;相對地,漏判則會因未被注意到的問題而增加遭駭的機率。
組織可以採取一些步驟,將這些問題降到最低。準確性需要透過幾種方式提升,包括定期更新掃描的設定與工具。 機器學習 有助於降低誤判率,因為它可以從先前的掃描中學習,並改善偵測方式。情境分析,例如所使用程式碼的位置,也能進一步協助區分哪些是秘密、哪些不是。
對開發人員進行秘密管理訓練
務必教育開發人員如何在不暴露其秘密的情況下撰寫安全程式碼。每一場訓練都應聚焦於基本要點,例如找出秘密、了解秘密暴露的風險,以及採用密碼管理最佳實務。
在開發團隊內建立安全意識文化也是如此。為此,領導者可以營造一個能夠坦誠討論安全習慣與經驗的環境,並提供持續教育。
秘密掃描管理的最佳實務是什麼?
有效的秘密掃描管理對於維護組織敏感資訊的安全至關重要。以下是五項關鍵最佳實務,可協助您提升秘密掃描工作的成效:
1. 實施全面性的秘密掃描政策
秘密掃描政策需要定義何謂秘密,並明確指出哪些環境需要掃描,以及透過秘密掃描工具執行的頻率。它應說明如何在組織內管理秘密掃描、強制執行與此實務相關的政策,並定義新的角色。該政策應定期檢視與更新,以因應新型態的秘密或威脅類型。
2. 將秘密掃描整合至開發生命週期
透過及早進行秘密掃描,以及在整個開發流程中全面掃描,企業就不會暴露任何秘密。這可以採用版本控制系統中的 pre-commit hooks 形式,在提交前攔截秘密,或將秘密掃描作為 CI/CD pipelines 的一部分。
3. 有效地排序與管理警示
如果處理不當,來自秘密掃描工具的過多警示可能導致警示疲勞。使用系統根據嚴重性與潛在影響對警示進行分流。您可以依據嚴重程度與敏感性層級將秘密轉換為不同類別。使用自動化來分流警示,並將其導向不同團隊進行處理。即時警示可確保對高風險暴露立即回應,並消除安全團隊被資料淹沒的問題。
4. 定期執行稽核與滲透測試
除了自動化掃描之外,也應支援手動稽核與 滲透測試,因為這些方式可能會找出自動化工具遺漏的秘密。它們也可以透過執行手動稽核,確保整個組織一致遵循秘密掃描政策。
5. 提供持續性的教育與訓練
秘密掃描的成效取決於所有員工的認知與合作,尤其是開發或營運相關人員。多數處理秘密的員工往往不了解良好秘密管理的必要性,也不知道洩漏自己的金鑰會有多嚴重。秘密掃描、警示訓練,以及安全分享敏感資訊的方法,都應成為此訓練的一部分。

CNAPP Market Guide
Get key insights on the state of the CNAPP market in this Gartner Market Guide for Cloud-Native Application Protection Platforms.
Secret Scanning 的未來趨勢
由於技術進步以及網路安全領域中安全威脅日益複雜,Secret Scanning 一直在快速演進。我們未來可能會看到 Secret Scanning 的五大主要趨勢如下:
- 人工智慧與機器學習整合:如果由適當的一組 AI 與 ML 演算法驅動,Secret Scanning 工具確實可以減少誤判、找出獨特的秘密模式,並以比規則式技術更敏捷的方式適應新的秘密。它們也可以利用歷史資料來預測這些秘密是否曾經暴露。
- Shift-Left 安全實務:Secret Scanning 和其他安全實務正日益朝向在開發流程更早期整合。企業應採用「shift-left」方法,在程式碼部署之前就偵測秘密外洩或處理不當的情況。
- 自動化修復:除了偵測之外,現有工具還可以進一步強化,使其能夠自動採取行動。這表示可自動輪替已遭入侵的憑證,或暫時拒絕對已遭入侵秘密的存取,從而縮短從偵測到解決之間的時間。
結論
在數位時代,組織現在非常重視保護任何敏感資訊。暴露的秘密可能導致未經授權的存取、資料外洩,以及重大的聲譽損害。了解秘密如何暴露並有效管理它們非常重要。
採用像 HashiCorp Vault 這類秘密管理工具等安全實務,對於確保秘密安全非常重要。同樣地,這也有助於在開發團隊內培養安全意識文化,以便輕鬆識別並修復與秘密相關的風險。
將秘密視為一個層面來處理,並持續教育團隊遵循安全編碼標準,是讓組織更加安全的方法。面對日益精密的威脅,採用主動式秘密管理策略將能保護敏感資訊安全,並維持客戶與其他利害關係人的信任。
常見問題
API 金鑰、密碼及其他憑證可能會被硬式編碼到原始碼和組態檔中,進而導致其暴露。偵測這些敏感憑證的過程稱為 Secret Scanning。組織應遵循最佳實務,確保秘密不會在公開儲存庫中被無意暴露,以避免資料外洩和未經授權的存取。
秘密掃描主要由靜態分析和動態分析組成。當程式碼在靜止狀態下透過模式比對掃描以尋找秘密資訊時,稱為靜態分析;而如果工具在執行階段識別出秘密資訊,則稱為動態分析。如今,隨著 AI 在資安產業中的發展,我們觀察到有少數工具會藉助機器學習演算法,透過參考先前的掃描結果來提高偵測準確性,進而減少誤判。
當工具遇到任何秘密可能已暴露的情況時,就會立即產生 Secret Scanning 警示。回應警示的責任應由開發團隊與安全團隊共同承擔。開發人員將修正問題,而安全團隊將就如何修正問題提供建議,並在完成後重新驗證。
若要使用 Git Secrets scan,請先安裝 Git Secrets ,可透過 Homebrew 等套件管理工具安裝,或從官方 GitHub 儲存庫下載。安裝完成後,在您的儲存庫中執行 git secrets –install 來初始化 Git Secrets,以設定在提交時掃描秘密的 hooks。您也可以使用 git secrets –scan 指令,手動掃描程式碼庫中任何已暴露的秘密。最後,檢視任何警示並採取適當行動,例如撤銷已暴露的秘密並加以替換。


