X11危险吗?

X11危险吗?

我是 X11 的新手,想了解它是否真的像网上所说的那么危险。

我将解释我是如何理解这一点的。从当前用户下启动的任何应用程序都可以访问键盘、鼠标、显示器(例如截屏),这不好。但是,如果我们从官方存储库安装程序(例如,对于 Debian),其中不太可能包含键盘记录器等,那么危险似乎被夸大了。我错了吗?

是的,您可以在单独的服务器上打开应用程序(例如,Xephyr),但这很不方便,因为没有共享剪贴板。基于tmp文件创建剪贴板也很不方便。

答案1

从当前用户下启动的任何应用程序都可以访问键盘、鼠标、显示器(例如截屏),这不好。

桌面上的所有 X11 客户端都可以深度相互访问,包括获取任何窗口的内容、更改它、关闭任何窗口、向任何其他客户端伪造按键和鼠标事件、抓取任何输入设备等。

X11 协议的设计基于这样的理念:客户端都是受信任的,并且会协作,而不是踩对方的脚趾(后者完全被 Firefox、Chrome 或 Java 等现代应用程序打破)。

但是,如果我们从官方存储库(例如,Debian)安装程序,而这些程序不太可能包含键盘记录器等,那么危险问题显然被夸大了。我错了吗?

程序存在缺陷,可能会被利用。 X11 服务器和库可能不是最新的。例如,任何 X11 客户端都可以碰撞当前版本 Debian (Buster 10) 中的 X 服务器通过无害的 Xkb 请求。 (那是固定的在上游源代码中,但尚未在 Debian 中实现)。如果它能够使其崩溃,那么它也有可能能够使用 X11 服务器的权限(访问硬件等)执行代码。

对于 Xwayland 中认证不严格的问题(以及 Debian 中的常规 Xorg Xserver),请参阅末尾的注释这个答案

是的,您可以在单独的服务器(例如 Xephyr)上打开应用程序,但这很不方便,因为没有共享剪贴板。基于tmp文件创建剪贴板也很不方便。

请注意,除非您采取额外的步骤,Xephyr允许任何本地用户默认连接到它。看对此进行讨论。

在多个 X11 服务器之间创建共享剪贴板是一个有趣的问题,值得单独进行问答,而不是与此混合。

答案2

使用相同用户帐户运行在同一台机器上的应用程序可以使用ptrace系统调用来修改彼此的进程内存,因此 X11 并不是这里最方便的攻击面。

对于您不完全信任的应用程序,您需要首先使用不同的用户 ID 运行它们(就像 Android 对来自不同供应商的应用程序所做的那样),并且您可以使用 XSECURITY 扩展为 X 服务器生成“不受信任”的访问令牌,应用程序对 X11 的访问受到限制:

  • 无法访问不针对自己窗口的输入事件
  • 无法访问 XTEST 扩展
  • 没有透明窗户

X11 中的输入事件有一个Synthetic字段,用于告知输入事件是从输入设备生成还是从另一个程序发送,并且接收程序决定如何处理合成事件,例如xterm忽略它们。 XTEST 扩展允许Synthetic从软件生成非事件以用于测试目的,这就是不允许不受信任的客户端使用该扩展的原因。

相关内容