服务覆盖:昆明·曲靖·玉溪·保山·昭通·丽江·普洱·临沧·楚雄·红河·文山·西双版纳·大理·德宏·怒江·迪庆

你的API密钥可能正在暗网流通——敏感信息泄露排查实战

eycit 2026-04-24 1 次阅读 系统安装
---

theme: default themeName: "默认主题" title: "你的API密钥可能正在暗网流通——敏感信息泄露排查实战"


你的API密钥可能正在暗网流通——敏感信息泄露排查实战

去年帮一个客户做安全审计,发现他们的阿里云AccessKey、数据库密码、微信支付密钥全部在GitHub上公开可见——不是被黑客偷的,是他们自己的开发人员提交上去的。

更恐怖的是,这些密钥已经在暗网流通了至少2个月。期间有人用他们的阿里云账号跑了价值12万元的GPU算力挖矿。

敏感信息泄露是网络安全里最"无声"的威胁——不像勒索病毒那样大张旗鼓,它在你不知道的地方持续被利用。今天讲怎么系统地排查和治理这个问题。

泄露的主要渠道

根据我的实战经验,敏感信息泄露主要有这几个渠道:

1. 代码仓库(最常见) — GitHub/GitLab/Gitee上的公开仓库,提交记录里包含密钥 2. 配置文件打包 — 打包部署时把.env、config.json一起打了进去 3. 日志文件 — 应用日志里打印了请求参数,包含token和密钥 4. Docker镜像 — 镜像里打包了配置文件,推到了公开仓库 5. 前端代码 — API Key硬编码在JavaScript里,F12就能看到 6. 文档/知识库 — 内部Wiki、Confluence上写了连接信息

排查第一步:GitHub泄露检查

这是最高频的泄露渠道,优先排查。

用trufflehog扫描历史提交

# 安装trufflehog

go install github.com/trufflesecurity/trufflehog/v3@latest

扫描你的GitHub组织

trufflehog github --org=your-org-name --only-verified

扫描单个仓库的所有历史提交

trufflehog git https://github.com/your-org/your-repo --only-verified

`--only-verified`很重要——只显示验证过确实有效的密钥,排除误报。

用git-secrets预防未来泄露

# 安装git-secrets

git clone https://github.com/awslabs/git-secrets cd git-secrets && make install

在仓库中启用

cd your-repo git secrets --install git secrets --register-aws # 检测AWS密钥模式

自定义检测规则

git secrets --add 'password\s=\s["\x27].+["\x27]' git secrets --add 'secret_key\s=\s["\x27].+["\x27]' git secrets --add 'api_key\s=\s["\x27].+["\x27]'

启用后,`git commit`时如果检测到密钥模式会自动拦截。

GitHub官方的Secret Scanning

如果你用GitHub Enterprise,开启Secret Scanning功能:

1. 进入仓库Settings → Code security and analysis 2. 开启Secret scanning 3. 开启Push protection(提交时拦截)

GitHub维护了一个超过200种密钥模式的检测库,覆盖AWS、Azure、GCP、Slack、Stripe等主流服务。

排查第二步:代码仓库全面扫描

不只是GitHub,你内部的所有代码仓库都要扫描。

Gitleaks——更全面的开源扫描工具

# 安装

go install github.com/gitleaks/gitleaks/v8@latest

扫描当前目录

gitleaks detect -v

扫描特定仓库的所有历史

gitleaks detect --source /path/to/repo -v

只扫描未提交的变更(CI/CD集成)

gitleaks protect -v

自定义规则

cat > .gitleaks.toml << 'EOF' [[rules]] id = "custom-db-password" description = "Database Password"

regex = '''(?i)(db_passworddatabase_passwordmysql_password)\s[:=]\s["\x27]?[^\s"'\x27]{8,}'''

tags = ["key", "database"]

[[rules]] id = "custom-jwt-secret" description = "JWT Secret"

regex = '''(?i)(jwt_secretjwt_keytoken_secret)\s[:=]\s["\x27]?[^\s"'\x27]{16,}'''

tags = ["key", "jwt"] EOF

gitleaks detect --config-path .gitleaks.toml -v

CI/CD集成

在GitLab CI中集成gitleaks:

# .gitlab-ci.yml

gitleaks: stage: test image: zricethezav/gitleaks:latest script: - gitleaks protect -v --redact rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"

