跳转到内容

MQTT 安全挑战

MQTT 安全挑战

本节介绍 MQTT 通信面临的安全挑战和风险。了解这些安全威胁是配置 TLS 加密之前的基础。学习完成后,您将能够:

  • 识别 MQTT 通信的核心安全风险
  • 理解未加密 MQTT 的安全隐患
  • 评估不同安全措施的防护效果
  • 解释 MQTT 安全的重要性

在开始本节之前,请确保:

  • 理解 MQTT 协议的基本原理
  • 了解 MQTT Broker 的概念
  • 了解基本的网络安全概念
┌──────────────────┐ ┌──────────────────┐
│ ESP32 设备 │ │ MQTT Broker │
│ (Publisher) │ │ (Mosquitto) │
└────────┬─────────┘ └────────┬─────────┘
│ │
│ MQTT 明文传输 │
│ ┌──────────────────────┐ │
│ │ 用户名: pixeladmin │ │
│ │ 密码: n0d3r3d2023 │ │
│ │ 数据: 温度=24.5 │ │
│ │ Topic: factory/temp │ │
│ └──────────────────────┘ │
│ │
└────────┬───────────────────┘
┌────────▼────────┐
│ 攻击者(Wireshark)│
│ 👁️ 可见所有内容 │
│ - 用户名和密码 │
│ - 传感器数据 │
│ - 控制指令 │
└─────────────────┘
威胁类型风险等级描述可能后果
窃听🔴 高攻击者在网络中抓取 MQTT 数据包泄露敏感数据、设备凭据
中间人攻击🔴 高攻击者拦截并篡改通信内容伪造控制指令、篡改传感器数据
身份伪造🟡 中攻击者冒充合法设备发布/订阅发送虚假数据、获取未授权信息
拒绝服务🟡 中向 Broker 发送大量消息耗尽资源系统瘫痪、设备无法通信
重放攻击🟡 中捕获并重新发送合法的 MQTT 消息重复执行操作(如重复开关设备)

攻击方式:在同一网络中运行 Wireshark 抓包

Wireshark 捕获的 MQTT 数据包(未加密):
Frame 1: CONNECT
Protocol: MQTT
Client ID: esp32_factory_001
Username: pixeladmin
Password: n0d3r3d2023 ← 明文密码!
Frame 2: PUBLISH
Topic: factory/temperature
Payload: {"temp": 24.5, "hum": 65.2}
Frame 3: PUBLISH
Topic: factory/relay/control
Payload: {"command": "ON", "device": "pump_01"}

影响

  • 攻击者获取了 MQTT 凭据(用户名和密码)
  • 攻击者可以读取所有传感器数据
  • 攻击者可以伪造控制指令

攻击方式:ARP 欺骗 + 消息篡改

正常通信:
ESP32 → MQTT Broker: {"command": "OFF"}
Broker → Relay: 继电器断开 → 安全
中间人攻击:
ESP32 → 攻击者 → MQTT Broker
原始消息: {"command": "OFF"}
篡改后: {"command": "ON"} ← 设备被恶意开启

风险:MQTT 凭据(用户名/密码)如果在明文传输中被捕获:

泄露凭据攻击者能做什么
订阅所有 Topic读取所有传感器数据
发布到控制 Topic远程控制所有设备
发布到配置 Topic修改设备配置参数
发布到 OTA Topic推送恶意固件
安全层级:
┌─────────────────────────────────────┐
│ 层 4: 应用层安全 │
│ - 设备认证 (X.509 证书) │
│ - 消息加密 (Payload 加密) │
├─────────────────────────────────────┤
│ 层 3: 传输层安全 (本章重点) │
│ - TLS/SSL 加密 (MQTT over TLS) │
│ - 端口 8883 (MQTTS) │
├─────────────────────────────────────┤
│ 层 2: 网络层安全 │
│ - 防火墙规则 │
│ - VPN / VPC │
├─────────────────────────────────────┤
│ 层 1: 基础安全 │
│ - MQTT 用户名/密码认证 │
│ - Topic ACL (访问控制列表) │
└─────────────────────────────────────┘
安全措施防护窃听防篡改防伪造实现复杂度
MQTT 密码认证⚠️
TLS 加密
客户端证书中高
固件签名
VPN 隧道
价值点说明买家沟通要点
数据保密防止敏感数据泄露”TLS 加密确保数据传输安全”
完整性保护防止数据被篡改”消息在传输过程中不会被修改”
身份验证确认设备身份”设备和 Broker 互相验证身份”
合规要求满足安全标准”满足 GDPR 等数据保护法规要求”

Q1: 只使用用户名密码足够安全吗? A: 不够。用户名和密码在未加密的 MQTT 中是明文传输的,使用 Wireshark 即可捕获。TLS 加密在传输层保护所有数据,包括认证凭据。

Q2: 什么场景下必须用 TLS? A: 以下场景强烈建议使用 TLS: 1) 设备通过互联网连接;2) 传输敏感数据(如生产数据、个人隐私);3) 需要合规认证;4) 远程控制关键设备。

Q3: TLS 加密会降低性能吗? A: 会有一定性能影响,主要体现在 ESP32 端的 TLS 握手(约 1-3 秒)和加解密的 CPU 开销。对于大多数 IoT 场景(每秒几条消息),性能影响可以忽略。

本节介绍了 MQTT 安全挑战:

  1. 核心风险:窃听、中间人攻击、身份伪造、拒绝服务
  2. 信息泄露:WiFi 网络中 MQTT 凭据和数据明文可见
  3. 安全层级:从基础认证到传输层加密到应用层安全
  4. TLS 的必要性:基础密码认证不足,需要 TLS 加密传输