x11 - 为什么没有安全措施来防止通过 X11 在其他应用程序窗口上绘图?

标签 x11

我最近一直在研究 X 窗口系统,我发现在另一个进程创建的窗口上绘图是相当简单的。您所需要的只是窗口 ID。我不确定如何通过 X11 核心协议(protocol)检索窗口 ID 和其他现有窗口信息,但这显然是可能的,因为有一个名为 xwininfo 的简单 X11 实用程序可以做到这一点。

xwininfo不需要root权限,也不需要root权限来绘制其他应用程序创建的窗口。事实上,我只是直接将像素绘制到现有的终端窗口上,而没有从用户空间提升任何权限。

这不是安全问题吗?事实上,任何应用程序都可以在任何其他应用程序的窗口上绘图,这似乎可能会引发问题,例如恶意软件绘制的不可消除的广告。

这是什么原因呢?例如,为每个窗口生成一个共享 HMAC key 并让客户端签署每个请求将很容易。

我的第一个猜测显然是性能 - 如果需要签名和验证客户端请求才能在窗口中绘制几个像素,则可能会出现明显的延迟。然而,对于许多简单的桌面应用程序来说,延迟可能仍然可以忽略不计,那么为什么没有采取任何类型的安全措施,甚至是可选的安全措施呢?我错过了什么吗?

最佳答案

X11 是一种允许远程显示图形用户界面的协议(protocol)。如今,通常X服务器(负责与“窗口管理器”或“桌面环境”通信的服务器)主要运行在本地桌面上,并以root身份运行。除其他原因外,这意味着 X 服务器可以访问在其下运行的所有内容,并且由于应用程序之间没有隔离(请注意,这可能是由于各种实际原因而通常不会完成),因此您可以做任何您想做的事情尽管客户端应用程序以非特权用户身份运行,但希望如此。

引用 NSA 的“Securing the X Window System With SELinux”的完整性部分:

The current X server offers little protection for the integrity of client program data. The X server does not interact directly with the data of the client. Clients can draw directly into another client’s window and can send input,or any other type of event, directly to a client. A malicious client can cause another client to present false information to the user. Or an attacker could insert malicious commands into the input stream of a terminal emulator. These types of attacks can cause an application to violate the system’s integrity policy, and the protections presented in this paper are designed to protect the integrity of X clients.

这就是为什么开始研究 Mir 或 Wayland 等替代 X 显示系统的一些原因。 。后者是大多数 Linux 桌面的发展方向。

如果您想了解有关 X Window 系统安全性的更多信息,上面来自 NSA 的论文是一个很好的资源。

关于x11 - 为什么没有安全措施来防止通过 X11 在其他应用程序窗口上绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58148959/

相关文章:

python - X11 - 如何使用 Python 提升另一个应用程序的窗口

linux - allegro 是否使用 X11 创建显示窗口?

X11:等到一个窗口可见?

windows - 如何在不关闭 session 的情况下从Linux远程控制Windows

c++ - 我如何在 X11 中捕获键盘事件?

java - 据说 `libX11`不是线程安全的。这是否意味着我不能将 Java AWT 与其他也使用 X11 的东西(例如 Qt)混合使用?

x11 - X11 中的可移植键码?

java - 如何以编程方式确定在 Java 中运行 x11 窗口的进程

c++ - 在 X11 下如何判断你的光标是否指向你的桌面

ssh - 远程运行Octave并通过X11在本地显示