在公共网络资产中敏感数据曝光:

网络应用的敏感数据风险分析

关键要点

在当今,几乎所有的网络应用都离不开第三方服务和
API,这意味着需要管理大量的敏感凭证。本文研究了各大网站上的敏感数据曝光情况,发现至少630个网站(占6.3%)泄露了敏感信息。我们将介绍如何利用
Invicti 进行敏感数据识别,以及常见的敏感数据类型,如 AWS 和 Google Cloud API 密钥。

什么是敏感数据?

敏感数据的定义取决于数据的类型和拥有者。一般而言,敏感数据是指一个个人、公司或机构不希望公开的信息,以避免被恶意行为人滥用。对个人而言,这通常是个人身份信息(PII);对企业来说,则可能是专有的公司信息。在网络安全领域,敏感数据包括诸如登录凭证、访问令牌和
API 密钥等重要信息。

在此研究中,我们将敏感数据定义为任何足够独特的字符串,用于访问网络资源。示例包括:

  • 访问令牌
  • API 密钥
  • 连接字符串

使用“敏感数据”这个术语是因为这些密钥需要是机密和私有的,以防止安全问题。例如,曝光 API 令牌可能允许攻击者绕过访问控制。

如何检测公共网络资产中的敏感数据

我们发现开发者有时会将密码和凭证硬编码到网页中,甚至留在注释中。基于此,我从 Invicti 获取灵感,编写了一项自定义安全检查,以寻找流行网站上最常见的
API 密钥和类似令牌。我们决定检查 Alexa 前 10,000 个网站,此外还检查了一些从 Pastebin 扫描的数据,后者是最受欢迎的公共发布网站。

Invicti 的自定义安全检查功能允许我们通过自定义脚本扩展内置的漏洞检测能力。我们可以编写主动或被动脚本,以规范攻击模式,分析 HTTP响应并在满足特定条件时报告潜在漏洞。由于我们分析的是第三方网站,故仅使用不发出额外 HTTP 请求的被动检查(与主动检查不同)。对于爬虫发送的每个 HTTP请求,我们可以编写被动安全检查脚本来分析响应。如果脚本确定响应包含敏感信息,便可在扫描器中提高漏洞风险。

后续我们将详细讲解自定义脚本的创建过程,但你也可以访问 获取整个
,其中包含针对敏感数据的已知模式。该自定义脚本用于爬取
Alexa 前 10,000 个网站及约 100 万个 Pastebin URL,搜索响应中的敏感数据。Pastebin施加了速率限制,阻止我们快速扫描,因此我们使用通过

抓取的历史数据,在自己测试环境中进行分析。

定义敏感数据的签名和正则表达式

要用安全检查查找敏感数据,首先需要决定并定义什么构成敏感数据。这需要两个条件:合适的正则表达式(regex)用于匹配特定类型的数据,以及测量识别字符串随机性())的方法。熵检查是唯一标识符的重要指标。如果字符串匹配已知访问密钥格式且看起来是随机生成的(具有足够的熵),我们可以基本确定它是敏感数据,并提升漏洞风险。

以下规则可用于检测泄露的 Amazon AWS 访问密钥 ID:

  • 以四个字符块开始:AKIAAGPAAROAAIPAANPAANVAASIAA3T 再加其他字符(A-Z, 0-9)
  • 后接 16 个随机字符

据此我们可以创建如下正则表达式:

(A3T[A-Z0-9]|AKIA|AGPA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}

接下来,需要

Leave a Reply

Your email address will not be published. Required fields are marked *