订阅以接收新文章的通知:

无风险的 RDP:Cloudflare 基于浏览器的第三方安全访问解决方案

2025-03-21

10 分钟阅读时间
这篇博文也有 English日本語版本。

短期 SSH 访问于 2024 年 10 月在 Cloudflare 的 SASE 平台上首次亮相。利用通过收购 BastionZero 获得的知识,短期 SSH 访问使组织能够在其 Linux 服务器前应用 Zero Trust 控制。然而,这仅仅是个开始,我们很高兴地宣布推出一项期待已久的功能:无客户端、基于浏览器的远程桌面协议 (RDP)。我们的 RDP 代理基于 Cloudflare 的现代代理架构构建,提供一个安全、高性能的解决方案,关键是部署、维护和使用都极其简便。

RDP 的安全挑战

远程桌面协议(Remote Desktop Protocol,RDP)于 1998 年随 Windows NT 4.0 终端服务器版本问世。如果您对这个 Windows 版本感到陌生,那是因为自那时以来已经发布了 16 个主要 Windows 版本。尽管如此,RDP 仍被数千个组织广泛使用,以支持对 Windows 服务器的远程访问。这是一个有点奇怪的协议,其工作原理是通过连续快速捕获屏幕画面,以模拟远程 Windows 服务器上的交互操作。(这里发生的事情远不止屏幕捕获,还包括绘图命令、位图更新,甚至视频流失传输。如我们所言——确实有点奇怪。)由于这种复杂性,RDP 对计算资源要求较高,且在传统 VPN 上实现高性能运行具有挑战性。

除了其独特之处,RDP 在安全行业中也因该协议早期的漏洞而声名不佳。两个罪魁祸首是弱用户登录凭据和不加限制的端口访问。Windows 服务器通常受密码保护,但这些密码从一开始就安全性不足,更糟的是,可在多个账户间共享。这使得这些 RDP 服务器容易受到暴力攻击或凭据填充攻击。

不良行为者已经滥用 RDP 的默认端口 3389 来发动在途攻击。已发现的最严重 RDP 漏洞之一是 BlueKeep。BlueKeep 是一个漏洞,正式名称为 CVE-2019-0708 ,指只要请求遵守特定格式并发送到运行 RDP 的端口,无需身份验证即可执行远程代码(RCE)。更糟糕的是,它具有蠕虫的特性,这意味着 BlueKeep 可以在无需用户交互的情况下在网络内传播至其他设备。恶意行为者可以破坏 RDP 来获得未授权的访问权限,然后攻击者可以在网络内横向移动,提升权限,并安装恶意软件。RDP 也已被用来部署 Ryuk、Communi 和 DoppelPaymer 等勒索软件,因而获得“勒索软件传递协议”的绰号。

这只是 RDP 历史中的一部分漏洞,但我们并非有意使人气馁。值得庆幸的是,由于更新的 Windows 版本、CVE 补丁、改进的密码卫生习惯以及对特权访问的更高意识,许多组织已经减少了其攻击面。然而,尽管存在许多已得到安全保障 Windows 服务器,仍有无数未打补丁或配置不当的系统在线,使它们成为勒索软件和僵尸网络的轻松目标。

需要基于浏览器的 RDP 解决方案

尽管存在安全风险,RDP 对许多组织而言仍然至关重要,特别是那些拥有分布式员工队伍和第三方承包商者。它为计算密集型任务提供了价值,因为这些任务需要高性能 Windows 服务器,其拥有的 CPU/GPU 资源超过用户的机器可以提供的水平。对于注重安全的组织,RDP 提供了更好的可见性,可了解谁在访问 Windows 服务器以及在这些会话期间采取了哪些操作。

由于向承包商发放公司设备成本高昂且繁琐,因此许多组织采用了自带设备(BYOD)策略。这一决定要求组织为承包商提供 RDP 访问方式,使其能够连接到具有履行其职责所需企业资源的 Windows 服务器。

