当前位置: 首页 > 科技观察

敏感数据暴露,留给Git的时间只有20秒!_0

时间:2023-03-17 01:16:42 科技观察

作者|codingwoman翻译|布加迪规划|严正大家可能都会遇到这样的冷汗情况:在使用Git做版本控制的时候,不小心push了一个重要的key或者一个非常大的文件?请注意,敏感数据公开暴露20秒后,删除这些密钥可能为时已晚!做错事的人能逃避吗?本文将分享和介绍作者正在使用的几个好技巧,让你在使用Git的时候再也不用担心了。1.永远不要推送不必要的文件和信息Git中的一类不必要的内容是非常大的文件。如果您不小心将一个大文件提交到存储库,这肯定会限制您拉取或推送文件所花费的时间;如果文件大于100MB,它甚至会显示错误。其次,作为软件开发社区的一员,我应该听过很多次这样的忠告:永远不要将机密信息推送到存储库。资源有限的攻击者可以通过窃取泄露的秘密和密钥来危及许多GitHub用户。然而,许多同事并不认真对待它。因此,我想分享一些统计数据。我可以在再次提交后删除它吗?不,事实上,这比刚刚发生的事情还要危险。不要天真地假设当他们从存储库中删除文件时,该文件将无法再访问。这正是Git的用途。它会跟踪您的文件版本历史记录,以便您可以根据需要还原更改。通过承诺以下列方式删除文件,您会将Internet上的陌生人引导至存储加密文本的位置。$gitcommit–m"Removeapikey"只需搜索一下,看看这样做的频率。更具体地说,截至2023年1月5日,当作者撰写本文时,GitHub上的搜索查询“removeapikey”返回了100万+次提交,查询“removepassword”返回了735K+次提交。随着ChatGPT越来越受欢迎,人们试图编写Python脚本来试用它,我发现无数的OpenAIAPI密钥散落在GitHub上。这将造成严重的后果!二、我该怎么办?当我们考虑从Git历史中删除一个提交时,首先想到的是立即将分支的尖端更改为旧提交。这让我们安全地回到存储库中不存在密钥的时候。1$gitreset2$gitcommit-ammessage3$gitpush-f1.但是已经有一段时间了,是不是来不及了?好吧,如果你的问题与大文件有关,你总是可以使用gitfilter-branch从历史中删除过去的信息/文件。此外,还有一种我经常使用的优秀而简单的方法。认识BFG-Repo-Cleaner!它是一个用Scala编写的工具,可以删除大文件(如预训练模型或无法丢弃的大PDF文件)或麻烦的blob(如API密钥、密码和密文),其功能类似于git过滤器分支,但速度更快。GitHub官方也推荐使用BFG-Repo-Cleaner来清理文件。说明:我最近得知gitfilter-branch已被弃用。现在可以使用gitfilter-repo或直接使用上面提到的BFG工具。2.我可以松一口气吗?不,还没有释然。当然,您始终可以使用此工具删除大文件。但是,在将不必要的凭据推送到公共存储库之前,仍然应该小心。如果您最近在GitHub上泄露了密文,您应该尽快使用上述工具恢复密文。此前,一篇名为《Git会有多糟糕?揭秘公共GitHub存储库中的密文泄露》的论文首次在GitHub上对泄露的密文进行了分析。在论文中,研究人员评估了两种不同的密文挖掘方法:一种实时发现99%的新提交文件包含密文,另一种利用大型快照覆盖13%的公共存储库,其中一些快照可以追溯到GitHub被创建。您认为找到的大部分密钥都用于测试吗?那么,这里有一些可怕的消息要告诉您:研究人员估计,所有已发现的密文中有89.10%是敏感信息。几个趋势:密文减少最明显的是在发现后的第一个小时内,所有发现的密文中有6%被删除。存在超过一天的密文往往会持续很长时间——超过12%的密文在第一天结束时消失,而16天后这一比例为19%。密文和文件的删除速度比代码库的删除速度快得多:用户没有删除代码库,而是创建了新的提交来删除文件或密文。最后,最重要的结论:GitHub上共享的密文的平均发现时间在20秒左右,从半秒到4分钟不等,而且密文推送时间无关紧要。所以你一不小心推了之后,留给你补上的时间比想象中少了很多。3.结论GitHub应该有更严格的政策或检查可能暴露密文的提交。或者至少将新注册的帐户指向相应的文档以发出警告。笔者认为这对于刚刚开始编程之旅的新人来说尤为重要。开发人员(尤其是新手)应该知道如何安全地发布源代码,以及忽视它可能带来的后果。如何避免意外提交?这里有一些建议:避免使用像gitadd这样的包罗万象的命令。或者gitcommit-a,改用gitaddfilename。单独暂存文件还可以更好地跟踪提交的更改。您始终可以在流行的文本/源代码编辑器(例如VisualStudioCode)的源代码控制组件中使用暂存选项。始终检查您的文件更改。使用gitdiff--cached来关注工作树上的变化。还有其他类型的工具可以帮助您避免提交秘密,例如git-secrets。您还可以使用预提交挂钩。原文链接:http://www.codingwoman.com/git-the-good-the-bad-and-the-ugly/