GitLeaks
一、介绍
Gitleaks 是一款基于 Go 语言开发的轻量级开源敏感信息检测工具,专注于识别 Git 仓库中硬编码的各类敏感信息,包括 API 密钥、云服务凭证、加密密钥、令牌、密码等。项目地址。
与传统的字符串匹配工具不同,Gitleaks 采用正则表达式匹配、信息熵分析与关键词上下文识别三重检测机制,能够精准识别各类复杂格式的敏感信息,同时有效降低误报率。
据统计,GitHub 上每分钟就有超过 28 起凭证泄露事件发生。Gitleaks 为开发团队构建了第一道安全防线,支持"左移安全"理念。
核心特点
- 全面的检测规则:内置 80+ 主流服务的预定义检测规则,涵盖 AWS、Azure、GCP 等云平台,GitHub、Slack 等第三方服务,以及 SSH 私钥、JWT 令牌等通用敏感信息类型
- 三重检测机制:正则匹配 + 信息熵分析(阈值通常 3.5-5.0)+ 关键词上下文过滤,兼顾已知格式与自定义高熵字符串
- 多场景支持:本地仓库扫描、远程仓库检测、历史提交记录审计、实时防护模式
- 灵活集成:可无缝集成到 CI/CD 流水线、Git Hooks(pre-commit)、GitHub Action 等开发流程
- 自定义规则:通过 TOML 配置文件扩展检测规则,支持规则级和全局允许列表
- 多平台运行:支持 Windows、macOS、Linux,提供 Docker 镜像、二进制包、源码编译等多种安装方式
- 多种报告格式:支持 JSON、SARIF、CSV 等输出格式,方便与安全分析工具集成
- MIT 开源许可:免费使用,社区活跃
二、安装
Gitleaks 提供多种安装方式,适配不同操作系统与使用场景。
2.1 macOS(Homebrew)
macOS 用户推荐通过 Homebrew 安装:
brew install gitleaks
验证安装:
gitleaks version
2.2 Windows(Chocolatey)
Windows 系统推荐通过 Chocolatey 包管理器安装(需以管理员身份运行 PowerShell):
choco install gitleaks
2.3 Linux
Debian / Ubuntu:
sudo apt update && sudo apt install gitleaks
CentOS / RHEL:
sudo yum install gitleaks
通用二进制安装(其他发行版):
wget https://github.com/gitleaks/gitleaks/releases/latest/download/gitleaks-linux-amd64
chmod +x gitleaks-linux-amd64
sudo mv gitleaks-linux-amd64 /usr/local/bin/gitleaks
2.4 Docker
使用 Docker 可避免系统环境依赖,适合临时扫描或 CI/CD 集成:
拉取镜像(Docker Hub)
docker pull zricethezav/gitleaks:latest
或 GHCR
docker pull ghcr.io/gitleaks/gitleaks:latest
运行扫描(挂载待扫描目录)
docker run --rm -v /本地目录路径:/path zricethezav/gitleaks:latest detect --source /path
2.5 源码编译
需要自定义功能或安装最新开发版本时,可通过源码编译(需 Go 1.18+):
git clone https://github.com/gitleaks/gitleaks.git
cd gitleaks
make build
sudo mv gitleaks /usr/local/bin/
三、使用
3.1 基础扫描
扫描当前 Git 仓库:
gitleaks detect --source . --verbose
其中 --source . 指定扫描当前目录,–verbose 输出详细检测结果(包括泄露位置、规则 ID、熵值等)。
扫描指定目录:
gitleaks detect --source /path/to/code --verbose
扫描远程仓库(临时克隆):
gitleaks detect --url https://github.com/目标仓库.git --temp
扫描私有远程仓库(需认证):
gitleaks detect --url https://github.com/私有仓库.git --token 你的访问令牌
3.2 报告输出
Gitleaks 支持多种报告格式:
- JSON 格式
gitleaks detect --source . --report-path gitleaks-report.json --report-format json
- SARIF 格式(适配 GitHub 代码扫描)
gitleaks detect --source . --report-path gitleaks-report.sarif --report-format sarif
- CSV 格式(便于 Excel 分析)
gitleaks detect --source . --report-path gitleaks-report.csv --report-format csv
退出码说明:0 表示无泄露,2 表示发现泄露,1 表示执行失败。可用于 CI/CD 流水线的自动判断。
3.3 实时防护模式(protect)
protect 命令用于监控工作区文件变更,在提交前检测未暂存或已暂存的敏感信息:
- 检测已暂存文件(pre-commit 场景)
gitleaks protect --source . --verbose --staged
- 检测工作区所有变更文件
gitleaks protect --source . --verbose
3.4 高级扫描选项
扫描特定提交范围(近 30 天):
gitleaks detect --source . --since 30d
扫描特定分支:
gitleaks detect --source . --branch main
使用基线报告(忽略历史已知漏洞):
gitleaks detect --source . --baseline-path baseline.json
3.5 配置文件与允许列表
在仓库根目录创建 .gitleaks.toml 配置文件,可定义全局允许列表以降低误报:
[allowlist]
description = "全局允许列表"
paths = [
'''gitleaks\.toml''',
'''(?i)\.(png|jpg|gif)$''',
'''test/'''
]
regexes = [
'''^\$\{[A-Z_]+\}$''',
'''^dummy_'''
]
stopwords = [
"00000000-0000-0000-0000-000000000000"
]
扫描时指定配置文件:
gitleaks detect --source . --config .gitleaks.toml
3.6 自定义检测规则
通过 TOML 文件扩展检测规则,满足业务特定需求:
[[rules]]
id = "custom-api-key"
description = "自定义系统API密钥检测"
regex = '''\bsk_[a-zA-Z0-9]{32}\b'''
entropy = 4.0
keywords = ["api_key", "secret", "token", "auth"]
path = '''(?i)\.(js|ts|py|java|go)$'''
severity = "high"
[[rules.allowlists]]
description = "排除测试环境密钥"
regexes = ['''sk_test_''']
3.7 集成 Pre-commit 钩子
先安装 pre-commit 工具,然后在仓库根目录创建 .pre-commit-config.yaml:
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.16.1
hooks:
- id: gitleaks
# 或使用 Docker 镜像
# - id: gitleaks-docker
启用钩子:
pre-commit install
此后每次提交前都会自动运行 Gitleaks 扫描,发现敏感信息时阻止提交。
3.8 集成 GitHub Action
在仓库中创建 .github/workflows/gitleaks.yml:
name: Gitleaks Scan
on: [push, pull_request, workflow_dispatch]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
四、最佳实践
- 提交前检测 + 构建时扫描双重防护:同时配置 pre-commit 钩子和 CI/CD 流水线,形成多层防护
- 定制规则与允许列表:根据业务需求添加自定义检测规则,合理配置允许列表平衡检测效果与误报率
- 从源头减少硬编码:结合环境变量、密钥管理服务(如 Vault、AWS Secrets Manager)存储凭证,从源头减少硬编码场景
- 定期全量扫描:定期对仓库完整历史进行扫描,及时发现历史提交中的泄露
- 关注退出码:在 CI/CD 中利用退出码(0=无泄露,2=发现泄露)实现自动阻断
881



被折叠的 条评论
为什么被折叠?