传统 RDP 需要在用户设备上安装客户端软件,对于使用个人电脑或非受管设备的承包商(或任何员工)来说,这并不是一个合适的解决方案。以前, Cloudflare 客户必须依赖自托管的第三方工具,例如 Apache GuacamoleDevolutions Gateway,才能启用基于浏览器的 RDP 访问。这造成了几个运营痛点:

  • 基础设施复杂性: 部署和维护 RDP 网关增加了运营开销。

  • 维护负担: 商业和开源工具可能需要频繁更新和修补,有时甚至需要定制分支。

  • 合规挑战: 第三方软件需要额外的安全审计和风险管理评估,尤其是受监管行业。

  • 冗余,但不是良性的冗余—— 客户向 Cloudflare 寻求解决方案,以减少维护其基础设施的复杂性,而非相反

我们一直在倾听。Cloudflare 设计了一个高性能 RDP 代理,它利用了已经成为我们 Zero Trust 网络访问(ZTNA)服务一部分的现代安全控制措施。我们认为,业界普遍吹捧的“安全/性能权衡”是一种过时的思维模式。通过正确的底层网络架构,我们能帮助缓解 RDP 最为臭名昭著的挑战。

隆重推出基于浏览器的 RDP with Access

Cloudflare 基于浏览器的 RDP 解决方案是 Cloudflare Access 中最新添加的一款产品,它与现有的无客户端 SSH 和 VNC 产品一起运行,无需 VPN 或 RDP 客户端即可支持对 Windows 服务器的安全地远程访问。它在 Cloudflare 的全球网络中原生构建,无需额外的基础设施。

我们基于浏览器的 RDP 访问结合了自托管 Access 应用的强大功能,加上目标的额外灵活性(通过 Access for Infrastructure 引入)。管理员可以实施:

  • 身份验证:通过 SSO、MFA 和设备态势,控制用户访问内部 RDP 资源进行身份验证的方式。

  • 授权: 使用基于策略的访问控制来确定谁可以在何时访问什么目标。

  • 审计: 提供 Access 日志,以支持在发生安全漏洞时的监管合规性和可见性。

用户只需要一个 Web 浏览器,无需原生 RDP客户端!RDP 服务器通过我们的应用连接器 Cloudflare Tunnel 进行访问,使用现有 Access 客户的常见部署模型。无需为访问特定 RDP 服务器而配置用户设备,使得采用这一新功能只需最少的设置。

工作方式

客户端

Cloudflare 的实现利用了 IronRDP,这是一个在浏览器中运行的高性能 RDP 客户端。选择它是因为它是一个现代化、维护良好的 RDP 客户端实现,提供高效且响应迅速的体验。与基于 Java 的 Apache Guacamole(另一种流行的 RDP 客户端实现)不同,IronRDP 是使用 Rust 构建的,与 Cloudflare 的开发生态系统高度兼容。

尽管选择正确的工具非常关键,但使用浏览器来支持 RDP 会话仍面临一些挑战。从实用角度看,浏览器本身无法发送 RDP 消息。RDP 直接依赖于第 4 层传输控制协议(TCP)进行通信,虽然浏览器可以使用 TCP 作为底层协议,但它们并不提供允许应用直接在原始 TCP 套接字上构建协议支持的 API。

另一个挑战源于安全考虑:在 Zero Trust 现代世界中,RDP 原生的用户名和密码认证机制远远不能满足需求。

为了解决这两方面挑战,IronRDP 客户端将 RDP 会话封装在 WebSocket 连接中。将第 4 层 TCP 流量封装在 HTTPS 中,使客户端能够使用原生浏览器 API 与 Cloudflare 的 RDP 代理进行通信。此外,它让 Cloudflare Access 能够使用身份感知策略来保护整个会话。通过用 Cookie 将一个 Cloudflare Access 授权 JSON Web Token (JWT) 附加到 WebSocket 连接上,RDP 会话的每一次服务间跳转都需要验证,确保其来自已通过身份验证的用户。

顺便简单介绍一下安全和性能是如何优化的:在基于客户端的传统 RDP 流量中,客户端和服务器需要协商一个 TLS 连接来保护和验证会话。然而,由于浏览器 WebSocket 连接已经通过 到 Cloudflare 的 TLS 得到保护,我们采用 IronRDP 的 RDCleanPath 协议扩展来消除流量的二次封装。消除这种冗余可以避免会话握手期间不必要的性能下降和复杂性增加。

服务器

