Unit 42:为基于浏览器的 RDP 客户端加入 WebAuthn——把本地安全密钥带入远程会话

Palo Alto Unit 42 详解如何在浏览器内原生 RDP 客户端集成 WebAuthn 重定向:借自定义 Chromium 扩展 API 与逆向 MS-RDPEWA 私有 DVC 插件,使本地 FIDO2 认证器直接对本地哈希签名,远程服务器仅见 CTAP2 响应,密钥材料不出本地。

📖 原文翻译与解读。原文:How We Added WebAuthn to a Browser-Based RDP Client(Palo Alto Unit 42,2026-07-02)

一、浏览器内原生 RDP 客户端

传统 RDP 需胖客户端开启风险网络隧道,或经远程会话把流量翻译为 HTML5(常损性能与功能)。Unit 42 介绍以 Chromium + WebAssembly(Wasm)+ 自定义扩展 API 在浏览器内实现原生 RDP 客户端(如 Prisma Browser),并集成 FIDO2 栈,使用户免装传统客户端即可访问遗留/本地应用,且无需把认证密钥暴露给远端。

二、协议与挑战

采用 MS-RDPEWA(WebAuthn Virtual Channel Extension),经动态虚拟通道 Microsoft::Windows::RDP.Webauthn 传输 CBOR 编码的 WebAuthn 请求(命令含 WEB_AUTHN、IUVPAA、CANCEL、API_VERSION,v3.0 增 GetCredentials、GetAuthenticatorList)。核心难题:浏览器标准 API(navigator.credentials)强制自行生成 clientDataJSON(含浏览器扩展源而非远程页面源),导致服务端计算的 clientDataHash(SHA-256)与本地签名哈希不匹配;旧版 Windows 服务端仅发 32 字节哈希、无 origin/challenge 明文。

三、解决方案

团队构建 Chromium 扩展 API(方法同 navigator.credentials,但由调用者直接传入 clientDataHash),复用 Chromium FIDO2 栈支持 USB/BLE/NFC/平台认证器与 caBLE 混合传输;以 C 语言实现 DVC 插件作为 Wasm 客户端一部分,并配 TypeScript 协议层做 CBOR 编解码(含逆向所得未文档化部分)。逆向 mstsc.exe 发现 webauthn.dll 具双重身份:公开 API 强制要 JSON,但通过 VirtualChannelGetInstance 创建的私有 DVC 插件(WebAuthNDVCPlugin)走未导出函数(如 CtapCborDecodeRpcRequest)可接受纯哈希。成果是首发非 Windows RDP 客户端的 WebAuthn 重定向(FreeRDP 3.25.0 随后支持)。

四、安全意义

密钥隐私:本地认证器(YubiKey/Touch ID/手机)直接对本地哈希签名,远程服务器仅见 CTAP2 响应,不触密钥材料;免去传统 RDP 的网络隧道或 HTML5 翻译,降低企业环境风险。文档缺口本身是安全障碍——规范缺命令、未文档化字段使第三方长期无法实现。防御方应优先选用支持重定向的浏览器客户端,并关注 W3C remoteClientDataJSON 扩展与 MS-RDPEWA v3.0 标准化进展。参见 CrowdStrike:AIDR 对 agent/工具链运行时控制

了解更多行业资讯,请访问 行业资讯首页 或致电 021-69753778 获取安全咨询服务。

相关文章


—— ztpop.net 编辑团队 译