用于在源存储库中搜索私有数据的模式

信息安全 漏洞扫描器 源代码 混帐
2021-08-14 02:20:47

我最近发现了一个案例,其中一位同事不小心将他们的登录凭据(主机、用户名和密码)提交到了本地源代码存储库,然后将这些更改推送到了 GitHub 上的公共存储库。当然,这不是一个孤立的事件——几年前,在人们在公共存储库中发现数百个私钥和其他凭据后,GitHub 终止了其全代码搜索功能。

我想确保过去我们的任何其他面向公众的存储库都没有发生过这种事情(并且,如果发生这种情况,请清理私有数据,更改暴露的密码,撤销暴露的键等)。我可以拼凑一个 shell 脚本来将过去的提交提取到给定的 Git 或 Subversion 存储库,这样我就可以扫描它们以获取私有数据。但是我应该使用什么样的文件名和文本模式?例如,我想捕获名称暗示它们包含私钥或凭据的文件(password.txt, id_dsa, id_rsa, secring.gpg,.netrc,可能还有几个我忘记或什至不知道的标准)。是否有一个涵盖最常见情况的列表?类似地,我想扫描文本和源文件的内容以查找指示硬编码登录凭据的模式。也许有人已经生成了一个正则表达式列表来开始?

2个回答

重要文件因编程语言和环境而异。例如,如果您正在运行 nginx,.htaccess默认情况下,文件不会影响服务器的行为。但是,如果有人将您的应用程序加载到 Apache 环境中,这些相同的文件可能会真正搞砸。因此,您需要根据自己的需要自定义任何列表。

不过,有些文件可能总是被认为是敏感的:

  • 私钥 ( id_rsa, id_dsa, *.pfx)
  • 影子文件 ( /etc/shadow) - 如果您在没有充分理由的情况下将这些文件检入源代码控制,那么您做错了什么!
  • 历史文件(.bash_history和类似文件)——这些文件通常有输入错误的密码,或者在命令行中用于存储的交互式工具
  • 日志文件 ( /var/log/*) - 同样,它们通常包含您可能忘记查找的详细信息

不应该在源代码管理中的更具体的文件:

  • .htaccess, .htpasswd- Apache 目录特定的配置文件
  • web.config - IIS 目录特定的配置文件
  • wp-config.php - WordPress 配置
  • sites/*/*settings*.php - Drupal 配置文件
  • *.jks - 密钥库文件
  • 等等...

Github 有一个很好的gitignore 文件内容示例,尽管这些也涵盖了由于其他原因不应该在源代码控制中的内容(例如,编译的输出通常不应该在源代码控制中,因为不是源代码......)

有一个名为“ OpenDLP ”(数据丢失防护)的应用程序可用于搜索您的网络中的敏感数据。它基于正则表达式,因此您可以将其配置为搜索您想要的任何内容:密码、知识产权中的关键字、社会安全号码、信用卡。这肯定有助于最大限度地减少数据泄漏的发生。

每当我执行渗透测试时,我都喜欢在存储库中查找数据。人为错误始终是数据泄露的主要原因。在我的渗透测试期间,我运行 OpenDLP 来帮助我搜索共享、文件服务器,你可以命名它,以搜索可能是凭据和/或密码的内容。需要解决的不仅是面向公众的系统,还有内部系统,管理员可能会在配置文件中留下对文件几乎没有保护的凭据。如果攻击者通过客户端攻击进入,这将使攻击者能够最大限度地减少对凭据的其他攻击(如果他们将密码提供给我,为什么要破解密码。)

除此之外,你真的无法用技术解决社会问题(健忘的员工)。培训和意识只能到此为止。培训的执行和测试是最重要的。花点时间让您的员工了解:“在您提交/上传/更改/部署您的工作之前,请花点时间确保您没有泄露敏感信息。任何不遵守程序的人都会受到警告,然后被停职,然后终止。”