安全访问物联网小型设备

物联网 智能家居 安全
2021-06-19 06:01:43

我正在家里构建一个小型服务器,我想要一种“智能”板来控制它的电源。该板在开始时只需将其打开或关闭(稍后将添加更多功能)。

该设备将基于 Arduino(实际上它是一个更强大的微控制器,但我使用 Arduino 环境对其进行编程)。

现在,服务器将通过 VPN 提供对所有网络的访问,但显然不能仅通过 VPN 访问交换机(因为如果服务器关闭则无法访问,因此我将无法打开它) . 因此,它需要直接访问互联网。

我想确保操作安全,因为允许任何人打开和关闭我的服务器有点问题。

我想的是使用一组预先共享的对称密钥(考虑 AES);每次加载网页时,微控制器都会发送一个种子(例如日期),客户端通过 JavaScript 评估要与加密请求一起发送的令牌,例如,种子和带有传入密钥的请求文本框。

你怎么认为?是否有已知的更简单的解决方案?这个问题一般是怎么处理的?

请注意,HTTPS 不是解决方案,因为在微控制器上实现它非常困难......

编辑:由于询问了一些其他信息,这里有一些更具体的信息:

我打算使用的板子是Maple Mini处理器是STM32-F103RCBT6(72 MHz、120 KB 闪存、20 KB SRAM)。我将使用 ENC28J60 以太网接口(因此没有硬件堆栈)。

我将从我的路由器转发一个端口到它,因为我希望这个功能可以从“外部世界”获得;界面将是一个网页。如果闪光灯太紧,我可以将页面放在外部 SD 卡上。

1个回答

为了验证到达“智能”板的命令,您建议的质询-响应系统是合适的:

  1. 远程系统 R 启动与板 B 的通信
  2. B 生成基于时间的随机数,并将其作为挑战发送
  3. R 收到它,并使用密钥生成响应。响应必须与命令一起发送。理想情况下,必须使用命令的内容来生成响应(响应也是命令的签名)。
  4. B 使用随机数、命令和相同的密钥来生成应该是响应的内容,并检查 R 响应是否匹配

你选择的加密并不重要,使用一些基本的东西,比如 AES 128。B 发送的挑战应该是基于时间的,并且不可能两次获得相同的挑战。

最重要的是:非常非常你如何编写你的输入解析器小心。这是攻击者的主要入口。如果发送格式错误的答案使您的电路板崩溃或允许远程代码执行,那么世界上最好的加密货币也不会拯救您。

保守一点,保持你的协议非常简单。使用模糊器确保拒绝任何无效内容(负面测试)。如果您不使用安全语言,请启用编译器可以提供的所有检查和警告,使用静态代码检查器,使用动态检查工具,同时进行模糊检查以检查任何溢出或内存泄漏。检查您的程序如何处理网络过载、使用速率限制(例如,每 5 秒最多 1 次挑战,其他尝试被静默忽略)并强制执行内存限制。有一个看门狗。

实施这样的系统是一个很好的挑战,如果失败的后果不是很严重,那么这是一个很好的学习机会实际上,即使是最轻微的挑战也足以阻止脚本小子或想要快速赚钱的罪犯,但没有攻击并不能证明您的系统是安全的。可能是因为它很安全……或者因为没有人真正尝试过。记住这一点并准备一个应急计划。