超 100000 个 GitHub 代码库泄露了 API 或加密密钥

 每天成千上万新的 API 或加密密钥通过 GitHub 项目泄露出去。

六个月期间扫描 GitHub 公共代码库总数中 13% 的数十亿个文件后发现,超过 100000 个代码库泄露了 API 令牌和加密密钥,每天数千个新的代码库在泄露新的秘密内容。

这次扫描是北卡罗来纳州立大学(NCSU)的团队开展的一项学术研究的课题,研究结果已交给 GitHub,GitHub 看到调查结果后采取了行动,加快开发一项名为令牌扫描(Token Scanning)的新安全功能,目前该功能处于测试阶段。

研究人员扫描了数十亿个 GitHub 文件

NCSU 的这项研究是迄今为止对 GitHub 最全面和最深入的扫描,超过之前的任何同类研究。

2017 年 10 月 31 日至 2018 年 4 月 20 日,NCSU 的研究人员扫描了多个 GitHub 帐户,扫描时间持续近六个月,寻找 API 令牌和加密密钥等格式的文本字符串。

他们不仅使用 GitHub Search API 来寻找这些文本模式,就像之前的其他研究工作一样,还查看了谷歌的 BigQuery 数据库中记录的 GitHub 代码库快照。

在这六个月期间,研究人员分析了无数 GitHub 代码库当中的数十亿个文件。

在上个月发表的一篇研究论文中,NCSU 的三人团队表示,他们使用 GitHub Search API 获取并分析了代表 681784 个代码库的 4394476 个文件,以及代表谷歌的 BigQuery 数据库中记录的 3374973 个代码库的另外 2312763353 个文件。

NCSU 团队扫描了 11 家公司的 API 令牌

研究人员在这庞大的文件堆中寻找采用特定的 API 令牌或加密密钥格式的文本字符串。

由于并非所有的 API 令牌和加密密钥都采用同样的格式,因此 NCSU 团队决定使用 15 种 API 令牌格式(来自属于 11 家公司的 15 项服务,其中 5 家来自 Alexa Top 50)和 4 种加密密钥格式。

这包括谷歌、亚马逊、Twitter、Facebook、Mailchimp、MailGun、Stripe、Twilio、Square、Braintree 和 Picatic 使用的 API 密钥格式。

许多流行 API 的密钥有着独特的结构,一旦泄密,将导致安全风险。

结果立马出来了,研究项目发现每天数千个 API 和加密密钥泄露出去。

总的来说,NCSU 团队表示他们发现了 575456 个 API 和加密密钥,其中 201642 个具有独特性,它们都散布于 100000 多个 GitHub 项目中。

合并数据集中的秘密内容绝大多数被单一所有者使用。

研究团队在学术论文中披露,使用谷歌 Search API 找到的“秘密内容”和通过谷歌 BigQuery 数据集发现的“秘密内容”也很少有重叠。

研究人员说:“合并两个数据集后,我们确定这两个数据集中出现了 7044 个秘密内容,占总数的 3.49%。这表明我们的方法在很大程度上是互补的。”

此外,大多数 API 令牌和加密密钥(93.58%)来自单一所有者帐户,而不是多个所有者代码库。

这意味着 NCSU 团队发现的绝大多数 API 和加密密钥很可能是实际环境中使用的有效令牌和密钥,因为多个所有者的帐户通常往往包含用于共享测试环境和开发阶段代码的测试令牌。

泄露的 API 和加密密钥停留数周

由于研究项目是在六个月的期间内进行,研究人员还有机会观察帐户所有者是否以及何时认识到自己泄露了 API 和加密密钥,并从代码中删除敏感数据。

该团队表示,他们跟踪的 API 和加密密钥中有6% 在泄露后一小时内被删除,这表明这些 GitHub 所有者立马意识到了所犯的错误。

超过 12% 的密钥和令牌一天后消失,而 19% 的密钥和令牌最多停留了 16 天。

