是否可以在 Linux 中加入 USB 白名单?

信息安全 linux USB
2021-08-15 12:22:12

在观看了 Black Hat 关于USB“安全性”基本问题的介绍之后,我想知道是否有办法在 Linux 中进行 USB 白名单。

目前是否有一种机制只允许特定的 USB 设备列表实际加载驱动程序并在最新的 Linux 内核上运行?

4个回答

USB 设备通常由供应商和设备 ID 标识,并且在 Linux 中,使用udev处理对 USB 设备的支持。您可以编写 udev 规则来拒绝所有设备,保留特定(白)列表。例如看这个问题

但是,这可能不会带来您希望的安全性。实际上,来自给定供应商的特定型号的所有设备都将共享相同的 ID。如果您通过白名单允许 ID 为 08e6:3438 的设备,则任何声称拥有该 ID 的设备也将被允许。敌对设备可以完美地宣布它希望显示的任何 ID。要拥有真正的白名单,您需要每个设备都包含攻击者无法猜测的特定标识符(即密钥)。现有的 USB 协议和设备中没有这种类型的东西。

在任何情况下,这样的白名单对于物理控制都是多余的。作为机器前有形的人类用户,您可以决定是否将特定设备插入 USB 端口。如果要插入手头的给定设备,则可以更改规则以允许它;如果您不插入设备,那么您也不需要白名单。USB 设备过滤在不受信任的情况下最有用用户可以访问物理端口。可以说,这是一个非常糟糕的情况,因为这意味着不受信任的用户对硬件有一定程度的物理访问权限。这可能适用于摄影店的自助服务亭——但在这种情况下,不受信任的用户应该携带自己的 USB 设备,因此白名单不再有意义。

是的。有点。

“加载驱动程序”有点模棱两可。通常 USB 驱动程序被嵌入到内核中,因为它们可能在启动期间需要。此外,在不“加载”USB 子系统的情况下,您无法查询 USB 设备以找出其设备 ID,并且通常特定于设备的驱动程序只是由所有类似设备共享的大容量存储或 HID 系统。所以让我们抛开这个要求。这很愚蠢。

但您可以将 USB 设备列入白名单。这已在 SuperUser 和类似网站上广泛介绍。

超级用户:使用 udev 的 USB 闪存白名单

问 Ubuntu:是否可以使用 udev(udev 规则)将某些 USB 设备列入白名单?

Unix & Linux:允许特定拇指驱动器供应商的 udev 规则是什么?

一个简单的谷歌搜索将出现数百个关于该主题的指南。

正如其他帖子所说,你可以说“16GB Lexar Jumpdrives 可以在这里工作,其他一切都被禁止”,但不能说“这个特定的闪存驱动器只能在这个网络中工作”。

但是,与许多事情一样,您可以欺骗系统。这是一个 defcon 演讲,其中有人构建了一个充当 USB MITM 的设备,并将在不同设备之间转换命令,因此我可以将一个随机的 Sandisk 插入一个仅限 lexar 的网络,并将文件复制到它就好了。

https://www.defcon.org/images/defcon-20/dc-20-presentations/Polstra/DEFCON-20-Polstra-Bypassing-Endpoint-Security.pdf

这确实会留下法医证据等,但如果这种方法在您的环境中有意义,它也会提高标准。请记住,USB ID 就像条形码,而不是 MAC 地址。它们不是每个设备唯一的。

截至2007 年,似乎可以手动指定允许哪些 USB 设备(或 USB 设备的接口)与驱动程序关联。

请参阅文档:
https ://www.kernel.org/doc/Documentation/usb/authorization.txt


(没有人会感到难过。我在一次不相关的研究考察中偶然发现了这一点,在认为内核中不存在该功能之后。)