用于防止 BadUSB 的硬件设备?

信息安全 USB 巴杜斯
2021-08-15 23:41:35

是否发布了任何可以防止 BadUSB 攻击的设备?

我对购买具有以下保护功能的 USB 集线器特别感兴趣:

  • USB 集线器本身不允许重新刷新自己的固件,或者至少需要使用强加密密钥(>2048 位 RSA)对新固件更新进行签名。
  • USB 集线器不允许固件写入命令到与其连接的设备。
  • USB 集线器将具有单或双/用途端口:
    • “块设备”端口仅允许插入此处的设备充当块设备。
    • “键盘”端口,仅允许插入此处的设备充当键盘。
    • “鼠标”端口,仅允许插入此处的设备充当鼠标。
    • “键盘/鼠标”设备允许插入此处的设备同时充当键盘和鼠标,认为是混合键盘/鼠标组合。
    • “其他”端口允许事物成为块设备、键盘或鼠标以外的任何东西。想想蓝牙加密狗、相机、麦克风等。

是否有任何硬件设备可以执行类似的操作来防御 BadUSB?

2个回答

我希望有人会用可靠的论据反驳我,但是“ USB 集线器将不允许固件写入命令到与其连接的设备。 ”:这似乎是一个错误的假设,它使所有硬件 BadUSB 保护系统都消失了。

确实有一篇相关且内容丰富的帖子:如何检查我的 U 盘固件是否可以通过 USB 端口重写?. 人们可以在那里了解到没有通用的“写入”命令:每个供应商都为此目的使用自己的命令。更糟糕的是:对于一些供应商,我们应该更多地谈论“技巧”而不是实际命令,LvB 提到“ USB记忆棒或USB HDD在写入极端地址而不是将其写入磁盘时,将其写入内部存储器”。

这样的硬件如何过滤无法检测到并且只是正常设备通信流的一部分的东西?

我认为这在设计上是不可能的。当 USB 被发明时,它被用来取代繁琐的通信方法,如并行和串行电缆、使用标准化电缆和插头的专有接口。它还将通过标准化较低层驱动程序模型来解决编程问题,以便可以更轻松地对驱动程序进行编程。

最后,我想说 USB 的存在是因为它具有热插拔功能。这无疑是当今计算机最舒适的功能之一。我记得如果您在启动时忘记插入键盘(例如服务器)会多么痛苦:其中一些需要完全重新启动才能检测到 PS/2 键盘。

那时没有人考虑安全问题。USB 记忆棒不存在,所有连接到 USB 的设备或多或少都是愚蠢的。因此 USB 不使用标准化的方式来刷新固件或检测“非法”行为。

USB集线器是一个非常愚蠢的设备:它处理将新设备热插拔插入通信(AFAIK通过短暂地强行中断所有其他设备)和移除。它可以查看设备的电力需求,并在新设备消耗过多电力时禁止新设备上线。这主要是全部,而且没关系:它们既便宜又非常快。

USB 集线器不会检查通过的数据,控制器也不会。它根本不是为了做到这一点而设计的,也没有写在任何规范中。现在有人可能会争辩说,将端口使用限制为仅允许某些类可能与规范兼容但是:类设备也很复杂:想想组合的鼠标/键盘无线发射器。它将显示为多设备,同时显示鼠标和 HID 组件。它们中的大多数可以与基本的操作系统驱动程序一起运行,但也可以与特定的供应商软件一起使用,以允许增强功能,如附加功能键或高 DPI 率。我喜欢我的 Roccat 游戏鼠标,例如 havin 3200 dpi。因此,在注册为类设备后,如果在 PC 上安装了正确的驱动程序,它会以某种方式切换模式。

所有其他东西必须由操作系统处理。是否允许加载驱动程序完全掌握在操作系统内核的手中。市场上有软件可以控制 USB 端口的使用,这些软件可以按照您想要的方式运行。

恕我直言,您尝试修复错误的问题:如果您担心 USB 安全,您应该简单地关闭所有 USB 端口或查找/要求可以在操作系统级别实现您想要的策略的操作软件。例如,Linux 可以通过自定义内核限制为仅使用某些 USB 驱动程序。