什么是秘密? 在本文档中,当我们使用“机密”一词时,我们指的是用于身份验证或授权的任何内容,最常见的是API密钥,数据库凭据或安全证书。
第一步,呼吸:在大多数情况下,如果您认真遵循本指南,则只需几分钟即可消除大部分潜在损害。 这篇文章将介绍消除风险并确保将来不会发生这种风险所需的四个步骤。
如果删除文件或存储库,那么我安全吗?
抱歉不行。 如果将存储库设为私有或删除文件,则可以降低新发现有人泄漏的风险,但现实情况是,对于那些知道在哪里查找的人来说,您的文件很可能仍然存在。 Git会保留您所做的所有操作的历史记录,因此即使删除该文件,该文件仍将存在于git历史记录中。 即使将存储库设为私有,删除您的历史记录或什至删除整个存储库,您的秘密仍然会受到威胁。
有很容易的方法来监视公共git存储库,例如,GitHub有一个公共API,您可以在其中监视每个进行的git提交。 这意味着任何人都可以(并且确实可以)监视此API,以在存储库中查找凭据和敏感信息。 出于这个原因,最好假设如果您泄露了一个秘密,它将永远被泄露。
将机密泄漏到GitHub上然后将其删除,就像不小心发布了一个令人尴尬的推文,将其删除,只是希望没人能看到它或截屏。
我们需要做的第一件事是确保您公开的秘密不再有效,因此没有人可以利用它。
如果您需要有关如何撤消密钥的具体建议,请参阅我们的API最佳做法中的说明 。
如果此密钥属于您工作的组织,那么与组织的高级开发人员进行交流非常重要。 让您的公司知道您泄露了敏感信息可能会很可怕,尤其是如果这些信息发生在个人存储库中。 但是诚实是最好的方法,公司很可能已经发现了漏洞,如果问题得到解决并且您真诚地关心,则可以原谅错误。
不要希望问题会消失-错误会发生,最好是诚实坦率。
你知道吗?
松弛键是稀有的API令牌之一,它们能够自动撤消! 就像使用auth.revoke端点一样简单!
一旦秘密被撤消,就不能再使用了。 但是,拥有任何凭证,甚至是过期的凭证,可能看起来都不专业,并引起关注。 此外,还有一些无法撤销的秘密(例如数据库记录),或者没有人可以保证的凭证被正确地撤销(例如,可以在许多不同地方使用的SSH密钥)。 因此,我们将逐步介绍如何删除其历史记录,请注意,这不是一项琐碎的任务,建议您寻求高级开发人员的指导。
一个。 删除您的存储库或将其设为私有
通常,先花点时间买个好主意:导航到GitHub存储库,然后单击“ 设置 ”。
然后,一直到“危险区域”,然后单击“ 设为私有 ”以对公众隐藏存储库。
注意:如果您希望进行备份,请单击“删除此存储库”。 您稍后将其推回。
您可以稍后将存储库推回。
b。 重写git历史
Warning️警告在进入之前,应注意重写.git历史记录不是一件容易的事,尤其是在有很多开发人员为您的存储库做贡献的情况下。 您将不得不完全删除存储库,然后将清理后的版本推回,或者git push --force到您的初始存储库。 在这两种情况下,您都将完全中断其他贡献者的工作流程。
我们将使用著名的BFG Repo-Cleaner 。
BFG是git-filter-branch的更简单,更快(10-720x更快)的替代品,用于清除Git存储库中的不良数据
假设您提交了一个敏感文件config.py ,其中包含一个秘密密钥。
一世。 确保已安装Java。
ii。 克隆您的存储库
git clone https: //github.com/YOUR-USER-NAME/YOUR-REPOSITORY.git
iii。 删除敏感文件
当前分支上的最新提交受BFG保护,因此您必须确保它是干净的。 删除“ config.py”并提交更改
与当前分支不同的分支不受保护,因此,如果在其他分支上可以找到“ config.py”,BFG将清除该分支。
git commit -m "clean commit"
iv。 运行BFG
从他们的网站下载最新版本的BFG,将Java文件移到您的存储库中并运行以下命令
注意:将bfg-VERSION替换为最新版本(bfg-1.13.0)
java -jar bfg-VERSION .jar YOUR-REPOSITORY/ .git --delete-files "config.py"
vi。 查看您的历史记录
您可以使用log-p命令显示每次提交中引入的差异(称为“补丁”)。 如果浏览不同的分支,应该会看到一切都很好。
git log - p
七。 向后推存储库
创建一个新的存储库并将其推回。 确保每个人都删除了旧克隆并正在使用您的新版本。
你知道吗?
即使git通过拒绝非快进推送请求阻止您覆盖中央存储库的历史记录,您仍然可以使用--force标志来推送更改。 这将迫使您的远程分支与您的本地分支相匹配。 但是请小心,这是一个危险的命令!
这非常重要,具体取决于泄漏的密钥。 有时,一个访问密钥泄漏会产生多米诺骨牌效应,并导致暴露新的机密。 例如,对Slack的访问密钥可能会给演员带来不好的访问权限,使他们无法访问包含新凭据和访问代码的消息,因此对于确保没有可疑数据非常重要!
检查访问日志确实取决于泄漏的凭据的类型。 例如,AWS日志有时会集中到Cloudwatch中。 Slack具有专用的API端点,该端点允许访问审核日志。 这可能是您与SRE或Application Security团队保持紧密联系以确保一切正常的好时机!
因此,该凭证已被撤消,存储库历史记录已被清除。 我现在该怎么办? 现在您已经感到恐惧,现在是开始实施一些良好做法的好时机。
GitGuardian是一个好人服务,可实时扫描公共存储库中的每个GitHub提交以查找泄漏。
注册GitGuardian
为了将来更好地保护您的秘密,我们建议您阅读我们的API最佳做法指南 。 它提供了许多有用的提示,以确保您将来不会意外泄露机密。
作者注意:这篇文章最初写在 GitGuardian的博客上
From: https://hackernoon.com/exposing-secrets-on-github-what-to-do-after-leaking-credentials-and-api-keys-58dy3yqp