在围绕从 X.org 到 Wayland 的持续过渡的讨论中,我经常遇到类似“Linux 安全性尚不存在”的评论。这指的是 Wayland 对更好(但不是完美)桌面隔离的承诺(例如,防止两个 GUI 应用程序之间的键盘记录)。
这对我来说意味着其他操作系统(Windows、macOS、Android、iOS)上的显示管理器比 X.org 和 Wayland 具有更好的隔离性?这是真的?
在围绕从 X.org 到 Wayland 的持续过渡的讨论中,我经常遇到类似“Linux 安全性尚不存在”的评论。这指的是 Wayland 对更好(但不是完美)桌面隔离的承诺(例如,防止两个 GUI 应用程序之间的键盘记录)。
这对我来说意味着其他操作系统(Windows、macOS、Android、iOS)上的显示管理器比 X.org 和 Wayland 具有更好的隔离性?这是真的?
Microsoft Windows,自 Vista 以来,至少尝试过隔离窗口,例如使用UIPI和会话 0 隔离。这并不完美,并且存在一些限制。Windows 向客户端窗口公开了许多大型 API,从而可以绕过隔离。这是 UAC同意提示的一个特殊问题,其中假设只有真正的用户才能授予同意。此外,AppContainer 能够隔离各个窗口。不幸的是,我对 Windows 如何管理 GUI 隔离知之甚少,而且自 Vista 以来情况肯定发生了变化。事实是,Windows 确实尝试在一定程度上隔离单个窗口,但存在绕过。
Xorg 是 Linux 的原始显示管理器之一,已取代 Xfree86。它使用 X11 协议。当图形应用程序希望在屏幕上绘图时,它使用 X11 协议通过 UNIX 域套接字或通过本地网络连接到 X 服务器。要对 X 服务器进行身份验证,它必须提供 X11 cookie,它是文件中的随机值,只能由单个用户读取,或者作为该用户的环境变量导出。任何可以访问 X11 cookie 的程序都可以完全访问 X 服务器。它能够读取击键、注入击键、截屏、移动窗口等。因此,Xorg 下的图形隔离仅限于针对包含 X11 cookie 的文件的 DAC(UNIX 权限)。鉴于我们经常(愚蠢地)在 X11 会话中输入我们的 root 密码,同时我们可能易受攻击的浏览器打开了一百个不受信任的选项卡,这种安全设计并不是最好的主意。提高 X11 安全性的尝试,例如XSECURITY 扩展,惨遭失败。它太复杂了,也太容易绕过了。
不过,有一种方法可以在使用 X11 的系统上获得图形隔离。创建嵌套的 X 服务器,例如使用 Xephyr,允许在它们自己的 X 服务器中启动单个应用程序。将此与强制访问控制相结合以强制每个应用程序只能读取其自己的嵌套 X 服务器的 X11 cookie 来完成此操作。这提供了隔离,但对 X11 协议及其扩展的过度复杂性没有任何作用。几十年前的应用程序中的漏洞不断出现。
Wayland 应该是 Linux 桌面安全的答案。它以共享库的形式与窗口管理器集成,允许窗口管理器能够管理单个窗口的权限。每个窗口都可以向窗口管理器请求权限,窗口管理器可以授予或拒绝它们。Wayland 的整体架构大不相同来自 Xorg,并且有许多与安全性不直接相关的内部差异(例如,Wayland 不自己进行渲染,而是需要客户端窗口进行渲染)。单独的差异将占据整个答案。在安全方面,Wayland 的优势在于它为充满不受信任的图形应用程序的桌面提供机密性、完整性和可用性,并且它使用更简单的协议运行,需要更少的权限才能正常运行。
我对移动计算知之甚少。所有类型的移动操作系统与桌面操作系统之间的一大区别是,移动设备往往更加单一且可配置性有限。这使得安全策略更易于设计。因此,窗口间通信变得不那么重要了,以至于 Android 甚至可以在自己的 UID 和 GID 下运行每个单独的应用程序,完全与系统的其余部分隔离开来。iOS 可能会做类似的事情。如果我发现更多关于 Mac OSX(它肯定没有与恶意应用程序完全隔离)和 Android/iOS 图形隔离,我将编辑这个答案。
要回答您的问题,许多操作系统确实比 Xorg(没有)具有更好的隔离性,但并不比 Wayland 好,目前尚不知道在不使用新漏洞或劫持整个用户的情况下可以绕过。Wayland 是对 X11 模型的重大改进。