如何使主题/操作仅允许授权用户使用?

物联网 MQTT 安全
2021-06-01 11:58:43

这是场景:我有一台连接到 MQTT AWS-IoT 核心代理的机器。这台机器被授权使用 AWS 证书在主题中发布P/serialnb/deleterecords/record_id本主题将删除数据库中的一条记录。在 web-http 架构中,用户应该被授权进行这个事务,因为它是用登录名/密码和浏览器/服务器之间的交换会话记录的。

现在假设机器被劫持,黑客获得了证书和主题的访问权限。因此,黑客可以访问机器序列号和删除数据库中文件的主题。

我怎样才能缓解这个问题,因为机器代理之间的连接没有这一层安全——只有授权用户才能在这个主题中发布?

2个回答

如果证书受到威胁,您可以撤销该证书。

这就是为什么每个设备都需要它自己的证书的原因,并且在可能的情况下,您应该确保该证书的私钥存储在安全元件中,以便无法从设备访问/复制它。

虽然在您知道此设备受到威胁后撤销证书会起作用,但我认为您忽略了另一个更重要的威胁。如果我是一名黑客并控制了你的一个设备,我应该无法影响来自其他设备的数据。否则,我可能会偶尔使用其他设备对应的主题悄悄发送一些错误数据。例如:知道序列号是连续的,我可以猜测其他序列号。使用安全元件使存储的设备证书难以在设备上获取可能过于昂贵,具体取决于设备类型和您获得的数据类型。相反(或另外),您应该阻止设备访问它们不应该访问的主题。
问题的关键在于两种可能性(是的,首先是每个设备都有其唯一的证书):

  1. 在 AWS IoT 规则中,使用 principal() 函数作为设备的密钥序列号而不是连续序列号。如果需要,您可以使用 dynamodb 和 get_dynamodb(...) 函数将序列号转换为序列号,方法是查找您在制作设备时填充的表格。principal() 函数给出了证书指纹,这对于其他设备来说是不容易猜到的。
  2. 或者,您可以在证书中包含顺序序列号,然后在 IoT 端点上制定策略,以便主题的序列号部分必须与放入证书的序列号相匹配。
  3. 是的,我上面说的是2。我不推荐这个。但是,如果您愿意,您可以将随机的长字符串作为设备的序列号。这样,至少黑客是猜不到对方机器的序列号的。但是无论如何一定要为每个设备拥有不同的证书,否则,您无法撤销并且仍然会因黑客可能不成功的尝试而收取物联网消息费用!