我想知道,如果假设我连接了一个不受信任的设备(通过 USB 端口连接到我的系统),我的 Linux 系统会面临多大的风险?特别是,我担心即使我会编写udev
规则来阻止除(即白名单方法)特定设备之外的任何设备,但内核仍然容易受到攻击吗?
udev 是否有能力阻止内核(假设它是模块化的)加载通常作为与 USB 设备交互的方式加载的模块?
答案1
内核有能力保护自己免受 USB 设备的侵害,使用USB授权框架。您可以在启动时禁用所有主机:
for host in /sys/bus/usb/devices/usb*
do
echo 0 > $host/authorized_default
done
或者甚至在处理设备之前,通过传递usbcore.authorized_default=0
内核命令行来完全禁用授权(只需确保您的udev
规则启用您需要启动的任何 USB 设备,例如键盘)。
完成后,连接 USB 设备将不会加载任何新模块或创建任何新设备。要启用新的 USB 设备,您必须手动对其进行授权,然后手动触发驱动程序探测(有关详细信息,请参阅文档)。