在 Ubuntu 中,我可以使用“截屏' 工具在用户空间中运行。这怎么可能呢?这是否意味着任何进程都可以随时监视屏幕内容以读取敏感信息而无需 root 权限?
编辑:我并不特别关心截图程序。我只是用它作为一个例子来说明任何进程都可以读取屏幕上的内容而无需权限。例如,如果我打开了我的税务文件,任何运行的恶意脚本都可以在我不知情的情况下捕获它。
答案1
经过一番研究,我意识到这是使用 X 窗口系统时不可避免的问题,Ubuntu 默认实现了该系统。好消息是,Wayland 似乎可以缓解这些问题。
评论分享的一篇非常好的文章是这,解释这一安全漏洞。
Linux 安全马戏团:关于 GUI 隔离
当然有一件事最多Linux 用户没有意识到他们的 Linux 系统……这是 GUI 级隔离的缺失,以及它如何从根本上抵消所有桌面安全性。我写过几次关于它的文章,我谈过几次,但我仍然遇到一些始终没有意识到这一点的人。
所以,让我再强调一次:如果您有两个 GUI 应用程序,例如 OpenOffice 文字处理器和愚蠢的俄罗斯方块游戏,它们都授予了访问您屏幕(您的 X 服务器)的权限,那么这两个应用程序之间就没有隔离。即使它们以不同的用户帐户运行!即使它们以某种方式被 SELinux 或其他什么沙盒化!无、零、空、零!
X 服务器架构是很久以前由一些快乐的嬉皮士设计的,他们只是认为所有人的应用程序都是好的和非恶意的,它只是允许任何 GUI 应用程序控制任何其他应用程序。不需要任何错误、漏洞或技巧。这都是设计使然。一个应用程序可以嗅探或向另一个应用程序注入击键,可以对另一个应用程序的窗口占用的屏幕进行快照,等等。
如果你不相信我,我建议你做一个简单的实验。以普通用户身份打开一个终端窗口,然后运行xinput list
,这是 Xorg 的标准诊断程序:
它将显示 Xorg 所知道的所有指针和键盘设备。记下列出的设备 ID,即“AT 键盘”,然后运行(以普通用户身份):
xinput test *id*
现在它应该开始显示您在键盘上按下的所有键的扫描码。如果没有,则表示您使用了错误的设备 ID。
现在,最好启动另一个终端窗口,然后切换到 root(例如使用su
或sudo
)。请注意,以用户身份运行的 xinput 如何嗅探您的所有击键,包括 root 密码(用于 su),然后是您在 root 会话中输入的所有击键。以 root 身份或以其他用户身份启动一些 GUI 应用程序,再次注意您的 xinput 如何嗅探您输入到该其他应用程序的所有击键!
是的,我能理解你现在的心情和想法……别担心,其他人也经历过。你可以恨我、辱骂我等等。我真的不介意(我只是不会管束他们)。当你冷静下来后,继续阅读。
在 Qubes 安全分布中,上述问题不存在,因为每个域(每个 AppVM)都有自己的本地、隔离、虚拟 X 服务器。在 Dom0 中运行并处理实际显示的主 X 服务器永远不会直接暴露给任何 AppVM(AppVM 无法通过 X 协议连接到它)。有关详细信息,请参阅技术概述。
您可以在 Qubes 中重复相同的实验。您只需使用“qubesdev”设备的 ID,如 xinput 列表所示(应该是 7)。在您的一个域中运行 xinput,例如在“红色”域中。因为我们实际上对鼠标和按键使用相同的设备,所以您现在应该可以看到按键扫描码以及所有鼠标事件。请注意您的 xinput 如何能够嗅探发往属于该域的其他应用程序的所有事件同一域你在哪里运行 xinput,以及它如何无法嗅探到任何针对其他域名或 Dom0。
顺便说一句,据我所知,Windows 是唯一一款真正尝试实现某种形式的 GUI 级别隔离的主流操作系统,从 Windows Vista 开始。例如,请参阅此古文 我在主笔记本电脑上使用 Vista 时写过这篇文章。当然,由于每个 GUI 客户端都拥有庞大的界面(其中还包括 GPU API),因此仍然很容易绕过这种隔离。尽管如此,他们至少尝试在架构层面上阻止这种情况。
答案2
答案3
老牌的 X11 是一项传统技术,在这方面不是很安全,您甚至可以(视频)捕获和共享桌面,而不仅仅是静止图像。
这就是为什么像 Wayland 这样的新替代方案不允许第三方应用轻易实现这些功能但我们这些普通用户已经习惯了这些特征没有这些选项会破坏大多数普通用户使用这些替代方案的可用性。
请参阅此内容以了解更多信息:为什么 Wayland 更好?