IronRDP 客户端发起到一个专用 WebSocket代理的 WebSocket 连接,该代理负责客户端身份验证、终止 WebSocket 连接,并将隧道化的 RDP 流量代理至 Cloudflare 基础设施的更深层,以实现连接功能。确定如何构建这个 WebSocket代理这一看似简单的任务,其实是开发过程中最具挑战性的决定。

我们最初的方案是开发一项新的服务,以便在我们网络中的每一台服务器上运行。虽然这在技术上是可行的,但运行一项新服务会带来不容忽视的维护负担,而这最终被证明是增加了更多开销而非增值。第二个方案是将其构建到Front Line(FL)中,这是 Cloudflare 最古老的服务之一,每秒处理数千万个 HTTP 请求。这种方法本可以避免暴露新的 IP 地址,并从现有框架中获益,使团队能够快速行动。尽管这种方法最初看起来很有前景,但由于 FL 正在经历重大投资改造,团队不希望在不稳定的基础上进行构建,因此最终决定放弃。

最后,我们确定了一个使用 Cloudflare Workers 实现代理服务的解决方案!幸运的是,Workers 能够自动扩展以应对庞大请求率,这消除了我们在选择构建新服务时需要奠定的一些基础工作。坦率地说,由于 Workers 与 Cloudflare 内部服务通信方面存在一些不确定性,这种方法最初并不被看好,但在 Workers 团队的支持下,我们找到了前进的道路。

隧道化的 RDP 连接从 WebSocket 代理Worker 发送到 Apollo 服务,后者负责在Cloudflare Zero Trust 的入口和出口之间路由流量。Apollo 集中并抽象了这些复杂性,使其他服务能够专注于特定应用功能。Apollo 确定哪个 Cloudflare 数据中心距离目标 Cloudflare Tunnel 最近,并与该数据中心中运行的相同 Apollo 实例建立连接。随后,出口 Apollo 实例可以促成到 Cloudflare Tunnel 的最终连接。通过使用 Cloudflare 的全球网络遍历入口数据中心和目标 Cloudflare Tunnel 之间的距离,网络中断和拥塞得到有效管理。

Apollo 连接到 RDP 服务器,并将入口和出口连接传递给 Oxy-teams,这是负责检查和代理 RDP 流量的服务。在 Web 客户端向 RDP 服务器进行身份验证时,它作为直通代理(仅支持流量连接)运行。我们的初始版本使用 NT Lan Manager(NTLM)身份验证,这是一种质询-响应身份验证协议,要求输入用户名和密码。一旦客户端通过了服务器的身份验证,Oxy-teams 就能够代理所有后续的 RDP 流量!

这听起来可能像是经过了很多跳转,但我们网络中的每台服务器都运行所有服务。因此,信不信由你,这种复杂的互动实际上发生在单台服务器上,并且通过使用 UNIX 域套接字进行通信,我们还将性能影响降至最低。如果这些服务器中的任何一个服务器过载,遇到网络故障或出现硬件问题,在 Cloudflare 的 L4 负载均衡器 Unimog 的帮助下,负载会自动转移到邻近的服务器。

结合在一起

  1. 用户发起: 用户从 Cloudflare 的 App Launcher 中选择一个 RDP 服务器 (或通过直接 URL 访问)。每台 RDP 服务器都与一个由 Cloudflare 保护的公共主机名相关联。

  2. 入口: 该请求由 Cloudflare 网络中最近的数据中心接收。

  3. 身份验证: Cloudflare Access 通过检查请求是否包含有效的 JWT 来对会话进行身份验证。此令牌证明用户有权通过指定的域访问所选 RDP 服务器。

  4. Web 客户端交付: Cloudflare Workers 将 IronRDP Web 客户端交付到用户浏览器。

  5. 安全隧道技术:客户端通过 TLS 加密的 WebSocket 将 RDP 流量从用户浏览器隧道传输到另一个 Cloudflare Worker。

  6. 流量路由:接收 IronRDP 连接的 Worker 终止 WebSocket 并发起到 Apollo 的连接。Apollo 从那里创建到 RDP 服务器的连接。

  7. 身份验证中继: 建立连接后,Apollo 在 Web 客户端和 RDP 服务器之间中继 RDP 身份验证消息。

  8. 连接建立: 身份验证成功后, Cloudflare 充当Web 浏览器和 RDP 服务器之间的 RDP 代理,将用户连接到 RDP 服务器,支持流量自由传输。

  9. 策略实施:Cloudflare 的安全 Web 网关 Oxy-teams 对 RDP 流量应用第 4 层策略实施和日志记录。

