很少有数据存储库可以比GitHub更广泛地应用于代码开发生产,然而,正如老话所说的“速度越快,风险越大”。研究人员发现公共GitHub帐户具有极高泄露敏感信息的可能,数据丢失和持续泄露事件风险增加。通过适当的DevSecOps和使用GitHub事件API扫描器,组织可以大大降低泄露信息的风险。
主要发现
研究人员分析了24000多个通过GitHubs Event API上传的公共GitHub数据,发现了数千个包含敏感信息的文件,其中包括:
GitHub’s Event API
GitHub为开发人员提供了API搜索功能,可以实时地列出发布到GitHub服务器的文件和代码。每个帐户每小时限制5000个请求,API允许研究人员查看和扫描推送到Github的任何公共域内可用的文件,例如公共共享文件。有几种工具可以利用此功能,GitHub本身操作和维护GitHub令牌扫描器,可检查文件中的令牌字符串以防止欺诈和滥用。AWS的git secrets可用来扫描用户名和密码,以及其他关键字符串以防暴露。还有开源的GitHub API扫描器,如gitrob和trugglehog等,测试人员和恶意用户都可使用它们来识别潜在的敏感信息。
ShhGit Live
研究人员使用eth0izzle的shhgit来实时读取GitHub,并试图解决以下三个问题。
1、是否在文件中找到潜在的敏感数据?
2、能追踪到组织吗?
3、安全预防措施是否可以防止潜在敏感数据的不必要暴露?
简单地说,这三个问题的答案都是肯定的。研究人员发现并分析了24000多个GitHub文件,这些文件触发了shhgit的120个规则以及研究人员自定义的规则。研究人员发现一些潜在的敏感数据,包括:
4109配置文件、2464个API密钥、2328硬编码用户名和密码、2144私钥文件、1089 OAuth令牌
研究人员确认了这些数据的有效性,并能够识别文件所有者、项目名称,发布这些信息的商业公司的名称。
结果分析
硬编码密码
最关键的发现是硬编码密码,总共发现2328个用户名和密码,包括880个唯一密码,797个唯一用户名。这些密码在服务URL API和SSH配置文件中找到。研究人员指出只有18%的密码与前10个最常见的密码相关。密码“password”以72个居首,密码“secret”以51个居第二,前10个最常见密码见表1。
880个唯一密码中有817个出现了3次或更少,665个密码只出现了1次。以下是对10个密码项的采样:
p4ssW0rde
P@##w0rd
Password!
qwerty123456789
simplepass123
sqluser2019
supersecret
wilson1234567
xxxxxxxxxxxxxxxxxxxx
Z*NsqgS5$@jHsF2
从主观的角度来看一些密码是公司企业常见密码,大多数密码都符合最低密码要求,而且很容易记住,例如前两个“password”密码。然而这些密码很容易被攻击者猜到,并且经常出现在bruteforce字典列表中。示例中的其他条目是非常简单的密码,只有小写和数字组合,甚至只是字母“x”重复20次。这些密码都是“高可能性的合法密码”,因为他们展示的伪复杂性说明可能是工程师在生产环境中使用的密码。此外,由于这些密码出现在对云服务(如Redis、PostgreSQL、MongoDB和AMPQ)URL API请求中的频率很高,因此这些相同的伪复杂密码也很有可能在云环境中使用。
相比之下,研究人员只发现了27个使用可变密码的唯一实例。例如,$password,{password},或%password%。这27个唯一的密码实例只占识别出的2328个密码中的67个,不到3%。
硬编码API Key和认证令牌
研究人员在24000多个GitHub文件中识别出2464个API密钥和1998个OAuth令牌。所有发现均是唯一的,只有15个key或令牌重复4次以上,并且在所有GitHub文件中只有一个重复了12次,见表2。
由于API key和OAuth令牌为用户提供对指定云环境的直接访问,如果API密钥或OAuth令牌落入其他人手中,攻击者可能会模拟登陆并获得对环境的控制。如果在云环境中创建了具有管理权限的API密钥,使用该API密钥的任何人都可以完全访问云帐户。曾经也发生过API密钥泄漏事件,以UpGuard报告为例,攻击者通过GitHub公开了将近1GB的数据,包括AWS API密钥、日志文件等。
密钥和令牌,就像密码一样,必须加以保护和控制,确保它们只为合法用户所知。任何丢失或泄漏的API密钥和OAuth令牌都应立即撤销并重新发布。表3显示了标识的2464个API密钥和1098个OAuth令牌以及它们关联的环境。
配置和私钥文件
配置文件是规则识别最高的文件类别,在24000个文件中占了近17%。最常见的配置文件类型是Django配置文件,它包占所有配置文件类型的三分之一以上,见表4。Django是一个基于python的web框架。PHP也是web设计中常见的脚本语言,位居第三。这些基于web的配置文件可能会公开组织的云基础设施,使攻击者能够轻松访问云服务器内部。
研究人员发Shell、SSH、profile和Git配置文件也出现在标识的配置文件前十个列表中。近80%的配置文件包含用户名或密码、API密钥或OAuth令牌。
总结
研究人员发现用户将敏感数据上传到GitHub,这些敏感数据包括:
硬编码用户名和密码、硬编码的API密钥、硬编码OAuth令牌、内部服务和环境配置
研究人员强烈建议,彻底扫描从公共存储库(如GitHub)中提取的每个IaC模板是否存在漏洞。几乎一半的扫描包含一个潜在的易受攻击的配置,用户部署易受攻击的云模板的可能性很大。此外,应使用GitHub API扫描器来防止在GitHub公开敏感的内部信息。
补救措施
研究人员建议采用以下缓解措施,确保配置文件不会公开泄漏敏感信息:
1、实现基于变量和CLI参数的代码,从代码中删除硬编码的用户名和密码、API密钥和OAuth令牌。
2、实施密码安全策略,强制使用复杂密码
3、执行发布政策,规范和防止从外部共享内部敏感数据。
4、使用GitHub的企业帐户功能,确保公共共享安全。
5、使用AWS git secrets、GitHub的TokenScanner、gitrob或trugglehog等工具来识别和删除公开发布的令牌等敏感信息。
*参考来源:unit42,由Kriston编译,转载请注明来自FreeBuf.COM