阻止螢幕共享
我的系統是否有任何部分可以阻止從 Linux 系統上的 firefox 程序訪問,這會破壞螢幕共享?
我在影片通話中註意到 Firefox 能夠進行螢幕共享,這意味著該程序可以讀取我螢幕上顯示的內容。
我不喜歡我的瀏覽器可以訪問螢幕上的所有內容。這背後的機制是什麼?
為什麼 X11 下可以進行螢幕共享?
在 X11 安全模型中,每個可以訪問 X 伺服器並且不受 X 伺服器擴展限制的客戶端預設情況下都是受信任的,並且可以使用查詢
XCopyArea
或XGetImage
擷取螢幕上每個視窗的內容。造成這種情況的原因主要是歷史原因,因為 X11 協議的第一個版本是在 1987 年發布的,並且後來“增加了安全功能”。Wayland 有更嚴格的安全設計。只有合成器或指定的受信任應用程序才能訪問其他視窗的內容。
X 訪問控制擴展框架
阻止螢幕共享的一種精心設計的解決方案是使用X 訪問控制擴展 (XACE)編寫 X 伺服器擴展模組。此擴展為其他擴展模組提供掛鉤,以允許細粒度的訪問控制決策。
不幸的是,我沒有找到任何可以阻止特定應用程序訪問外部視窗的預先存在的模組,因此您需要自己編寫一個這樣的擴展。這可能是一項相當耗時的任務。
X 安全擴展
一個更簡單的解決方案是安全擴展。它早於 XACE,僅區分“受信任”和“不受信任”客戶端,因此它不僅阻止螢幕共享**,還阻止圖形加速、游標擷取、自定義游標和全屏視窗**等功能。所以它可能會導致錯誤的行為,並會減慢渲染速度。
基本思想是應用程序使用“魔術 cookie”來授權 X 伺服器。這些“cookies”本質上是寫入某個文件(
~/.Xauthority
或/tmp/xauth-*
環境變數中引用的文件XAUTHORITY
)中的隨機數,應用程序可以使用這些隨機數向 X 伺服器證明它們被允許連接。Cookie 可以是“受信任的”或“不受信任的”。登錄時生成的預設 cookie 是受信任的。因此,要限制 Firefox,您需要在新的 X 授權文件中生成一個新的不受信任的 cookie,並使用
XAUTHORITY
環境變數在啟動時為 Firefox 提供不受信任的 cookie。這可以使用xauth
命令來實現。以下包裝腳本將作為不受信任的 X 客戶端執行作為參數給出的程序:
#!/bin/sh # Create empty file only accessible by the current user or empty it if already existing (umask 0077; : > ~/.Xauthority-untrusted) # Generate an untrusted magic cookie expiring 30 seconds after last use xauth -f ~/.Xauthority-untrusted generate "$DISPLAY" MIT-MAGIC-COOKIE-1 untrusted timeout 30 # Set the environment variable XAUTHORITY=~/.Xauthority-untrusted export XAUTHORITY # Replace the shell with the program given on the command line exec "$@"
將其另存為 eg
untrusted.sh
並使其可執行。然後你就可以使用./untrusted.sh firefox
.請注意,這並不能完全防止惡意應用程序。只要應用程序在您的本地電腦上和您的使用者帳戶下執行,就可以繞過這種保護,因為惡意應用程序可能會猜測原始授權文件的位置或利用
xhost
訪問控制等提供的一些備份規則,但它是足以阻止瀏覽器共享螢幕。