为什么操作系统不能防止不受信任的 USB 键盘?

信息安全 巴杜斯
2021-08-17 15:10:02

最近我一直在阅读诸如 BadUSB 和RubberDucky之类的东西,它们本质上是告诉计算机它们是键盘的 USB 记忆棒。一旦他们被插入,他们就会“输入”他们被告知要执行的任何命令。我的问题是,为什么几乎每个操作系统都会自动信任键盘?例如,如果操作系统检测到插入了新键盘,为什么不弹出密码提示并禁止该键盘在输入密码之前执行任何操作?看起来这不会产生大量的可用性问题。是否有理由不使用这种或其他保护措施?

4个回答

您插入计算机的设备的信任模型本质上是困难的。创建 USB 标准是为了让几乎任何人都可以创建 USB 设备。安全不是一个因素。即使是,你把信任放在哪里?电影业用 HDMI 尝试了这种模式,但它基本上以惨败告终。你不能同时给某人一个做某事的设备,并阻止他们理解如何做同样的事情。

您的示例建议信任用户。最明显的问题是没有人想仅仅为了使用键盘而输入密码。除此之外,它真的能解决任何问题吗?

用户已经信任该设备,否则他们不会将其插入计算机。既然信任已经建立,他们为什么不简单地做任何需要让它发挥作用的事情呢?

首先,在启动过程中,键盘往往比操作系统更早受到信任——如果您有 BIOS 密码或 Bitlocker 密钥,您将在操作系统加载之前使用键盘输入该密码。事实上,一个特别恶意的键盘几乎可以做任何事情来阻止操作系统加载,甚至可能包括伪装成可启动驱动器,并在让操作系统启动之前启动 rootkit。

您还可以将相同的规则扩展到鼠标(它们可以单击一组预定义的点以打开虚拟键盘,然后键入他们喜欢的任何内容)。

或者,您可以决定只使用您信任的设备,并接受发生坏事的微小风险。

答案是可用性

用户应该如何同意鼠标/键盘是可信的?使用可能是恶意的键盘/鼠标?当必须更换/更换键盘时,您如何处理?尤其是在服务器场景中,您在其他地方存储了多个键盘/鼠标,当您需要物理访问服务器时,您可以选择次佳。几个月/几年后,您将不记得哪个键盘属于哪个服务器,键盘甚至可能被毁坏。如何使用替换键盘?同意未知键盘?如何用第一个键盘做到这一点?假设您尝试使用朋友的新 PC 并使用自己的键盘,然后将其提供给您的朋友。他应该如何同意他的键盘?编辑:您可以在第一次使用之前要求输入密码,但请参阅我的最后一段。

所以基本上未解决的问题是:计算机如何以一种易于使用的方式与用户建立一个无法被其他硬件/软件/坏人/...伪造/绕过的受信任/安全连接?

计算机安全 10 条不可变定律中的第 3 条是:“如果坏人可以不受限制地物理访问您的计算机,那么它就不再是您的计算机了。” 如果你从一个坏人那里放入一个 BadUSB,那么你就是这个坏人的爪牙,并通过代理让他物理访问它。请注意,有类似的比坏 USB 更糟糕的攻击。例如,将坏人的设备放入 FireWire 或其他 DMA 接口,可以让他读/写任何内存并运行任何代码,甚至可以绕过 Windows/Linux/Mac 的锁屏。因此,最好永远不要将不受信任的设备放入您的计算机。

编辑:由于这条规则,并且在考虑标准时没有考虑此类攻击(当时物理安全性不太重要,除非在物理访问受到限制的情况下),类似的东西从来没有成为标准的一部分。已经有许多更容易的物理访问攻击,因此不值得考虑这么小的边缘情况。这将大大增加系统的复杂性,特别是如果必须在多个操作系统和 BIOS 之间共享自动化( “按 F10 进入 BIOS”)以及要存储的数量。在决定在哪里显示密码时会出现下一个问题,尤其是在检测到多个显示器(如笔记本电脑屏幕有缺陷)时。所有这些也会对用户的接受度产生负面影响,一个更易于使用的标准可能会成为标准。由于这些设备是由经济型公司生产的,因此复杂性增加(=成本)和接受度降低(售出的件数减少),这种纤薄的边缘外壳在当时并不重要。

市场上有专门的软件可以让您为企业高安全性环境定义受信任的 USB 设备,但由于我提到的几点,它没有被广泛使用。

问题似乎总是在安全性和便利性之间。对于 HID 攻击,由于这些攻击需要物理访问,因此平衡似乎有利于便利。显然这可以实现,但目前似乎不需要这样做,如果当时威胁很小,为什么还要添加额外的代码和问题。