研究人员说:“这也意味着我们发现的秘密内容中 81% 没有被删除。这 81% 秘密内容的开发人员很可能不知道秘密内容被泄露,或者低估了泄露的风险。”

短期和长期监测秘密内容

研究团队发现了一些重大泄露

研究人员开始研究其中一些内容是从何处泄露时,这种扫描的重要性显露出来。

NCSU 团队说:“有一次,我们发现了我们认为是美国数百万大学申请者所依赖的一大网站的 AWS 登录信息,可能是由承包商泄露的。”

“我们还找到了一个西欧国家的主要政府机构的网站的 AWS 登录信息。在这种情况下,我们能够证实该帐户的有效性,甚至证实提交秘密内容的特定开发商。该开发商在网上声称拥有近 10 年的开发经验。”

在另一个案例中,研究人员还发现了 564 个谷歌 API 密钥,这些密钥被一家在线网站用来规避 YouTube 的速率限制,并下载以后托管在另一个视频共享门户网站上的 YouTube 视频。

NCSU 的研究人员说:“由于密钥数量非常多,我们怀疑(但无法确认)这些密钥可能是以欺诈手段获得的。”

最后但并非最不重要的是,研究人员还在 OpenVPN 配置文件中发现了 7280 个 RSA 密钥。研究人员发现,通过分析这些配置文件中的其他设置,绝大多数用户禁用了密码身份验证,完全依赖 RSA 密钥进行身份验证,这意味着凡是发现这些密钥的人都可以访问成千上万的私密网络。

研究人员使用其他 API 令牌扫描工具分析他们自己的数据集以确定扫描系统的效率时,扫描结果的高质量也显露无遗。

研究团队说:“我们的研究结果表明,TruffleHog 在检测机密内容基本上无效,因为它的算法只检测到我们的 Search 数据集中 25.236% 的秘密内容和 BigQuery 数据集中 29.39% 的秘密内容。”

GitHub 获悉后忙于补救

北卡罗来纳州立大学计算机科学系助理教授 Brad Reaves 今天接受 ZDNet 的采访时表示,他们在 2018 年将这项研究的结果告知了 GitHub。

Reaves 说:“我们与 GitHub 讨论了结果。对方启动了一个内部项目,几乎就在我们完成研究的同时,检测并告知开发人员泄露的秘密内容。该项目于 2018 年 10 月公开承认。”

“我们被告知 GitHub 在监测研究文档中列出的秘密内容之外的更多秘密内容,但我们没有获得进一步的细节。”

Reaves 补充道:“由于这种类型的泄露很普遍,我们很难通知所有受影响的开发人员。我们面临的诸多挑战之一就是,我们根本无法获得大批 GitHub 开发人员的安全联系信息。”

“在我们的论文发表时,我们试图与 GitHub 合作以通知开发人员,但考虑到我们的令牌扫描与 GitHub 的有重叠,他们觉得没必要另外通知。”

API 密钥泄露是已知问题

开发人员在众多应用程序和网站的源代码中留下 API 和加密密钥,这不是什么新问题。亚马逊已敦促互联网开发人员扫描代码,从早至 2014 年的公共代码库中删除任何 AWS 密钥,甚至发布了一个工具来帮助他们向公共代码库提交任何代码之前扫描代码库。

一些公司已主动负起责任,扫描 GitHub 及其他代码共享库,查找无意中泄露的 API 密钥,抢在 API 密钥所有者注意到泄露或滥用之前撤销令牌。

NCSU 开展这项研究是为了最深入地研究这个问题。

Reaves 称:“研究结果表明,开源软件代码库中的登录信息管理对于新手和专家来说仍然具有挑战性。”

Reaves 与 Michael Meli 和 Matthew R. McNiece 共同撰写的这篇论文题为《Git 会有多糟糕?细述公共 GitHub 代码库中的秘密内容泄露》

  • 发表于:
  • 原文链接http://news.51cto.com/art/201903/593806.htm
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券