远程代理的安全方面¶
远程代理不是面向 Web 的功能,因此与传统的 Web 平台 API 具有不同的安全特性。主要使用者是通过远程协议连接到代理的进程外程序,但理论上可以扩展以促进通过 IPDL 通信的浏览器本地客户端。
设计考虑¶
远程代理允许使用者通过各种域与 Firefox 交互,以检查运行在 Web 内容中的文档的状态和控制执行,将任意脚本注入文档,进行浏览器服务检测,模拟用户交互以实现自动化目的,以及订阅浏览器的更新,例如网络和控制台日志。
远程接口通过 HTTP 线路协议提供服务,由 Firefox 二进制文件中托管的服务器侦听器提供。这只能通过传递 --remote-debugging-port
标志来启动。连接仅限于环回设备(例如 localhost 和 127.0.0.1)。
由于远程代理不是文档内的 Web 功能,因此我们对此功能的安全问题与其他 Web 平台功能本质上不同。主要问题是 HTTPD 在不传递命令行标志的情况下不会启动。我们的看法是,如果恶意用户能够执行任意 shell 命令,那么我们几乎无法阻止浏览器变成一个恶意的侦听设备。
用户隐私问题¶
除了提供的接口将使客户端访问所有浏览器内部信息,从而遵循所有浏览器内部机密之外,没有其他用户隐私问题。
远程代理的工作原理¶
使用 --remote-debugging-port
标志时,它会在所需的端口上启动 HTTPD,或默认为 localhost:9222。HTTPD 通过 nsIWebSocket.createServerWebSocket
提供 WebSocket 连接,客户端连接到该连接以向代理提供远程指令。因此,HTTPD 仅接受来自客户端的系统本地环回连接
if (!LOOPBACKS.includes(host)) {
throw new Error("Restricted to loopback devices");
}
远程代理实现了 Chrome DevTools 协议 (CDP) 的很大一部分。此协议允许客户端
出于自动化目的控制用户会话,例如模拟用户交互,例如点击和键入;
出于分析目的检测浏览器,例如拦截网络流量;
并从用户会话中提取信息,包括 Cookie 和本地存储。
远程代理中没有任何 Web 公开的功能。
安全模型¶
它与 DevTools 和 Marionette 共享相同的安全模型,因为除了传递命令行标志之外,没有其他机制可以启用远程代理。
我们假设如果攻击者对用户帐户具有 shell 访问权限,那么我们几乎无法阻止机密被访问或泄露。
远程代理在所有发布渠道上都可用。
远程主机和来源¶
默认情况下,RemoteAgent 仅接受没有 Origin
标头且 Host
标头设置为 IP 地址或 localhost 环回地址的连接。
可以通过使用 --remote-allow-origins
和 --remote-allow-hosts
参数启动 Firefox 来允许其他 Host
或 Origin
标头
--remote-allow-hosts
期望主机名以逗号分隔的列表--remote-allow-origins
期望来源以逗号分隔的列表
注意:强烈建议用户不要以允许不受信任的主机访问远程代理的方式使用远程代理,例如将其绑定到可公开路由的接口。
远程代理不提供消息加密,这意味着所有协议消息都可能被窃听和篡改。它也不提供任何身份验证系统。这在隔离的测试环境中是可以接受的,但不应用于不受信任的网络(例如互联网)。希望通过远程代理远程访问 Firefox 会话的人员必须提供他们自己的加密、身份验证和授权。
安全审查¶
更多详细信息可以在为远程代理和 WebDriver BiDi 进行的安全审查中找到
远程代理安全审查 (2019 年 11 月)
WebDriver BiDi 安全审查 (2022 年 4 月)