如ArsTechnica 所述,我可以做些什么来保护我的 Linux 笔记本电脑免受 BadUSB 攻击?
也许编写适当的AppArmor配置文件会有所帮助?
如ArsTechnica 所述,我可以做些什么来保护我的 Linux 笔记本电脑免受 BadUSB 攻击?
也许编写适当的AppArmor配置文件会有所帮助?
BadUSB 攻击基于计算机允许并启用所有 USB 端口上的 HID 设备这一事实。伪造的网络适配器并没有真正的危险。我的回答试图描述如何使用 udev 暂时禁用添加新的 HID 设备。我不是 udev 专家,但我已经测试了我的方法,它对我有用。
为了准备,创建一个/etc/udev/rules.d/10-usbblock.rules
包含以下内容的文件:
#ACTION=="add", ATTR{bInterfaceClass}=="03" RUN+="/bin/sh -c 'echo 0 >/sys$DEVPATH/../authorized'"
如果你也想屏蔽其他的班级,那就查一下班级号码,复制那行,然后改班级。
现在您可以使用命令阻止所有新的 HID 设备
sed -i 's/#//' /etc/udev/rules.d/10-usbblock.rules; udevadm control --reload-rules
并通过以下方式解除封锁:
sed -i 's/^/#/' /etc/udev/rules.d/10-usbblock.rules; udevadm control --reload-rules
在您关闭之前,请始终取消阻止,因为该设置是持久的,并且您的“好” HID 设备将在重新启动时被拒绝。
我不知道您是否可以编辑临时规则目录,但如果那里的更改影响行为,您应该编辑它,因为这样您就不需要在关机前取消阻止。
BadUSB 背后的想法是恶意代理重新刷新设备的 USB 控制器芯片来做一些令人讨厌的事情。这是一个有趣的可能性,但这里有一些人们倾向于掩盖的严肃假设:
如果可能的话,这是一个安全漏洞。如果允许,则设备插入的任何主机都可以永久更改设备的特性。通常,这需要特殊设备并直接访问芯片的物理引脚,但如果制造商决定通过 USB 协议公开该功能,那么这本身就是引起警报的原因,应该将其报告为该产品中的漏洞。然而,这并不是协议本身的缺陷。
4 个预定演示中有 3 个涉及 Phison Electronics 的芯片这一事实表明,研究人员在特定产品中发现了这样的漏洞。
通过刷新设备的固件,您可以获得一个拇指驱动器,将自己报告为网络适配器。但这并不意味着它实际上是一个网络适配器,它只是意味着计算机将与它交谈,就好像它是一个网络适配器一样。因此,现在您的计算机开始使用D-Link DUB-E100的驱动程序与您的Verbatim Store-n-Go通信。但除非 Store-n-Go 具有在 D-Link 中找到的相应硬件接口,否则您所拥有的只是坏掉的 U 盘。
如果 U 盘上有一个相对强大的微控制器,您也许可以对其重新编程。但“强大”和“USB 外围设备”通常不会同时出现。
引用的示例之一是教设备像网络适配器一样工作,然后假设所有流量都将在您插入的任何计算机上循环通过它。那是……有点牵强。为此,您的计算机必须已配置为将任何新连接的网络适配器设置为新的默认网关。我不确定 Windows 是否如此渴望改变,但如果你曾经在 Linux 计算机上配置过网络,你就会知道它从来没有那么简单。
这整个概念并不全是废话。如果设备允许任何连接的主机重新刷新,那就是个问题。我可以 100% 肯定地说,它不会导致相关的令人窒息的新闻文章所引发的灾难。但值得关注。
而且更重要的是,USB功能强大,强大意味着潜在的危险。通过 USB 连接设备必然意味着改变计算机的行为方式,并且可能发生非常非常危险的事情。我们从 90 年代就知道这一点。将东西连接到计算机时要格外小心。但这个新发现变化不大;这里可能出现的新攻击并不像已经存在的攻击那么强大,新的危险在于它模糊了“受信任”和“不受信任”设备之间的界限。
BadUSB 不是攻击。它是设计攻击时使用的工具。
当您将 USB 设备插入计算机时,该设备会告诉计算机它是什么类型的东西,因此计算机可以选择合适的驱动程序。例如,拇指驱动器将自己声明为“USB 大容量存储”设备,而键盘则是“人机接口设备”。
BadUSB 是一种从计算机重写插入式 USB 设备固件的技术。例如,它可以使拇指驱动器将自己识别为鼠标,并导致指针随机跳动。或者它可以使拇指驱动器识别为连接键盘和大容量存储的 USB 集线器,当插入时键入一系列击键,导致拇指驱动器上的程序运行。
这里的新奇事物不是制造与它们看起来不一样的 USB 设备——情报机构、网络犯罪分子和其他人多年来一直在这样做。新颖之处在于,这可以通过 USB 连接对商品硬件进行,为自我传播系统打开了大门,例如病毒将自身写入任何插入机器的拇指驱动器,然后修改驱动器的固件以每次插入驱动器时尝试运行病毒。
这是一件很难防御的事情,因为它在如此低的级别上运行,并且在攻击者可以用它做什么方面非常灵活。在 Linux 系统上,您可以做的一件事是确保所有可移动媒体都安装为“noexec”——这可以防止它们上的程序运行,并使攻击更加困难。您还可以在插入任何东西时检查 USB 设备树,看看是否出现了任何意外情况。
在非技术层面,避免使用任何已插入可能受感染系统的 USB 设备,
我最近开始研究USBGuard,它在 UDev 和 Linux 内核 USB 授权功能的帮助下实现了 USB 设备白名单/黑名单。它是一个用户空间守护进程,它侦听 UDev 事件并根据以自定义规则语言编写的一组规则对 USB 设备进行授权或取消授权。
我认为攻击者更难以绕过良好白名单的方式对设备进行重新编程(即尽可能具体)。当然,USBGuard 无法保护您免受所有攻击,如果攻击者可以物理访问您的 USB 设备,那么他可以访问创建此类设备副本所需的所有值,例如键盘。键盘是特别糟糕的情况,因为它们通常不会导出任何 iSerial 值来区分相同类型的两个键盘。
但是,使用已知设备的白名单可以很好地防止 USB 设备上的隐藏/意外接口。臭名昭著的例子是添加了键盘或网卡(通过在不同的/恶意软件感染的机器上重新编程)。如果您知道您的 USB 闪存盘应该只有一个大容量存储接口,然后突然多了一些接口,那么您就知道不应该让它与您的系统交互——这就是 USBGuard 的主要用例。
只需使用 UDev 规则和一些帮助器解析 USB 描述符即可实现相同的级别,但 USBGuard 使其更方便。