在 MacBook 上禁用 USB 键盘可插拔性

信息安全 硬件 身体的 USB 操作 操作安全
2021-09-09 00:10:45

当我即将解锁我的计算机或我的计算机已解锁时,我担心 USB 设备物理连接到我的 MacBook 笔记本电脑。

我的威胁模型涉及一个攻击者,他愿意花费大约 200 美元来访问我的笔记本电脑,尤其是我自己的用户帐户或 root。因此,复杂的硬件修改或物理笔记本电脑更换等复杂的物理攻击是不可能的。

但我希望能够:

  1. 当我在咖啡店上厕所时,让我的电脑无人看管但锁定几分钟。

  2. 无需启动到隔离的 VM 或使用访客用户帐户即可插入外部 USB 存储设备。能够使用不受信任的电缆从 USB 端口为我的手机充电,同时仍然能够从我的用户帐户使用我的计算机。能够通过 USB 使用不受信任的外接显示器。

  3. 在我输入登录信息之前,请避免触摸我的 USB 端口以确保没有连接任何恶意内容。

我担心的攻击显然是 BadUSB 或定制设计的 USB 设备,它们可以像键盘一样工作(并且生产成本不到 200 美元)。这些设备可以在我将笔记本电脑无人看管的情况下插入,并且可能太小(想想 ubikey 大小)而无法立即注意到。或者,当我在屏幕上向他们展示某些东西时,他们可能会被坐在我旁边的人插入。

我已经采用了基本的操作安全实践,包括 FDE、固件密码、经常更改的用户帐户密码、在我离开时总是锁定我的计算机、不重复使用密码、只运行我信任的二进制文件等。

我正在考虑的解决方案是在插入新 USB 设备时必须“授权”它们;我应该能够查看它们的类型(例如键盘 VS 摄像头 VS 麦克风 VS 充电线 VS 存储设备)。如果我授权了一个 USB 设备并且它被拔下并重新插入,我应该可以选择重新授权或取消授权,并且在我做出决定之前它不应该能够采取行动。如果设备尝试重新注册为不同的类型,则应在获得授权之前将其阻止。

你知道允许我这样做的系统吗?谢谢!

3个回答

我猜您一次只想使用一个 USB 端口(在需要更多端口的少数情况下,您可以使用集线器连接该端口)并且您打算保留这台 macbook 直到它停止服务。(例如,某些 USB 端口是否被破坏并不重要)。

然后我建议用 Expoxy 胶填充除一个以外的所有 USB 端口。理想情况下,您选择打开的端口应该很容易看到或访问,以便您以后可以检测到对这个打开的 USB 端口的篡改。

然后,您使用 USB 锁。市面上有许多 USB 锁,有些具有适合所有 USB 锁的“通用”钥匙,另一些具有仅适用于相同颜色的 USB 锁的颜色编码钥匙,还有一些具有完全独特的钥匙。

如果您愿意,您可以购买其中一个带有钥匙的笔记本电脑电缆锁和一个锁定在 USB 端口中的 USB“tounge”,然后修改设备以移除锁定电缆,只留下“锁”。因此,您将“锁”锁定在打开的 USB 端口中,然后在没有钥匙或使用武力的情况下无法将其移除,并且使用武力也会破坏 USB 端口并留下操作已经生效的迹象。

如果您很少使用 USB 端口,只是偶尔,您甚至可以使用其中一个带有序列号的“USB 封条”,这是您放入开放 USB 端口(您选择不使用 expoxy)的一个小塑料设备,并且永久卡住。要去除密封,密封必须被破坏,然后塑料密封不能重复使用。然后,每个印章都有一个序列号,当您想要“确保安全”时,您可以对照安全来源(例如,您一直佩戴在钱包中的纸)检查该序列号。

如果您担心 BadUSB 和类似的攻击,您只需在计算机无人看管后每次回来时检查所有端口。但是请注意,即使这样也不能保护您免受 BadUSB 的侵害。

BadUSB 意味着我可以拿一个普通的 USB 设备,在上面刷自定义固件,然后对它造成严重破坏。如果事先知道相关设备上的 USB 芯片组,这可以相对快速地完成。攻击者可以抓取您的 WiFi 加密狗、BadUSB,然后将其放回您的计算机。BadUSB 更糟糕:攻击者可以将自定义固件刷写到一个设备上,感染您的计算机,然后从那里最终感染在未来任何时候插入您计算机的所有USB 设备,只要 BadUSB 持续存在。

BadUSB 的最佳解决方案是执行以下操作的各种集线器:

  1. 集线器本身绝不应该允许将固件刷入其中,或者至少要求所有固件都进行加密签名。
  2. 集线器应该为连接到它的所有设备维护一个权限列表。插入设备时,集线器应通知计算机已插入描述为鼠标的 USB 设备。
    • 如果它曾经要求成为键盘等,您应该收到通知。
  3. 不允许通过集线器刷新固件。这可以保护您的设备不被 BadUSB 损坏。

BadUSB是坏的。说够了。

请注意,至少某些操作系统将某些称为 pwnage 设备的 USB 设备列入黑名单。然而,这还不够好,因为 USB“id”是一个脆弱且容易伪造的东西:您的 Logitech 相机可以将自己识别为 Apple 键盘。

我为您的需求写了一个部分解决方案,我分享。

我只想在特殊情况下启用 USB。我正在运行一台不允许使用 USB 密钥的计算机。

我编写了一个 shell 脚本usb,它只在需要时打开所需的扩展以启用 USB 大容量存储的可见性。这是男人:

Usage: usb [on|off|]

要启用 USB 大容量存储:

usb on

禁用 USB 大容量存储:

usb off

检查是否可以识别 USB 大容量存储:

usb

这个 shell 脚本基于:

kextstat
kextunload

这让我可以使用我的 USB 端口重新加载 iPhone,但不能保护我免受 BadUSB 攻击。