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

问题描述 投票:2回答:2

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

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

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

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

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

x11
2个回答
3
投票

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

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

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

这是为什么要在替代X显示器系统Mir或Wayland上开始工作的一些原因。后者是大多数Linux桌面的发展方向。

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


0
投票

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

达到系统正常工作和稳定的地步是一项重大成就。回想起来,将设计扩展为支持客户端之间的保护是一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.