这种架构的主要优势:

  • 无需额外软件:直接从浏览器访问 Windows 服务器。

  • 低延迟:Cloudflare 的全球网络最大程度减少性能开销。

  • 增强安全性:RDP 访问受 Access 策略保护,防止横向移动。

  • 集成日志记录和监控:管理员可以观察和控制 RDP 流量。

要进一步了解 Cloudflare 的代理能力,请查看我们解释代理框架的相关博客文章

选择性、现代化的 RDP 认证

Cloudflare 基于浏览器的 RDP 解决方案专门支持现代 RDP 认证机制,执行安全访问的最佳实践。我们的架构确保,如果 RDP 流量使用过时或薄弱的旧版安全功能(如来自较早版本 RDP 标准的不安全密码认证或 RC4 加密),将永远无法到达客户端点。

Cloudflare 支持使用以下原则进行安全会话协商:

  1. 基于 TLS 的 WebSocket 连接,确保传输安全。

  2. 精细化策略,执行单点登录(SSO)、多因素认证(MFA)和动态授权。

  3. 通过 SAML(安全断言标记语言)和 OIDC(OpenID Connect)与企业身份提供商集成。

通过 Cloudflare 网络的每个 RDP 会话都经过加密和身份验证。

后续工作

我们基于浏览器的 RDP 解决方案才刚刚开始!我们已经确定了几个需要继续关注的领域:

  • 增强管理员的可见性和控制: 由于 RDP 流量通过 Cloudflare Workers 和代理服务传输,基于浏览器的 RDP 将进行扩展以包含会话监控。我们还在评估数据丢失防护(DLP)支持,例如限制文件传输和剪贴板使用等操作,以防止未经授权的数据外泄,同时不影响性能。

  • 高级身份验证: 长期有效的凭证已成为过去式。基于浏览器的 RDP 未来迭代将包括无密码功能,最终用户无需记住密码,管理员也不必管理密码。为此,我们正在评估多种方法,例如客户端证书认证、通行密钥和智能卡,以及通过 Access 与第三方认证提供商集成。

合规与 FedRAMP High 认证

我们计划将基于浏览器的 RDP 纳入为企业和政府组织提供的 FedRAMP High 产品组合,这是我们在 2 月初宣布的高优先级计划。这一认证将确认我们的解决方案符合以下最高标准:

  • 数据保护

  • 身份和访问管理

  • 持续监控

  • 事件响应

寻求 FedRAMP High 合规认证彰显了 Cloudflare 致力于保护敏感环境的承诺,例如联邦政府、医疗保健和金融行业等领域。

通过执行一个现代化、严谨且安全的 RDP 实现,Cloudflare 提供了一种安全、可扩展且合规的解决方案,专门具有关键安全和合规要求的组织量身打造。

立即开始使用

Cloudflare 致力于为 ZTNA 提供最全面的解决方案,现在还包括对敏感基础设施的特权访问,例如通过基于浏览器的 RDP 访问 Windows 服务器。Cloudflare 基于浏览器的 RDP 解决方案正处于封闭测试阶段,每周都有新客户加入。您可以在此处申请访问权限,以试用这一令人兴奋的新功能。

同时,请查看我们的 Access for Infrastructure 文档,进一步了解 Cloudflare 如何保护对敏感基础设施的特权访问。Access for Infrastructure 目前免费提供给 50 用户以下的团队,现有的随用随付和合约计划客户通过 Access 或 Zero Trust 订阅也可免费使用。我们将继续将 BastionZero 的技术原生重新构建到 Cloudflare 的 Access for Infrastructure 服务中,敬请关注!

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
Security WeekZero TrustCloudflare Zero Trust收购Cloudflare AccessCloudflare One免客户端远程工作VDI远程桌面协议

在 X 上关注

Cloudflare|@cloudflare

相关帖子