将 Arduino Uno 连接到互联网(以太网)时,它容易受到哪些攻击,我该如何防范它们?

信息安全 物联网 嵌入式系统 Arduino
2021-08-22 12:09:41

我正在通过以太网(使用以太网屏蔽 v2)将 Arduino Uno 连接到互联网并查询 NTP 时间。向 NTP 服务器发出请求是它所做的唯一与互联网相关的事情。您可以将以太网屏蔽用作存储数据的 SD 卡,我会这样做。它只会查询 NTP。

我担心这个物联网设备会成为我网络的安全目标。它容易受到哪些攻击?以及如何保护如此低规格的设备?

注意:我不担心物理攻击,设备会被锁定。

4个回答

除非您的代码在处理 NTP 时存在内存损坏漏洞,或者网络堆栈的某些部分存在类似漏洞,否则基本上没有攻击面。

此外,Arduino Uno 使用 Atmel ATmega328P,它不支持从 RAM 执行代码。代码从 MCU 程序闪存执行,在运行时不可写。这使得任何人都可以获得易失性或非易失性持久性非常难以置信。

它容易受到哪些攻击?

想到了拒绝服务。例如,有人以线速向 Uno 发送数据包可能会成为问题。板上的某些东西至少需要查看数据包的某些部分,以确定软件是否应该关心它。

据我了解,Ethernet shield 上的 Wiznet 芯片自己实现了 TCP 和 UDP,所以它可能可以过滤掉无趣的数据包。但是我找不到任何数字来说明您可以期待什么样的性能。在任何情况下,如果设备充斥着针对 NTP 客户端使用的端口的有效 UDP 数据包,芯片可能需要将它们全部传递给软件。(如果它支持过滤以便只接受来自您尝试与之通信的服务器的数据包,那么攻击者也需要欺骗他们的 IP 地址。)

根据具体情况,DoS 可能会导致它错过有效的 NTP 回复,或者只是让它永远循环查看网络数据包,而没有完成任何有用的工作。

当然,您可能没有对 NTP 使用任何身份验证,因此伪造/篡改的回复数据包也可能是一个问题。

当然,网络堆栈或 NTP 中的任何漏洞都会成为问题。给定一个“足够大”的漏洞,远程代码执行应该是可能的(因为从 RAM 执行是不可能的,所以可以使用像 ROP 这样的东西)。

最后,可能发生的情况是微型设备被用来将攻击中继到您的网络(或攻击其他网络,但这对您来说不那么担心)。在这种情况下,您应该考虑将其隔离。

是的,无论进行什么攻击都不会是持久的,但可以用来在您的网络中获得持久存在。

到目前为止,答案很好,但我认为(至少在细节上)遗漏了一件事,即伪造 NTP 数据包。由于 NTP 的 UDP 特性,Uno 很可能容易受到伪造数据包的影响。有人可以将 NTP 响应发送回 Uno,并让它认为它确实比实时提前或落后一个小时(月、年等)。这对风险的重要性取决于您的威胁模型。如果这是为了决定何时打开风扇并为您的室内温室种植灯,如果 Uno 一直认为是时候运行这些配件,您的作物可能会被毁坏或高于正常的电费。

伪造这些可能需要一点技巧,但不要太多。UDP只是一个请求包和一个响应包。如果有人足够近(网络方面)来监视数据包,他们可以轻松地看到传出的数据包并伪造适当的响应。即使它们超出了正常的流量路径,仍然有可能做到这一点。NTP 确实提供了一个可选的身份验证层,但它可能没有在您的库中实现,并且很少使用。大多数情况下,一个好的 NTP 实现会拒绝与当前时间相差太大的数据包(启动时除外),但这可能只是一个简单的实现。