允许或反对允许 X11 转发有哪些安全问题和原因。我通常采取一种不允许它打着安全的幌子的方法。最近,我有一位用户表示,他们认为允许 X11 转发会话所带来的安全隐患可以忽略不计。我很想了解更多关于允许 X11 转发的危害以及为什么要允许它。
X11 转发的安全问题
X11转发的含义是它打开了从服务器返回客户端的通道。在一个简单的 SSH 会话中,客户端比服务器更受信任:控制客户端的任何人都可以在服务器上运行命令(假设 shell 访问),但反之则不然。使用 X11 转发,服务器很可能获得对客户端的 shell 访问。
在文本会话中,从服务器返回客户端的通道有限:服务器确定在客户端上显示的输出,特别是可以尝试利用客户端上运行的终端中的转义序列,
在 X11 会话中,服务器可以将 X11 命令发送回客户端。X11 的设计并没有考虑到安全性,它的设计理念是您显示的所有程序都由您运行,因此无论如何都是值得信赖的。默认情况下,SSH 通过X11 SECURITY 扩展使来自服务器的命令受到限制。SECURITY 扩展禁用了一些明显的攻击,例如键盘抓取和键注入,但允许其他攻击,例如窃取焦点。
假设我打开了一个 SSH 连接someserver
,并启用了 X11 转发。主要风险是,如果someserver
是恶意的,那么someserver
可以对我在自己的计算机上打开的 Windows/应用程序做各种讨厌的事情。
例如,someserver
可以打开我的计算机上的窗口,可以关闭我打开的其他窗口,可以监视我打开的其他窗口的内容,可以监视我在其他窗口中键入的键,可以将欺骗的击键和鼠标事件注入我打开的其他窗口,通常只是与我在我的机器上打开的所有其他窗口混淆——即使其中一些其他窗口是本地运行的本地应用程序。
在其他答案中讨论的通过 ssh 进行 X 转发的风险的一种解决方案是使用可能被称为伪装 X 服务器的东西,它不是真正的 X 服务器,而是向客户端软件提供伪 X 接口和伪 X 屏幕在容器上,同时将一些 X 工作传递给它背后的真实 X 服务器。伪 X 屏幕在主机实际 X 桌面上显示为单个 X 窗口。
尽管 Xephyr 并非旨在用作安全工具,但它确实符合该描述。
出于这个原因,我编写了一个 javascript 程序来从一个普通的 ubuntu 图像创建一个 lxd/lxc 容器,并用 firefox、openvpn、Xephyr 和 pusleaudio 填充它。
https://github.com/craigphicks/browser-on-lxc-vpn-xephyr
https://www.npmjs.com/package/browser-on-lxc-vpn-xephyr
我不会提出任何强有力的安全声明——这是一个概念验证练习。