如何在AWS上发现数千个开放数据库
我在寻找和报告包含财富500强公司、医院、加密平台、初创企业尽职调查期间敏感数据数据库的过程。
目录
- 概述
- 背景
- 我的假设
- 扫描
- 数据分析与可视化
- 我发现的数据示例
- 结论
概述
通过扫描托管服务的CIDR块(IP范围),很容易在云服务上找到配置错误的资产,因为这些信息是由云服务商公开发布的。
在短短1天内,我发现了数千个ElasticSearch数据库和Kibana仪表板,这些很可能由于错误配置而暴露了敏感信息:
- 客户敏感信息:电子邮件、地址、当前职业、薪资、私人钱包地址、位置、银行账户等
- Kubernetes集群写入的生产日志:从应用程序日志到内核和系统日志
- 从所有节点、Pod和应用程序收集的日志集中在一处,向全世界开放
- 部分数据库已被勒索软件破坏
背景
有很多资产在其范围之外监听,等待被发现。已发布的CIDR块使攻击者更容易找到这些资产,传播各种恶意软件,或获取真实公司的敏感数据。
DevOps、开发人员和IT从业者经常错误配置以下内容:
- 在错误的网络接口上绑定套接字
- 为集群配置错误的安全组(允许来自广泛CIDR块的所有TCP和所有UDP)
- 使用默认网络或子网,子网设置被派生,公共IPv4地址被静默分配
假设
我假设如果从云运营商内部(实例/VPS)扫描特定的CIDR块,我可以轻松找到配置错误的资产,这主要是由于人为错误。
关键是智能扫描,利用预先已知的网络基础设施(我们想要扫描的软件的已知CIDR块)来找到可访问的实时服务器。
扫描
从AWS获取ElasticSearch服务的CIDR块
某些CIDR块只能从云提供商内部访问。您只需要在要扫描的云提供商内部启动具有互联网连接的VPS/实例。
需要什么来找到它们?
- 对网络、IP堆栈和路由以及云基础设施的基本理解
- 轻量级端口扫描工具(如MasScan或NMap)
- 要扫描的CIDR块列表(托管服务,如Kubernetes或ElasticSearch)以及这些IP范围内实例最可能开放的端口
- 可视化收集数据的工具(如ElasticSearch+Kibana)
端口扫描 - 收集资产数据
我使用MasScan扫描选定CIDR块上的开放端口。MasScan是TCP端口扫描器,它异步发送SYN数据包。
输入是CIDR块(例如50.60.0.0/16或118.23.1.0/24)和我们想要扫描的端口(9200、5600、80、443等)。
我使用Docker镜像在实例上启动了ELK堆栈。在同一台机器上启动MasScan,开始扫描CIDR块。使用LogStash将MasScan的输出(响应日志)流式传输到ElasticSearch,并通过Kibana可视化所有内容。
在扫描期间,TCP响应被记录并索引到ElasticSearch中。我让它运行了一会儿,很快就扫描了337,000多个IP和端口组合,其中许多是开放的。
分析与可视化数据
照片经过审查。我已向相关方和AWS报告了这些事件,并获得了他们继续发布此文章的许可。
大多数方在一两天内解决了问题,但有些至今仍忽略报告。
得益于我创建的管道,我有实时日志,可以在扫描更多内容时立即开始查看服务。
我使用Kibana的导出按钮将运行的资产从Kibana导出到CSV文件,然后使用pandas(python)加载它。
对于每个IP,我发送HTTP HEAD请求并获取带有资产指纹的HTTP响应。我消除了需要身份验证的响应,然后从HTTP响应中打印它们的网页标题。
我们可以对ElasticSearch端口或任何服务执行相同操作。IP已被MasScan扫描,所以我假设它们是运行的。
现在,我拥有了所有资产及其网页名称的列表。我在浏览器中通过在地址栏输入它们来探索这些地址。
然后,我仔细探索了这些资产,一次一个。我搜索了以下内容:
/_aliases/<index>/_search
这个ElasticSearch REST API非常方便。很容易获取字段元数据、文档计数以及您想了解的有关ES集群的所有信息。
我发现的数据示例
整个生产集群的Kubernetes日志
通过fluentd流式传输的K8集群日志,包含实时URL和内核日志。
使用私钥成功SSH登录
SSH守护进程日志 - 集群机器。实时日志。
完整的云可见性
由于K8和ElasticSearch集群配置错误,实例类型、AMI、账户ID对全世界可见。
私有仪表板
一些公司已将Jira任务流式传输并发布到其ElasticSearch仪表板中,包括客户数据、代码示例、账户名称等。这个Kibana仪表板包含了公司研发的所有信息。
该公司正处于尽职调查过程的中期(或高峰),在我报告此事件几周后,他们报告筹集了大量资金。如果其他人发现了这一点,对他们来说可能是致命的。
医院/医疗供应 - 个人疫苗接种信息
疫苗接种日期和电子邮件地址。
加密交易平台
加密代币交换。
银行业
银行转账以及全名和银行账户详细信息。
实时车队指标
关于每辆车的信息:
- IMEI(唯一蜂窝标识符)
- 位置(坐标)
- gsm信号强度
- 燃油状态
- 错误代码
- 电池状态
这是真实的吗?
有时我难以理解数据库是真实的还是蜜罐。所以,我在谷歌上搜索了在数据库中找到的任何内容。通常,我找到了真实网站,并知道向谁报告。
已被勒索软件攻击的服务器
如果您的集群向全世界开放,则不需要0-day来运行勒索软件。如果您没有身份验证,任何人都可以访问所有内容。
正如您所看到的,我发现的一些资产已经被"黑客攻击"(不是被黑客攻击,而是被勒索软件破坏)。
像elasticsearch-dump这样的工具可用于备份(和恢复)数据库。备份后,他们从集群中删除所有内容,留下此消息:“您的所有数据都已备份。您必须支付0.16BTC到…”
安全与隐私政策
正如您可以想象的,我发现的许多组织都符合GDPR。这意味着他们对数据泄露很敏感,他们有DPO(数据保护官)积极搜索和处理此类事件。
一些DPO没有回复,一些DPO的邮箱因权限错误拒绝了我的电子邮件(他们不允许接收组织外部的电子邮件)。
对于某些公司,DMARC和SPF记录不允许从其邮件服务器接收来自公司外部的电子邮件。多么混乱,他们根本无法通过电子邮件联系到。
我还向姊妹公司和其他子公司发送了电子邮件。我尝试通过他们网站的联系表格联系他们。没有任何回应。我不得不通过CEO、CTO和VPS开始对话。
至于那些忽略的公司,他们的资产和数据至今仍然暴露,他们不在乎。
结论
在端口扫描方面,按服务发布CIDR块是一个逻辑问题。我们出于多种原因需要它,但同时它对云提供商构成了如此巨大的风险,使他们的客户容易被扫描。
错误配置一直在发生,并且会持续存在,在不知情的情况下导致公司安全出现许多漏洞。
我们经常犯错,在配置实例时使用默认VPC子网。因此,许多实例自动分配了公共IP地址。
问题始于缺乏可见性。据我所知,目前AWS内部没有人积极搜索配置错误的数据库或托管服务。这超出了他们的范围。
我报告了我发现的公司,直到某个限制(有太多),我无法独自联系到他们所有人。
在与AWS的电子邮件对话中,他们声称配置和保护其资产是公司的责任,他们没有积极搜索这种错误配置。这有道理,但我发现这出乎意料地容易,他们可以毫不费力地解决它。
我在业余时间自己完成了这项工作,做得相当好。
目前,我们所能做的就是假设错误配置总是可能的,无论公司规模如何,并且总是有人从网络中看到您。如果您向世界开放服务,至少使用适当的授权和身份验证。
顺便说一句,我是在业余时间做这件事的。我也真的很喜欢咖啡!
感谢您阅读到这里。如果您喜欢我的作品,或者您提供漏洞赏金计划,请告诉我。如果您有任何问题,欢迎联系我或评论。