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

时间:2019-09-28 17:56:29

标签: x11

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

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

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

这是什么原因?例如,很容易为每个窗口生成一个共享的HMAC密钥,并使客户端对每个请求进行签名。

我的第一个猜测显然是性能-如果签署并验证客户端请求以在窗口中绘制几个像素,则可能会有明显的延迟。但是,对于许多简单的桌面应用程序,延迟可能仍然可以忽略不计,那么为什么没有适当的安全措施,甚至可选措施也没有?我想念什么吗?

2 个答案:

答案 0 :(得分:4)

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

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

  

当前的X服务器几乎无法保护其完整性   客户程序数据。 X服务器不会直接与   客户的数据。客户可以直接吸引其他客户的   窗口,可以将输入或任何其他类型的事件直接发送到   客户。恶意客户端可能导致另一个客户端出现虚假信息   给用户的信息。否则攻击者可能会插入恶意软件   命令输入到终端仿真器的输入流中。这些类型的   攻击可能导致应用程序侵犯系统的完整性   政策,本文提出的保护措施旨在   保护X客户端的完整性。

这是为什么要在替代X显示系统(如Mir或Wayland)上开始工作的一些原因。后者是大多数Linux台式机所处的位置。

如果您想进一步了解X Window系统的安全性,那么NSA的上述论文是非常有用的资源。

答案 1 :(得分:0)

一些历史:X11是在80年代开发的。目标之一是允许多个程序在单个显示器上协同工作。在那个时候,几乎没有/没有黑客入侵,远程访问等。另外,请记住,那时还没有openssl,并且大多数连接都使用明文(ftp,telnet)。安全问题和功能(ssh)出现的时间要晚得多。

使系统运行稳定是一个重大成就。回想起来,将设计扩展到支持客户端之间的保护是一个好主意。