黑客正在谷歌搜索你的纯文本密码:防止敏感数据泄露
上周,我写了一篇关于在我们的网站和应用程序中妥善处理用户输入的重要性的文章。我提到了一个至关重要的安全教训,我希望今天能够更清楚地阐明:我们的软件、应用程序和客户数据的安全性是从零开始构建的,远在产品上线之前。
OWASP Top 10是一份全面的 Web 应用程序安全风险指南,深受技术专业人士、企业以及网络安全或信息安全相关人士的信赖。最新发布的 OWASP Top 10 将敏感数据泄露列为第三大关键 Web 应用程序安全风险。该风险的具体描述如下:
许多 Web 应用程序和 API 未能妥善保护敏感数据,例如财务数据、医疗保健数据和 PII。攻击者可能会窃取或修改这些保护薄弱的数据,从而进行信用卡欺诈、身份盗窃或其他犯罪活动。如果没有额外的保护(例如静态或传输加密),敏感数据可能会被泄露,并且在与浏览器交换时需要采取特殊的预防措施。
“敏感数据泄露”是一个包罗万象的类别,涵盖了各种来源的数据泄露,从薄弱的加密算法到未强制执行的加密,不一而足。然而,这种安全风险最简单的来源,用更少的词就能描述出来:人。
“预防胜于治疗”这句话不仅适用于医学,也适用于安全软件开发。在安全软件开发领域,这被称为“向左推进”,这是一个相当不直观的术语,指的是在软件开发生命周期 (SDLC) 的早期而不是后期建立安全最佳实践。在 SDLC 的“左侧”建立规程,有助于确保参与创建软件产品的人员从第一天起就妥善处理敏感数据。
不幸的是,大量的安全测试似乎经常发生在 SDLC 的右侧很远的地方;对于一些安全问题(例如敏感数据泄露)的预防来说已经太晚了。
我是即将发布的OWASP 测试指南的作者之一,最近扩展了搜索引擎发现侦察(现在的年轻人称之为“Google dorking”)的部分内容。这是一种方法,可以说是安全测试人员(或黑帽黑客)在互联网上查找暴露的敏感数据最容易的方法。以下是该部分的摘录(目前正在 GitHub 上进行开发,将在 v5 版本中发布):
搜索运算符
搜索运算符是一种特殊的关键字,它扩展了常规搜索查询的功能,并有助于获得更具体的结果。它们通常采用 的形式
operator:query
。以下是一些常用的搜索运算符:
site:
将限制搜索范围到提供的 URL。inurl:
仅返回 URL 中包含关键字的结果。intitle:
仅返回页面标题中包含关键字的结果。intext:
或者inbody:
只会在页面正文中搜索关键字。filetype:
将仅匹配特定的文件类型,即 png 或 php。例如,要查找典型搜索引擎索引的 owasp.org 的网络内容,所需的语法是:
site:owasp.org
…
Google Hacking,或者 Dorking
使用运算符进行搜索,结合测试人员的创造力,可以成为一种非常有效的发现侦察技术。运算符可以串联起来,有效地发现特定类型的敏感文件和信息。这种技术被称为Google hacking或 Google dorking,只要支持搜索运算符,其他搜索引擎也可以使用。
诸如Google Hacking Database之类的黑客数据库是一种有用的资源,可以帮助发现特定信息。
定期检查搜索引擎结果对安全测试人员来说可能是一项卓有成效的工作。然而,当搜索site:myapp.com passwords
无果时,可能还太早,不适合休息。以下是安全测试人员可能还会关注的几个暴露在外的敏感数据来源。
Pastebin
Pastebin自称是“自 2002 年以来排名第一的粘贴工具”,它允许用户临时存储任何类型的文本。它主要用于与他人共享信息,或在另一台机器(也许是另一个位置)上检索您自己的“粘贴”。Pastebin 可以轻松共享大量复杂的文本,例如错误日志、源代码、配置文件、令牌、API 密钥……这些是什么?哦,对了,它默认是公开的。
以下是我为公共漏洞赏金计划所做的一些小改动的截图。
一目了然的 API 密钥。
登录详细信息公开。
部分由于使用 Pastebin 和类似网站的便利性,似乎有些人在公开敏感数据之前没有三思而后行。
但为什么?
当然,拥有应用程序访问权限的非技术员工可能不了解哪些内容应该或不应该被自由共享。不熟悉加密数据是什么或它是什么样子的人可能无法意识到加密字符串和由许多随机字母和数字组成的未加密令牌之间的区别。即使是技术人员,在辛苦工作一天后也可能会遗漏一些事情、犯错或粗心大意。人们可能很容易将其称为培训问题,然后就此打住;然而,这些解释都无法解决问题的根本原因。
当人们寻求外部解决方案来解决问题时,通常是因为他们没有找到同样有吸引力的内部解决方案,或者根本不知道有这样的解决方案。员工使用粘贴功能来共享或移动敏感数据,是因为他们没有更简单、更便捷、更安全的内部解决方案可供选择。
减轻
参与创建和维护 Web 应用程序的每个人都应该了解有关敏感数据保护的一些基本事项:
- 什么构成敏感数据,
- 纯文本和加密数据之间的区别,以及
- 如何正确传输和存储敏感数据。
对于第三方服务,务必确保员工知晓某些传输可能未加密,或可能被公开搜索。如果目前没有安全的内部共享和存储敏感数据的系统,那么这是一个很好的起点。应用程序数据的安全掌握在团队中每个人的手中,从行政人员到高管。确保员工拥有安全工作所需的工具。
公共存储库
开发人员因将敏感信息随意放置在不该去的地方而臭名昭著(是的,我也这么做过!)。如果没有强有力的“左推”机制来处理令牌、密钥和密钥,这些小秘密最终可能会在 GitHub、GitLab 和 Bitbucket 等网站上被完全公开。2019年的一项研究发现,仅在 GitHub 上,每天就有数千个新的、独特的密钥被泄露。
GitHub 已经实施了诸如令牌扫描之类的措施,GitLab 11.9也引入了秘密检测。虽然这些工具旨在减少秘密被意外提交的可能性,但坦率地说,这实际上并非它们的职责。秘密扫描并不能阻止开发人员提交数据。
但为什么?
如果没有明确的流程来管理密钥,开发人员可能会过于倾向于“赶紧完成”的本能。有时,这会导致一种权宜之计但不负责任的做法,将密钥存储为程序中的未加密变量,或许是出于临时目的。然而,这些变量最终还是会被遗忘,最终被提交。
减轻
拥有强大的“左推”文化意味着确保敏感数据得到妥善存储,并在任何人准备提交数据之前就能安全地检索。实现这一目标的工具和策略唾手可得。以下是一些支持“左推”方法的工具示例:
- 使用管理工具来存储和控制对密钥和机密的访问,例如Amazon Key Management Service或 Microsoft 的Azure Key Vault。
- 利用 CI 工具中的加密环境变量,例如Netlify 的环境变量或GitHub Actions 中的虚拟环境。
- 制作一个强大的
.gitignore
文件,让团队中的每个人都可以参与并使用。
我们也不必完全依赖公共存储库来捕获那些可能仍然存在的错误。可以设置 Git 预提交钩子,使用正则表达式扫描已提交的机密信息。有一些开源程序可以实现这一点,例如ThoughtWorks 的 Talisman和AWS 实验室的 git-secrets。
向左推以防止敏感数据泄露
稍加思考就能明白,为什么在敏感数据存在之前就开始管理它至关重要。通过在 SDLC 的早期阶段建立安全最佳实践,我们为员工提供了最佳机会,让他们能够更好地防范未来任何针对我们软件产品的攻击。
检查我们数据安全性的另一个重要资源是 Troy Hunt 的Have I Been Pwned,这是一项将您的数据(例如您的电子邮件)与以前数据泄露中泄露的数据进行比较的服务。
要了解更多主动保护应用程序安全的方法,OWASP 的《主动控制》出版物是一个很好的资源。即将发布的OWASP 测试指南中还会详细介绍如何创建“左推式”安全方法。如果您对这些主题感兴趣,我鼓励您阅读、学习并做出贡献,这样更多的人就能让敏感数据更难被发现。
文章来源:https://dev.to/victoria/hackers-are-googling-your-plain-text-passwords-preventing-sensitive-data-exposure-45n6