网络安全中的子域名接管与竞态条件漏洞解析
子域名接管漏洞概述
子域名接管可能带来多种安全风险。若攻击者控制了如
test.<example>.com
这样的子域名,他们可能会窃取访问该恶意子域名的目标用户的
<example>.com
饼干(cookies)。另外,即使饼干没有以这种方式被作用域限制,恶意攻击者仍可以在子域名上创建一个模仿主域名的网站。如果攻击者在子域名上设置了登录页面,就有可能诱使用户提交他们的凭证。
查找子域名接管漏洞可以通过查看网站的 DNS 记录来实现。使用 KnockPy 工具是一个很好的方法,它可以枚举子域名并搜索像 S3 这样的服务中常见的与子域名接管相关的错误消息。KnockPy 自带了一份常见子域名列表用于测试,你也可以提供自己的子域名列表。GitHub 仓库 SecLists(https://github.com/danielmiessler/SecLists/)在其众多与安全相关的列表中也列出了常见的子域名。
子域名接管案例分析
| 案例名称 | 难度 | URL | 来源 | 报告日期 | 赏金 | 漏洞原因 |
|---|---|---|---|---|---|---|
| Ubiquiti 子域名接管 | 低 | http://assets.goubiquiti.com/ | https://hackerone.com/reports/109699/ | 2016 年 1 月 10 日 | $500 | Ubiquiti 创建了 CNAME 记录指向 S3 存储桶,但未注册该存储桶或移除存储桶后未删除 CNAME 记录 |
| Scan.me 指向 Zendesk | 低 | http://support.scan.me/ | https://hackerone.com/reports/114134/ | 2016 年 2 月 2 日 | $1000 | Scan.me 所有者创建 CNAME 记录指向 Zendesk,被 Snapchat 收购后释放子域名但未删除 CNAME 记录 |
| Shopify Windsor 子域名接管 | 低 | http://windsor.shopify.com/ | https://hackerone.com/reports/150374/ | 2016 年 7 月 10 日 | $500 | Shopify 的 CNAME 记录指向的域名未被其拥有,可被注册 |
| Snapchat Fastly 接管 | 中 | http://fastly.sc-cdn.net/takeover.html | https://hackerone.com/reports/154425/ | 2016 年 7 月 27 日 | $3000 | Snapchat 域名的 CNAME 记录指向的 Fastly 子域名配置错误 |
| Legal Robot 接管 | 中 | https://api.legalrobot.com/ | https://hackerone.com/reports/148770/ | 2016 年 7 月 1 日 | $100 | Modulus 服务存在漏洞,允许通配符子域名覆盖更具体的子域名 |
| Uber SendGrid 邮件接管 | 中 | https://em.uber.com/ | https://hackerone.com/reports/156536/ | 2016 年 8 月 4 日 | $10000 | Uber 在 SendGrid 的 Inbound Parse Webhook 配置缺失 |
下面以 Ubiquiti 子域名接管为例详细说明:
Amazon Simple Storage(S3)是亚马逊网络服务(AWS)提供的文件托管服务。S3 上的账户是一个存储桶,你可以使用以存储桶名称开头的特殊 AWS URL 访问它。亚马逊为其存储桶 URL 使用全局命名空间,这意味着一旦有人注册了一个存储桶,其他人就不能再注册它。
在这个案例中,Ubiquiti 为
assets.goubiquiti.com
创建了 CNAME 记录并指向 S3 存储桶
uwn-images
,该存储桶可通过
uwn-images.s3.website.us-west-1.amazonaws.com
访问。但 Ubiquiti 要么没有注册该存储桶,要么在从其 AWS 账户中移除该存储桶时没有删除 CNAME 记录。因此,访问
assets.goubiquiti.com
仍会尝试从 S3 提供内容。结果,一名黑客认领了该 S3 存储桶并向 Ubiquiti 报告了该漏洞。
graph TD;
A[用户访问 assets.goubiquiti.com] --> B[根据 CNAME 记录指向 S3 存储桶 uwn-images];
B --> C{存储桶是否可用};
C -- 不可用 --> D[黑客认领存储桶];
C -- 可用 --> E[正常访问存储桶内容];
D --> F[黑客报告漏洞];
竞态条件漏洞概述
竞态条件是指两个进程基于一个初始条件进行竞争以完成任务,但在进程执行过程中该初始条件变得无效。一个经典的例子是银行账户之间的资金转移:
1. 你的银行账户中有 500 美元,你需要将全部金额转移给一个朋友。
2. 使用你的手机,你登录到你的银行应用程序并请求将 500 美元转移给你的朋友。
3. 10 秒后,请求仍在处理中。所以你在笔记本电脑上登录到银行网站,看到你的余额仍然是 500 美元,并再次请求转移。
4. 笔记本电脑和手机上的请求在彼此的几秒钟内完成。
5. 你的银行账户现在为 0 美元。
6. 你的朋友给你发消息说他收到了 1000 美元。
7. 你刷新你的账户,你的余额仍然是 0 美元。
虽然这是一个不现实的竞态条件示例,但它代表了一般概念。第 2 步和第 3 步中转移的条件是你在账户中有足够的钱来发起转移。但你的账户余额仅在每个转移过程开始时进行验证。当转移执行时,初始条件不再有效,但两个进程仍然完成。
竞态条件案例分析 - 多次接受 HackerOne 邀请
难度:低
URL:
hackerone.com/invitations/<INVITE_TOKEN>/
来源:https://hackerone.com/reports/119354/
报告日期:2016 年 2 月 28 日
赏金:Swag
在 2016 年 2 月,测试 HackerOne 时,邀请功能引起了注意。当时,HackerOne 通过电子邮件发送的邀请是唯一链接,且与收件人电子邮件地址无关。任何人都可以接受邀请,但邀请链接本应只被接受一次并由单个账户使用。
推测 HackerOne 应用程序的工作流程是:在数据库中查找令牌,根据数据库条目添加账户,然后更新令牌记录,使链接不能再次使用。这种工作流程可能导致竞态条件的原因有两个:
1. 查找记录并使用编码逻辑对记录进行操作的过程会产生延迟。查找是启动邀请过程必须满足的前置条件。如果应用程序代码运行缓慢,两个近乎即时的请求可能都会进行查找并满足执行条件。
2. 更新数据库记录会在条件和修改条件的操作之间产生延迟。例如,更新记录需要遍历数据库表以找到要更新的记录,这需要时间。
为了测试是否存在竞态条件,创建了三个 HackerOne 账户(用户 A、B 和 C)。用户 A 创建了一个程序并邀请用户 B。用户 B 收到邀请邮件并登录账户,用户 C 在另一个私密浏览器中打开相同的邀请。将两个浏览器和邀请接受按钮排列在一起,尽可能快地同时点击两个接受按钮。第一次尝试失败,第二次成功。
graph TD;
A[用户 A 创建程序并邀请用户 B] --> B[用户 B 收到邀请邮件];
B --> C[用户 B 登录账户准备接受邀请];
B --> D[用户 C 在另一个浏览器打开相同邀请];
C --> E{同时点击接受按钮};
D --> E;
E -- 第一次尝试 --> F[失败];
E -- 第二次尝试 --> G[成功触发竞态条件];
通过这些案例可以看出,无论是子域名接管还是竞态条件漏洞,都需要我们在网络安全工作中保持警惕,及时发现和修复潜在的安全隐患。
网络安全中的子域名接管与竞态条件漏洞解析
子域名接管总结与防范建议
子域名接管可能仅仅是由于一个未被认领的 DNS 条目指向第三方服务而引起的。本章中的示例涉及 Heroku、Fastly、S3、Zendesk、SendGrid 以及未注册的域名等,但其他服务也可能存在此类漏洞。
可以使用诸如 KnockPy、crt.sh 和 censys.io 等工具来查找这些漏洞,同时附录 A 中也介绍了其他相关工具。在处理子域名接管时,可能需要一些额外的技巧,例如 Rosen 认领通配符域名以及 Rijal 注册自定义 Webhook。
以下是一些防范子域名接管的建议:
1.
关注 DNS 条目
:留意指向第三方服务(如 S3)的 DNS 条目,发现此类条目时,确认公司是否正确配置了该服务。
2.
持续监控
:除了对网站的 DNS 记录进行初始检查外,还可以使用像 KnockPy 这样的自动化工具持续监控条目和服务,以防公司移除子域名但忘记更新 DNS 记录。
3.
关注公司变动
:注意公司的收购情况,因为这可能会改变公司提供服务的方式。在收购过程中,一些子域名可能会被删除,如果公司不更新 DNS 条目,就可能导致子域名接管。
4.
探索第三方服务功能
:当目标网站使用第三方服务时,要探索这些服务提供的所有功能。可以参考 EdOverflow 维护的易受攻击服务列表(https://github.com/EdOverflow/can-i-take-over-xyz/),但即使列表中显示某个服务受保护,也需再次确认或寻找替代方法。
5.
提供非侵入性证明
:如果发现子域名接管漏洞,在提供漏洞证明时,最好使用非侵入性的方式,避免让被报告的公司感到尴尬。
竞态条件总结与防范建议
竞态条件在网络应用中可能会导致严重的安全问题,如多次接受邀请、资金异常转移等。在测试和开发过程中,需要特别关注那些依赖特定条件执行的操作。
以下是一些防范竞态条件的建议:
1.
关注条件依赖操作
:在进行安全测试时,注意那些依赖特定条件执行的操作,尤其是涉及数据库查找、应用逻辑处理和数据库更新的操作。
2.
优化代码逻辑
:尽量减少查找记录和更新记录过程中的延迟,避免因延迟导致竞态条件的发生。
3.
增加验证机制
:在关键操作中,增加额外的验证机制,确保操作的唯一性和正确性。例如,在邀请系统中,可以增加对邀请链接使用次数的严格验证。
综合案例对比分析
| 漏洞类型 | 案例名称 | 难度 | 影响 | 防范关键 |
|---|---|---|---|---|
| 子域名接管 | Ubiquiti 子域名接管 | 低 | 黑客可控制子域名,窃取用户信息 | 正确配置 DNS 记录,及时更新 |
| 子域名接管 | Scan.me 指向 Zendesk | 低 | 子域名被恶意利用 | 关注公司变动,及时更新 DNS |
| 子域名接管 | Shopify Windsor 子域名接管 | 低 | 子域名被他人注册 | 定期检查子域名状态 |
| 子域名接管 | Snapchat Fastly 接管 | 中 | 可能向用户提供恶意文件 | 检查服务配置,确认域名所有权 |
| 子域名接管 | Legal Robot 接管 | 中 | 子域名被控制 | 关注第三方服务安全性 |
| 子域名接管 | Uber SendGrid 邮件接管 | 中 | 可能拦截邮件 | 深入了解第三方服务功能,正确配置 |
| 竞态条件 | 多次接受 HackerOne 邀请 | 低 | 邀请可被多次使用 | 优化代码逻辑,增加验证机制 |
结论
网络安全是一个复杂且不断发展的领域,子域名接管和竞态条件漏洞只是其中的一部分。通过对这些漏洞的分析和案例研究,我们可以认识到在网络安全工作中需要保持高度的警惕性,不断学习和掌握新的安全技术和方法。
无论是开发者、安全测试人员还是企业管理者,都应该重视网络安全问题,采取有效的防范措施,及时发现和修复潜在的安全隐患,以保障网络系统的安全稳定运行。同时,要积极关注行业动态,不断提升自身的安全意识和技能水平,共同营造一个安全可靠的网络环境。
超级会员免费看
2128

被折叠的 条评论
为什么被折叠?



