在現代軟件開發流程中,代碼安全已成為不可忽視的重要環節。尤其是在 DevSecOps 的理念逐漸普及的今天,如何在開發早期就發現并消除潛在的安全隱患,成為每一個開發者和安全工程師必須面對的問題。其中,敏感信息泄露(Secrets Leakage)是最常見也最危險的安全問題之一。
本文將介紹一款由 Yelp 開源的敏感信息掃描工具 ——?detect-secrets,它如何幫助我們在代碼提交前發現潛在的密鑰、密碼、令牌等敏感信息,并結合實際使用場景,分享其在自動化流水線和本地開發中的應用方式。
一、為什么需要敏感信息掃描?
在日常開發中,開發者可能會不小心將 API 密鑰、數據庫密碼、OAuth token 等敏感信息硬編碼進代碼中,并提交到 Git 倉庫。這些信息一旦泄露,可能導致嚴重的安全事故。
根據 OWASP 的 DSOMM(DevSecOps Maturity Model)要求,部分產品需達到 Level 1 或 Level 2 的安全成熟度,其中就包括對敏感信息的自動化檢測與防護。detect-secrets 正是為此而生。
二、detect-secrets 工具簡介
detect-secrets 是一個基于 Python 的命令行工具,支持插件化擴展,能夠掃描 Git 倉庫或任意目錄中的文件,識別潛在的敏感信息。它的核心優勢包括:
- 持續維護:每年發布多個新版本,最新版本為 v1.5.0(2024年5月發布)
- 開源協議:采用 Apache-2.0 許可
- 廣泛適配:支持 Git 倉庫和非 Git 目錄
- 性能優化:通過 diff 和正則匹配識別新增 secrets,避免全量掃描
此外,它還支持與 pre-commit 框架集成,實現開發者本地提交前的自動掃描。
三、與其他工具對比
detect-secrets 與 Coverity、MS CredScan、GitLeaks、VDOO 等工具并列。相比之下,detect-secrets 具有以下優勢:
工具名稱 | 特點 |
---|---|
Coverity | C/C++ 需啟用 HARDCODED_CREDENTIALS 檢查器 |
MS CredScan | 已于 2023 年 9 月棄用,推薦使用 GitHub Advanced Security |
GitLeaks | 使用 Go 編寫,以 Docker 鏡像形式發布 |
VDOO | 僅提供第三方二進制,無源碼 |
detect-secrets | 免費、開源、支持插件、性能優異 |
四、detect-secrets 使用指南
1. 準備工作
detect-secrets source code:??https://github.com/Yelp/detect-secrets
安裝工具:
pip install detect-secrets
創建 baseline 文件(掃描結果):
detect-secrets scan > .secrets.baseline
掃描非 Git 文件夾:
detect-secrets -C /path/to/directory scan > /path/to/directory/.secrets.baseline
注意:.secrets.baseline
?文件需為 ANSI 格式,否則后續命令可能報錯。
2. 集成 Pre-commit 鉤子
detect-secrets 支持兩種方式集成到開發流程中:
- 開發者本地鉤子:在提交前自動掃描
- Jenkins 自動化鉤子:結合 CI/CD 流程進行掃描
配置步驟如下:
安裝 pre-commit:
pip install pre-commit
在項目根目錄創建?
.pre-commit-config.yaml
?文件,添加 detect-secrets 配置安裝鉤子:
pre-commit install
執行掃描:
pre-commit run --all-files
3. 審計與報告
detect-secrets 提供審計功能,用于分析 baseline 文件中的內容:
查看審計結果:
detect-secrets audit .secrets.baseline
生成報告:
detect-secrets audit --report .secrets.baseline > SecretReport.txt
僅輸出真實 secrets:
detect-secrets audit --report --only-real .secrets.baseline > SecretReport.txt
查看統計信息:
detect-secrets audit --stats .secrets.baseline > status.txt
五、插件與過濾器機制
detect-secrets 的強大之處在于其插件和過濾器系統:
- 插件:用于識別不同類型的 secrets(如 AWS 密鑰、Slack token 等)
- 過濾器:用于排除誤報,提高準確率
你可以通過以下命令查看和管理插件:
detect-secrets scan --list-all-plugins
detect-secrets scan --disable-plugin AWSKeyDetector
此外,還支持自定義插件和過濾器,滿足特定業務需求。詳細文檔可參考:
- 插件開發指南
- 過濾器開發指南
六、總結與建議
detect-secrets 是一款輕量級、高性能、可擴展的敏感信息掃描工具,適合集成到 DevSecOps 流程中,幫助開發團隊在代碼提交前發現并消除潛在的安全隱患。
建議開發團隊在以下場景中使用 detect-secrets:
- 本地開發階段,結合 pre-commit 實現自動掃描
- 自動化流水線中,結合 Jenkins 或 GitHub Actions 實現持續檢測
- 安全審計階段,生成 secrets 報告并進行合規檢查
安全無小事,從每一次提交做起。detect-secrets,讓你的代碼更安全。