GitHub 已经支持扫描公共存储库和私有存储库关于微信的秘钥、Token,包括微信公众号、小程序、微信支付等功能的秘钥,并转发给腾讯,你将在腾讯收到秘钥泄露的通知。 什么是秘钥泄露 我们在开发软件时需要对接第三方的接口,那就需要秘钥来证明自己的身份,工程师在测试完成后进行代码提交,往往一时疏忽把秘钥一起提交给了代码仓库,其他开发者拉取仓库代码后,你的秘钥就被泄露了。 这个提交代码时提交秘钥的失误操作,真的真的非常常见,我本人、我身边的人、我使用的其他库,都看见过代码中包含秘钥。 GitHub 秘钥扫描合作伙伴计划 GitHub提供秘钥扫描合作伙伴计划,GitHub会扫描仓库,查找已知的密码格式,并上报给合作伙伴,比如你把阿里云的账户秘钥提交到了 GitHub 上,阿里云那边就会收到 GitHub 的通知,并在阿里云管理界面上对你进行提示,告诉你你秘钥可能已经泄露。 如果你是厂商,并且想加入 GitHub 秘钥扫描合作伙伴计划,可以参考:https://docs.github.com/en/developers/overview/secret-scanning-partner-program 目前已知的厂商列表包含了阿里云、 腾讯云、京东云、AWS、Azure、Google Cloud 以及这次新提到的腾讯微信。 所有公开存储库,默认都会开启这个秘钥扫描 为存储库配置机密扫描
- 在存储库的主页。 在存储库名称下,单击“设置”。
- 在边栏的“安全性”部分中,单击“代码安全性和分析”。
- 如果尚未对存储库启用 Advanced Security,请在“GitHub Advanced Security”右侧单击“启用”。
- 查看启用 Advanced Security 的影响,然后单击“为此存储库启用 GitHub Advanced Security”。
- 当您启用 Advanced Security 时,secret scanning 可能会因为组织的设置而自动启用。 如果显示“Secret scanning”带有“启用”按钮,则仍需通过单击“启用”来启用 secret scanning 。 如果你看到“禁用”按钮,则表示 secret scanning 已启用。
GitHub 与腾讯微信的服务 GitHub 会将在仓库中扫描到的密钥转发给腾讯微信,腾讯微信将通知受影响的用户进行警告通知,腾讯微信的相关文档参见:https://pay.weixin.qq.com/docs/merchant/development/key-leak-mitigation-guide.html,GitHub的博客参见:https://github.blog/changelog/2022-12-19-tencent-wechat-is-now-a-github-secret-scanning-partner/ 极狐GitLab 的秘钥扫描 极狐GitLab 同样支持秘钥扫描,极狐GitLab 14.5 更新了密钥检测扫描器,以检测 47 种新的 “可识别的” 密钥模式。这使得极狐GitLab 密钥检测的检测范围达到了 90 多个可检测模式。 启用极狐 GitLab 秘钥扫描 你需要具备 GitLab Runner 来运行流水线的能力,通过配置 .gitlab.ci.yml 文件,在底部增加:
include:
- template: Jobs/Secret-Detection.gitlab-ci.yml
在运行流水线时,极狐 GitLab 将进行秘钥扫描,如果你希望了解更多内容,请参见:https://docs.gitlab.com/ee/user/application_security/secret_detection/#supported-secrets 秘钥泄露之后怎么办 首先,你应该立即作废秘钥,申请新的秘钥,然后,你可以从历史记录中完全移除秘钥。 从存储库历史记录中清除文件 警告:任何操作都无法彻底清除,因为秘钥可能已经包含在数据库中、其他分支中、已经被克隆的仓库中、fork的仓库中,一旦提交应该视为已经泄露。 如果将敏感数据(例如密码或 SSH 密钥)提交到 Git 仓库,您可以将其从历史记录中删除。 要从存储库的历史记录中彻底删除不需要的文件,可以使用 git filter-repo 工具。 从存储仓库中删除敏感数据
- 首先,请先下载安装 git-filter-repo 工具。
- 然后克隆最新的存储仓库,并进入仓库目录中。
- 执行 git filter-repo —invert-paths —path <泄露的文件路径>
- 将包含敏感数据的文件添加到 .gitignore,以确保不会意外地再次提交。
- 执行 git push origin —force —all 强制推送本地更改以覆盖线上的存储库,以及您向上推送的所有分支。 需要强制推送才能从提交历史记录中删除敏感数据。