白皮书
车联网设计与实现:搭建可靠、高效、符合行业需求的车联网平台 →

MQTT 安全解析:构建可靠的物联网系统

Kary Ware
2023-4-13
MQTT 安全解析:构建可靠的物联网系统

物联网逐渐渗透到医疗保健、智能家居、智慧城市、自动驾驶等我们生活中的各个领域。这其中所涉及到的物联设备的安全也因此变得愈发重要。一旦物联网系统遭到恶意入侵,不仅海量设备数据将面临丢失、被窃取和篡改等安全风险,使用这些设备和物联网应用的终端用户的个人安全也有可能受到威胁。

我们经常能看到这样的新闻:黑客利用漏洞入侵到物联网系统,比如儿童的智能玩具中,通过玩具的摄像头、扬声器和麦克风对其进行监视;又或者是入侵到一个心脏起搏器,操纵心率并耗尽电池,对病人造成严重伤害。

一个没有足够安全保障的物联网系统虽然也能正常工作、提供服务,但是一旦发生问题,将对企业和其最终用户造成无法估量的伤害。对于用户来说,这可能意味着财产、数据隐私甚至是个人生命安全的损失;对于企业来说,则意味着产品召回的成本、可能产生的法律费用,以及品牌声誉和信任的损失。

因此,物联网安全是物联网发展中每个相关企业都需要重点关注的课题。

物联网系统中的常见安全风险

目前,很多企业在构建物联网系统时可能会存在以下这些安全风险:

  • 认证和授权机制不充分。 物联网设备如果认证机制薄弱或没有认证机制,会使其容易受到未经授权的访问。开发者不仅需要控制设备的访问,还要控制设备连接到网络后被允许做什么。
  • 薄弱的密码。 一些厂商可能对同一设备型号使用相同的密码,或者是使用容易被猜到的弱密码,如「admin」或「password」等。 然而即使是最复杂的加密算法,也无法保障一个容易猜到的密码不被攻破。薄弱的密码使攻击者很容易窃取对设备及其数据的访问权限。因此物联网企业应严格执行强密码政策,并要求用户更改默认密码。
  • 不安全的通信协议。 使用 TCP 等明文协议而不是 TLS 进行通信,会使得攻击者很容易截获数据。以中间人攻击(Man-In-The-Middle)为例,攻击者可以窃听通信,收集密码、健康信息等个人数据。
  • 缺乏用户培训。 一些物联网厂商可能没有向其用户提供适当的安全培训,这使未受过教育的用户容易受到攻击。企业应注意提升用户的安全意识。
  • 拒绝服务(DoS)攻击。 物联网系统可能容易受到 DoS 或分布式 DoS 攻击,这种攻击下大量设备会被用来利用软件缺陷或简单地通过恶意流量来压垮或淹没目标系统。为了防止这种攻击,物联网系统需要有强大的安全措施,包括防火墙、入侵检测和预防系统,以及访问控制。此外,物联网系统应被设计成更具弹性、能够自动检测和缓解攻击,减少管理运维的人力成本。

物联网厂商需要在物联网系统设计与建设时优先考虑安全问题,以确保其设备的安全,以及面对攻击时能够弹性应对。

如何通过 MQTT 保障物联网系统安全?

当我们使用 MQTT 构建自己的物联网系统时,可以从以下几个方面考虑安全性问题。按其所在的不同协议层进行细分,可以分为网络层、传输层和应用层。

  • 网络层。 MQTT 在 IP 网络中运行,因此网络层的安全最佳实践都适用于 MQTT。 也就是说,正确使用防火墙、VPN、IPsec,可以帮助防止入侵者访问物联网网络上的数据。

  • 传输层。 在传输层,我们并不建议通过 TCP 或 WebSocket 等协议直接发送明文数据,例如在应用层中用于认证的用户名、密码等敏感数据,这可能会使应用层的安全机制形同虚设。因为当入侵者直接从传输层窃取数据时,他可以直接知道你正在使用的用户名和密码。

    更好的办法是,借助 TLS 加密协议为我们的数据提供端到端的安全性。除了使数据变成难以破解的密文数据以外,TLS 还能提供多项保护,例如支持客户端对服务端身份合法性的确认,当要求客户端使用证书时,服务端也能确认客户端是否合法,这将有效避免中间人攻击。

  • 应用层。 虽然我们已经能够在传输层提供比较到位的安全保护了,但并不是所有的系统都支持 TLS。运行于应用层的 MQTT 协议也通过用户名、密码字段提供了对密码认证和 Token 认证的支持,确保只有合法的设备才能接入 MQTT 代理。MQTT 5.0 中还引入了增强认证机制来提供双向的身份确认。

    另一方面,应用层的安全机制通常也是最后一层安全保障,除了验证接入者的身份,我们最好对接入者能够执行的操作也进行检查,例如接入者可以发布消息到哪些主题上,以及可以从哪些主题消费消息。

结语

如前文所提,作为物联网通信协议的事实标准,MQTT 协议提供了很多与安全相关的功能特性,以保障物联网系统的安全。为了帮助物联网开发者充分了解这些特性,从多维度构建更加安全可靠的物联网系统与应用,EMQ 特别推出了《MQTT 安全》专题系列文章。

在本专题的下一篇文章中,我们将详细讲解基于用户名密码的认证方式,如何在 MQTT 中正确使用这一方式进行身份验证,以及如何避免和解决其中可能的安全隐患。敬请期待。

推荐阅读