排查第三步:日志和监控审查

很多应用会在日志里打印敏感信息,自己都不知道。

# 搜索日志中的可疑内容
grep -rn "password\secret\token\api_key\access_key" /var/log/myapp/ --include="*.log"head -50

搜索常见的密钥模式

grep -rnE '(AKIA[0-9A-Z]{16}eyJ[A-Za-z0-9-_]+sk_live_[0-9a-zA-Z]+)' /var/log/ --include="*.log"
代码层面排查:
# 搜索代码中的敏感日志输出
grep -rn "log\.\(info\debug\warn\).*\(password\token\secret\)" src/
grep -rn "System.out.println.*\(password\token\)" src/
grep -rn "console.log.*\(password\token\key\)" src/

修复方案——日志脱敏:

// 不要这样

log.info("User login: password={}", password);

// 应该这样 log.info("User login: password=");

// 或者用工具自动脱敏 log.info("User login: {}", MaskUtil.mask(request));

排查第四步:Docker镜像检查

# 检查镜像中的敏感文件

docker run --rm -it your-image:latest find / -name ".env" -o -name ".key" -o -name ".pem" -o -name "config.json" -o -name "credentials" 2>/dev/null

检查镜像历史(看Dockerfile里有没有COPY敏感文件)

docker history --no-trunc your-image:latest

更彻底:导出镜像文件系统检查

docker create --name inspect your-image:latest

docker export inspecttar -tvf -grep -E '\.(envkeypemp12jks)$'

docker rm inspect

排查第五步:前端代码检查

# 扫描前端JS文件中的密钥
find /var/www -name "*.js" -exec grep -l "api_key\apiKey\API_KEY\secret\token" {} \;

更精确的模式

grep -rnE '(api[_-]?keysecret[_-]?keyaccess[_-]?key)\s[:=]\s["\x27][^"\x27]{10,}' /var/www/

前端泄露特别危险——任何人F12就能看到。解决方案:

1. 敏感操作走后端代理,不在前端暴露任何密钥 2. 如果必须前端使用(如地图API Key),设置IP/域名白名单限制

泄露后的应急处置

发现密钥泄露后,立即按以下步骤处理:

1. 立刻轮换密钥。 不要先删代码,先换密钥。代码删了,暗网副本还在。

2. 审查使用记录。 登录云服务商控制台,查看该密钥的操作日志。

# 阿里云ActionTrail查询

aliyun actiontrail LookupEvents --KeyList '["AccessKeyId"]' --ValueList '["LTAI5t..."]'

AWS CloudTrail查询

aws cloudtrail lookup-events --lookup-attributes AttributeKey=AccessKeyId,AttributeValue=AKIA...

3. 删除GitHub历史。 如果密钥在历史提交中,仅仅删除当前代码是不够的。

# 用BFG清除历史

git clone --mirror https://github.com/your-org/your-repo java -jar bfg.jar --replace-text passwords.txt your-repo.git cd your-repo.git git reflog expire --expire=now --all git gc --prune=now --aggressive git push

4. 通知相关方。 如果泄露的密钥涉及第三方服务,通知对方采取防护措施。

长期治理方案

排查只是治标,要治本需要建立制度:

1. 密钥统一管理 — 使用HashiCorp Vault、AWS Secrets Manager或阿里云KMS集中管理密钥,代码中不硬编码。

2. Pre-commit Hook — 开发者提交代码前自动扫描密钥。

3. CI/CD门禁 — 流水线中集成gitleaks,检测到密钥自动阻断。

4. 最小权限 — 每个服务只用自己需要的最小权限密钥,出了问题爆炸半径小。

5. 定期轮换 — 设置密钥过期时间,强制定期轮换。

6. 暗网监控 — 订阅Have I Been Pwned或Flare等暗网监控服务,发现泄露立即告警。

做IT这么多年,见过太多"早知道就好了"的情况。

希望这篇文章能帮你少走弯路。如果真的遇到问题,别一个人扛着——易云城IT服务随时待命。

📞 服务热线:13708730161 💬 微信:eyc1689 📧 邮箱:service@eycit.com 🌐 https://www.eycit.com

您身边的IT专家。

上一篇
勒索病毒又变种了!2026年企业防勒索的7道防线...
下一篇
放弃ELK吧!这套轻量级日志方案小团队也能玩转...