独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

admin 2025年2月11日14:53:47评论12 views字数 7548阅读25分9秒阅读模式

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

你好,我是丹尼尔。我是一名 15 岁的高三学生。闲暇之余,我会入侵价值数十亿美元的公司并打造一些很酷的东西。

3 个月前,我发现了一种独特的 0-click 去匿名化攻击,攻击者可以利用该攻击获取 250 英里范围内任何目标的位置。通过在目标手机上安装易受攻击的应用程序(或作为笔记本电脑上的后台应用程序),攻击者可以在几秒钟内发送恶意负载并去匿名化你——而你甚至都不知道。

我发布这篇文章和研究是为了警告记者、活动家和黑客,关于这种无法检测的攻击。数百个应用程序都存在漏洞,包括世界上一些最受欢迎的应用程序:Signal、Discord、Twitter/X 等。它的工作原理如下:

Cloudflare

从数据上看,Cloudflare 无疑是市场上最受欢迎的 CDN。它击败了 Sucuri、Amazon CloudFront、Akamai 和 Fastly 等竞争对手。2019 年,Cloudflare 发生严重中断,导致大部分互联网离线超过 30 分钟。

Cloudflare 最常用的功能之一是缓存。Cloudflare 的缓存将经常访问的内容(例如图像、视频或网页)的副本存储在其数据中心,从而减少服务器负载并提高网站性能(https://developers.cloudflare.com/cache/)。

当您的设备发送可缓存资源的请求时,Cloudflare 会从其本地数据中心存储中检索资源(如果可用)。否则,它会从源服务器获取资源,在本地缓存,然后返回。默认情况下,某些文件扩展名会自动缓存,但站点操作员也可以配置新的缓存规则。

Cloudflare 在全球拥有广泛的业务,在 120 多个国家的 330 个城市设有数百个数据中心,数据中心数量估计比 Google 多 273%。例如,在美国东部地区,离我最近的数据中心距离不到 100 英里。如果您居住在发达国家,那么离您最近的数据中心很可能距离您不到 200 英里。

几个月前,我突然想到:如果 Cloudflare 将缓存数据存储在离用户如此近的地方,这是否会被利用来对我们无法控制的网站进行去匿名化攻击?

您会看到,Cloudflare 在 HTTP 响应中返回有关请求的缓存状态的信息。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

cf-cache-status可以是HIT/MISS并cf-ray包含处理请求的数据中心最近的机场的机场代码(在我的情况下是 IAD)。

如果我们可以让用户的设备加载 Cloudflare 支持的网站上的资源,从而将其缓存在本地数据中心,那么我们就可以枚举所有 Cloudflare 数据中心,以确定哪个数据中心缓存了该资源。这将提供对用户位置的极为精确的估计。

Cloudflare 传送

在验证这个理论之前,我必须克服一个重大障碍。

您不能简单地将 HTTP 请求发送到各个 Cloudflare 数据中心。出于“安全目的”(大概是 DDoS 保护),所有 Cloudflare IP 范围都严格采用任播。所有与其网络开放的 TCP 连接始终由离您最近的可用数据中心处理,如果您居住在美国,您无法要求加拿大的数据中心处理您的请求。

然而,经过一番研究,我发现了一篇论坛帖子(https://community.cloudflare.com/t/how-to-run-workers-on-specific-datacenter-colos/385851),来自一位社区成员,向我展示了具体操作方法。作者分享了他发现的一个错误,即使用 Cloudflare Workers 向特定的 Cloudflare 数据中心发送请求。

我仍然不能 100% 确定这个漏洞的具体细节,但使用 Cloudflare WARP(Cloudflare 的 VPN 客户端)内部使用的 IP 范围,我们可以要求某些数据中心处理 HTTP 请求。通常,此 IP 范围会阻止来自外部 IP 地址的入站连接,但从 Workers 发送的请求可以绕过此限制,因为连接源自 Cloudflare 的网络内部。

我花了几分钟阅读他们的帖子,并很快为此开发了一个工具:Cloudflare Teleport(https://github.com/hackermondev/cf-teleport)。某些 IP 范围对应不同的数据中心(https://github.com/hackermondev/cf-teleport/blob/main/scripts/data/colos.json)。

Cloudflare Teleport 是由 Cloudflare Workers 提供支持的代理,可将 HTTP 请求重定向到特定数据中心。例如,https://cfteleport.xyz/?proxy=https://cloudflare.com/cdn-cgi/trace&colo=SEA会将 HTTP GET 请求代理到https://cloudflare.com/cdn-cgi/trace,具体到西雅图 (SEA) 数据中心。

几个月后,Cloudflare 彻底修复了这个漏洞,使这个工具过时了,但稍后会详细介绍。我最初使用的大部分时间都是使用这个工具。

第一次“去匿名化”攻击

Cloudflare Teleport 工具完成后,我就能证实我的理论。我编写了一个简单的 CLI 程序,它会向指定的 URL 发送 HTTP GET 请求,并列出所有拥有资源缓存及其年龄的数据中心。

对于我的第一次测试,我使用了 Namecheap 的网站图标(https://www.namecheap.com/favicon.ico)。此资源启用了 Cloudflare 缓存,它只是其徽标的简单静态图像。(这是我能找到的最快的没有严格机器人保护的网站):

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

砰,成功了。Namecheap 已将其缓存期限配置得非常低(5 分钟),但我能够看到过去 5 分钟内缓存过其网站图标的每个数据中心。由于每次加载其网站时,浏览器都会自动下载此图标,这意味着来自每个位置的用户都在 5 分钟内访问过 Namecheap.com 网站,最后一次访问来自日本东京。

这只是一个简单的测试,几乎没有任何影响,但我通过这个测试证实了我的理论。这证明了使用 Cloudflare 缓存进行去匿名化攻击的概念。

实际应用:信号

Signal 是一款开源加密消息服务,因其隐私功能而被记者和活动家广泛使用。在内部,该应用使用两个 CDN 来提供内容:(cdn.signal.org由 CloudFront 提供支持)用于提供个人资料头像,cdn2.signal.org(由 Cloudflare 提供支持)用于提供消息附件。

一键攻击

当用户在 Signal 上发送附件(例如图片)时,附件会被上传到 cdn2.signal.org。一旦收件人打开对话,他们的设备就会自动下载附件。由于这些 URL 启用了 Cloudflare 缓存,攻击者可以使用缓存地理定位方法来精确定位收件人的位置。

该https://cdn2.signal.org/attachments/*路径配置为使用 Cloudflare 缓存响应。这意味着一旦用户的设备自动下载附件,攻击者就有可能运行缓存地理定位攻击,以找出他们靠近哪个本地数据中心——类似于执法部门通过手机信号塔追踪移动设备的方式。

为了测试这一点,我快速修补了 Signal 桌面应用程序以删除 SSL 固定,并配置 Burp 来拦截和查看通过该应用程序发送的 HTTP 请求/响应。 独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

复制步骤

1. 使用 Burp 阻止cdn2.signal.org/attachments/*来自 Signal 的 HTTP GET 请求。

这可确保应用程序不会下载从我们这边(攻击者)上传的附件,因为那样会将它们缓存到我们的本地数据中心并污染结果。我发现使用 Burp 执行此操作的最佳方法是配置附件的拦截规则,然后保留请求拦截并拒绝所有请求。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

2. 将附件(图像)发送到目标。

这应该适用于任何附件,但当用户打开对话时会自动下载图像,以便它们发挥最佳效果。我使用了一个简单的 1x1.png 图像进行此测试。上传请求被发送到 Signal 的 CDN,一旦我们在对话中发送附件并且 Signal 上传它,您就可以在 Burp 中看到附件网址(例如https://cdn2.signal.org/attachments/UjLld11tvaL16M8mrd86)。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

3. 攻击

目标打开对话后(通过已读回执进行验证),他们的设备应该下载附件,这反过来会导致 Cloudflare 将文件缓存在本地数据中心。

我对自己进行了这次攻击,使用前面提到的 CLI 工具和附件 URL,找到了缓存了附件的本地数据中心。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

就我而言,我在纽约,距离我最近的数据中心之一是新泽西州纽瓦克 (EWR),距离我的实际坐标约 150 英里。

利用看似无害的附件,攻击者可以揭穿用户的匿名性并在大致半径范围内找到他们的位置。

零点击

事情开始变得有趣了。虽然一键式方法有效,但它需要用户打开 Signal 对话。是否有可

推送通知

Signal 的移动应用程序有 3 种推送通知设置。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

如果用户在未使用 Signal 应用时收到消息,则会触发推送通知。默认情况下,移动应用在向您的设备发送推送通知时会包含作者和消息。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

通知右侧显示的图像是随 Signal 消息发送的附件。

如果目标已启用推送通知(默认情况下启用),他们甚至不必打开 Signal 对话,设备即可下载附件。一旦推送通知发送到他们的设备,它就会自动从 Signal 的 CDN 下载图像,从而触发本地数据中心缓存响应。

攻击者可以随时运行此去匿名化攻击并获取用户的当前位置,而无需任何交互。

Signal 和 Telegram 一样,被世界各地的记者、活动家和举报人使用。此次攻击的可能性非常大。此次攻击可用于跟踪 Signal 帐户、关联身份、查找与记者会面的员工等等。

实际应用:Discord

在我的研究中,我发现另一个容易受到此类攻击的应用程序是 Discord。Discord 是一款免费应用程序,允许用户通过文本、语音和视频相互交流。尽管该应用程序面向游戏玩家,但 Discord 在过去一年中因协助政府泄密而登上新闻头条,并且 Discord 托管了互联网上相当一部分的网络犯罪。

一键操作非常简单,与 Signal 非常相似,但我认为 Discord 的影响范围更广。Discord 允许订阅 Nitro(每月 9.99 美元的高级服务)的用户在各种地方使用自定义表情符号:消息、用户状态、频道等。这些自定义表情符号从 Discord 的 CDN 加载,并配置为缓存在 Cloudflare 上。攻击者可以使用与 Signal 相同的去匿名化攻击来使用户去匿名化。

因此,攻击者无需在 Discord 频道中发送附件,而是可以在其用户状态中显示自定义表情符号,然后只需等待目标打开其个人资料即可运行去匿名化攻击。

我已经向 Discord 公开了整个 HackerOne 报告,其中包含具体细节,但在这里我想重点关注 0 点击方面。

在 Discord 中,移动推送通知会针对各种事件发送(不仅仅是像 Signal 那样收到消息)。例如,向 Discord 用户发送好友请求会触发用户移动设备上的推送通知。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

有趣的是,即使用户积极使用 Discord,好友请求通知也会始终发送到用户的移动设备上。

如何利用好友请求通知来实施去匿名化攻击?让我们来看看这个通知。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

当您收到好友请求并且 Discord 向您的设备发送通知时,它包含要与通知一起显示的用户头像网址。您的手机会下载头像网址(无需任何用户交互)并将其与通知一起显示。

Discord 在头像 URL 的 CDN 路径上配置了 Cloudflare 缓存,这意味着我们可以简单地执行前面提到的相同的缓存位置攻击。

在 Discord 中,推送通知中使用的头像 URL 格式为:https://cdn.discordapp.com/avatars/{user_id}/{avatar_hash}。网站中用于显示用户头像的头像 URL 格式略有不同(它始终包含图像扩展名)(https://cdn.discordapp.com/avatars/{user_id}/{avatar_hash}.png)。

两个 URL 都指向同一张图片,但由于应用程序中显示的图片路径不同,因此它们被单独缓存。这确保我们的结果不会受到污染,并使我们能够确保找到通过推送通知加载头像的设备的数据中心,而不仅仅是 Discord 应用程序上的个人资料。

就这样,我们就得到了针对 Discord 的 0 点击版本攻击的步骤:

  1. 更改您的用户头像。这会随机化您的头像哈希值,并确保您的头像 URL 尚未被任何人加载,从而提高攻击的准确性。

  2. 向目标发送好友请求。尽管使用 Discord 触发推送通知的方法多种多样,但我选择好友请求,因为无论用户是否在 Discord 上活跃,都会发送好友请求。它们也不需要与目标共享任何服务器,这意味着您实际上可以与 Discord 上的任何人执行此操作。

  3. 在用户头像上使用 Cloudflare Teleport 工具,并查找已缓存该头像的所有本地数据中心

地理猜测器

我非常熟悉 Discord 的 API,并且我意识到我可以自动化 Discord 的 0-click 攻击中的每个步骤,所以我这样做了。

介绍 GeoGuesser。这是一个私人 Discord 机器人,它只有一个命令,接受用户名,按照前面提到的步骤进行攻击,并完全通过 Discord 返回结果。

调用该命令时,它会使用我的帐户凭据访问 Discord 用户 API,将用户头像更改为随机生成的图像(以随机化哈希值)并向指定的用户名发送好友请求。最后,它使用基于 Cloudflare Teleport CLI 的私有 API 运行相同的缓存枚举攻击,并直接在 Discord 上显示结果,所有操作都在不到 30 秒的时间内完成。

为了展示这次攻击的程度,我尝试进行这次攻击的第一批用户之一是 Discord 的 CTO Stanislav Vishnevskiy。

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

以下是该机器人的运行情况: 

独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

该机器人向斯坦发送好友请求,然后等待几秒钟以确保他收到推送通知。

它找到 2 个本地 Cloudflare 数据中心,这些数据中心已缓存该头像。这可能意味着他有多个设备连接到他的 Discord 帐户并接收了推送通知,或者他的设备加载了两次头像,并且请求在不同的数据中心内进行了负载平衡。

GeoGuesser 由 Google Maps API 提供支持,可生成用户的可能位置。它找到两个数据中心之间的中点,并绘制两个圆圈以表示用户的半径。

Discord 的总部位于加利福尼亚州旧金山(位于外圈),因此这张地图是准确的。斯坦很可能位于内圈边缘附近,距离约 300 英里。

整个过程不到一分钟。我敢肯定斯坦在手机上看到了通知,没有多想就直接忽略了。这只是一次简单的攻击,但如果经过校准,这次攻击可用于跟踪和监视斯坦的位置。

这样的攻击者可以对任何 Discord 用户发起攻击,而且几乎无法被发现。

漏洞赏金报告

我负责任地向受影响方披露了我的调查,希望能够采取一些措施来保护或警告用户免受此类去匿名化攻击,但我大多感到失望。

信号

Signal 立即驳回了我的报告,称这不是他们的责任,隐藏身份是用户的责任:“Signal 从未试图完全复制 Wireguard、Tor 和其他开源 VPN 软件等项目可以提供的网络层匿名功能”。

我不同意这种观点。Signal 宣称自己是一个隐私至上的通信平台。虽然它并不声称提供像 Tor 那样的网络层匿名性,但用户相信 Signal 能够将隐私风险降至最低。

该漏洞表明,该平台无意中泄露了可将用户位置缩小到几百英里范围内的信息。这种泄露与许多注重隐私的用户的期望相冲突,他们依赖 Signal 不仅仅是为了端到端加密。

Telegram 是另一个以隐私为重点的应用程序,它完全不会受到这种攻击,因为 (1) 它们使用不依赖于 HTTP 的自定义内部构建协议,并且 (2) 不依赖 Cloudflare 等云提供商进行缓存。

不和谐

最初,Discord 的安全团队承诺将调查此事并做出改变以保护其用户免受此类攻击,但最终他们也改变了立场,称这是一个 Cloudflare 问题,其他消费者也容易受到攻击。

Cloudflare

Cloudflare 最终修复了 Cloudflare Teleport 用于穿越数据中心的漏洞。一年前,另一位报告者向他们的 HackerOne 计划报告了这个漏洞,但当时他们没有采取任何措施,因为在我分享我的研究之前,他们没有看到穿越数据中心的任何影响。

Cloudflare 重新打开了旧报告,解决了它,并对我的报告和原始报告奖励了 200 美元的赏金。

虽然这是朝着正确方向迈出的一步,但这实际上并没有解决核心问题。尽管 Cloudflare 几周前就修复了这个漏洞,但本文中显示的每一次攻击都是在过去 24 小时内发生的。Cloudflare 修补了其网络内部促进数据中心穿越的漏洞,但这并不是轻松穿越世界各地数据中心的唯一方法。

补丁发布 24 小时后,我重新编程了 Cloudflare Teleport,改用 VPN。许多 VPN 提供多个位置,用户可以连接到这些位置,这些位置通过位于世界不同地区的服务器发送流量,这些服务器映射到世界各地的不同 Cloudflare 数据中心。

我选择了一家 VPN 提供商,该提供商在全球 31 个不同国家/地区拥有超过 3,000 台服务器。使用这种新方法,我能够再次访问大约 54% 的 Cloudflare 数据中心。虽然这听起来不多,但它覆盖了世界上大多数人口众多的地方。

Cloudflare 对此的最终声明表示,他们不认为去匿名化攻击是他们自己系统中的一个漏洞,而禁用他们希望保护的资源的缓存则取决于他们的消费者。

这里显然存在问题,因为 Cloudflare 表示消费者有责任保护自己免受此类攻击,而消费者(例如 Discord)却将责任归咎于 Cloudflare。

如何保护自己

这种去匿名化攻击的利用潜力巨大,尤其是对于记者、活动家和注重隐私的个人等敏感岗位的用户而言。该攻击利用了缓存和推送通知系统中的基本设计决策,展示了旨在提高性能的基础设施如何被滥用于侵入性跟踪。

尽管 Cloudflare 已经修补了 Teleport 漏洞,并且 Discord 和 Signal 等一些应用程序可能在我披露后实施了缓解措施,但潜在风险仍然存在。如果不采取适当的预防措施,任何使用 CDN 进行内容交付和缓存的应用程序仍然可能存在漏洞。

最后的想法

这次攻击凸显了数字生态系统变得多么复杂和相互关联。虽然 CDN 提高了性能和可扩展性,但它们也无意中引入了可以以新方式利用的风险。通过提高认识和推广最佳实践,我们可以共同努力将滥用的可能性降至最低。

对于身处敏感角色或担心隐私的用户,关键要点是:保持知情和警惕。虽然没有一个系统是万无一失的,但采取措施限制暴露可以产生重大影响。

原文始发于微信公众号(Ots安全):独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月11日14:53:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   独特的 0-click 去匿名化攻击,针对 Signal、Discord 和数百个平台https://cn-sec.com/archives/3660234.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息