每天成千上万新的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称:“研究结果表明,开源软件代码库中的登录信息管理对于新手和专家来说仍然具有挑战性。”
作者微信公众号:云头条