如何降低 X11 缓冲区重影的风险(palinopsia bug)

信息安全 数据泄露 风险管理 司机 x11 视频
2021-08-29 00:40:50

缓冲区“重影”现象

在某些情况下,可以在监视器上观察(旧的和当前使用的)图形缓冲区的内容,当与肩部冲浪结合使用时,会造成信息泄露风险:

  1. 在某些堆叠和平铺窗口管理器中快速增长窗口(总是)
  2. 关闭 X11 服务器(有时)

(1) 屏幕的一部分或整个 (2) 屏幕将显示当前活动窗口的一部分(来自可能不同的工作区/桌面)或很久以来关闭的窗口。

根据窗口破坏后的年龄和缓冲区活动,这些有时看起来轻微或严重“损坏”。显示的剩余缓冲区有时看起来像“精灵表”。

这种现象在调整大小时会发生几分之一秒,或者在 X11 关闭时会发生约 1 秒,因此提供屏幕截图是不切实际的。对不起。

核心问题

我如何切实地减轻或消除披露这些剩余缓冲区中包含的信息的风险?

这假设总是隐藏我的显示器是不切实际的,这将是经典的反肩冲浪方法。

附加信息

尝试解释原因

这只发生在本地 X 服务器上,而不是通过 ssh,所以我假设底层缓冲区在显卡内存中。

基于咨询 xlib 文档的假设:

  1. X11 服务器提供了一个放大的缓冲区来绘制(现在更大的)窗口,但是在 X11 服务器开始显示它之前,提供窗口的应用程序并没有完全清除/绘制到这个窗口中。这会导致缓冲区中的一些垃圾数据被读出,如果缓冲区的内存以前用于另一个窗口,则这些数据有时恰好是连贯的图像。

  2. X11 服务器关闭后,旧窗口的底层缓冲区中仍然存在垃圾数据。显卡还处于激活状态,但是内核模式设置还没有接管,有一段时间输出垃圾数据。

在这些设置上重现

在窗口调整大小和 X11 服务器关闭时:

  • Arch Linux(最新)、i3、xorg-server 1.18.3-1、nvidia-340xx、Nvidia GT218
  • OpenSuSE Linux 13.2|42.1、i3、x11-video-nvidiaG02|G03|G04、Nvidia G98 Quadro
  • Debian Jessie Linux, i3, xorg-server, nouveau|mesagl, intel 集成显卡

在 X11 服务器关闭时:

  • Opensuse 13.2|42.1、LXDE|GNOME|KDE、x11-video-nvidiaG02|G03|G04、Nvidia G98 Quadro
1个回答

部分答案:

你所说的“缓冲区重影”,也称为palinopsia bug该链接提供了一个概念证明,一个简短的脚本,用于显示您的视频 RAM 以及已关闭应用程序的内容。除了常规 RAM,GPU 视频 RAM 在分配时默认不会归零。有些司机会这样做,有些则不会;将 RAM 归零会稍微降低性能。

您可以禁止应用程序使用不受信任的 cookie 访问 GPU。示例: xauth -f $HOME/mycookie generate . untrusted XAUTHORITY=$HOME/mycookie glxgears glxgears将无法启动,因为它没有 GPU 访问权限。使用trusted而不是untrusted允许 GPU 访问,并且 glxgears 有效。

在 i3 或 openbox 等非合成窗口管理器上使用不受信任的 cookie 可能会被保存。使用 Gnome 或 KDE 等 3D 效果组合窗口管理器各自的桌面可以将窗口内容存储在视频内存中,即使应用程序本身没有。我不确定 X 本身是否可以在此处未预先考虑的情况下使用视频 RAM。

这只发生在本地 X 服务器上,而不是通过 ssh

Afaik,ssh 总是使用不受信任的 cookie。

我如何切实地减轻或消除披露这些剩余缓冲区中包含的信息的风险?

永远不要使用你的 GPU(叹气)。对开发人员大喊大叫写一个错误报告。不要在 chrome 隐身模式下查看 pron

视频 RAM 甚至可以从一个系统重新启动到另一个系统。

唯一真正安全的方法可能是在内核级别禁用 GPU。

从安全的角度来看,驱动程序应该在释放后立即将显存归零,因为显存可以在不使用驱动程序的情况下访问,并且在重新启动后仍然存在。至少它应该在分配时将视频内存归零。也没有完成。


某些应用程序可能会遇到不受信任的 cookie 的问题。也有可能在 X 服务器中禁用 OpenGL / GLX 扩展。(请注意,这对像 Gnome 3 Wayland 会话这样的 Wayland 合成器没有影响)。

创建一个文件:

/etc/X11/xorg.conf.d/disable-gpu.conf

内容:

Section "Extensions"
    Option "GLX" "Disable"
EndSection

您可以在禁用 GLX 的情况下一次性运行 X,而不是这种永久的 xorg.conf 配置。从 tty2 开始 X startx -- -extension GLX vt2(设置NvtNtty 的编号)。