2. MQTT安全威胁概览:常见攻击类型与攻击面分析

聊MQTT安全,咱们得先搞清楚敌人是谁、从哪来。我见过不少团队,一上来就搞加密、搞证书,结果连最基本的攻击面都没梳理清楚。说白了,你连门朝哪开都不知道,装再好的锁也没用。

这一节,我带你把MQTT常见的攻击类型和攻击面过一遍。嗯,都是我在项目里真刀真枪碰到过的东西。

2.1 三大核心攻击类型

MQTT的威胁,归根结底可以归到三类:中间人攻击、重放攻击、拒绝服务攻击。咱们一个一个说。

2.1.1 中间人攻击(Man-in-the-Middle, MITM)

中间人攻击,说白了就是攻击者悄悄插到客户端和Broker之间,偷听甚至篡改消息。MQTT默认走明文TCP,一旦网络被监听,所有数据都裸奔。

⚠️ 真实案例: 我曾经帮一家工厂做安全审计,发现他们的传感器数据在Wi-Fi网络里明文传输。攻击者只要连上同一个Wi-Fi,用Wireshark就能看到所有温度、压力数据,甚至能伪造“设备离线”消息让产线停机。

MITM能干什么?

  • 窃听数据:读取所有PUBLISH消息的内容
  • 篡改消息:修改Payload,比如把“温度正常”改成“温度超标”
  • 伪造身份:冒充合法Client发布控制指令
  • 会话劫持:窃取Session状态,接管设备连接
💡 我的习惯: 只要涉及生产环境,我第一件事就是检查是否启用了TLS。没有TLS的MQTT,就像没锁门的保险柜——不是会不会被偷,而是什么时候被偷。

2.1.2 重放攻击(Replay Attack)

重放攻击很有意思——攻击者不需要破解你的加密,只需要把之前抓到的合法消息再发一遍就行。你想想看,如果攻击者录下了“打开阀门”的指令,过两天再重放一遍,阀门就开了。

为什么MQTT容易中招?

  • MQTT协议本身没有消息唯一性标识
  • 默认不校验消息的时间戳
  • QoS机制只保证送达,不保证新鲜度
🔑 关键点: 重放攻击的可怕之处在于,即使你用了TLS加密,攻击者仍然可以重放加密后的数据包。加密只防偷看,不防重放。

我在一个智能楼宇项目里就遇到过这事。攻击者录下了“打开所有窗户”的指令,在半夜重放了一遍。嗯,第二天整栋楼的安保系统都炸了。从那以后,我坚持所有控制指令必须带时间戳和序列号。

2.1.3 拒绝服务攻击(Denial of Service, DoS)

DoS攻击,说白了就是让Broker累死、网络堵死、设备瘫死。MQTT的轻量级特性,反而让它对某些DoS攻击特别敏感。

常见的MQTT DoS手法:

攻击类型 攻击方式 影响
CONNECT洪水 大量伪造的CONNECT请求 Broker连接池耗尽
SUBSCRIBE风暴 海量订阅请求 Broker内存暴涨
PUBLISH泛洪 高频发送大Payload消息 网络带宽耗尽
遗嘱消息攻击 恶意设置Will Topic/Message 触发连锁异常
Topic膨胀攻击 订阅极长或极多的Topic Broker路由表爆炸
⚠️ 避坑指南: 我曾经见过一个案例,攻击者用几十台物联网设备同时发送CONNECT消息,每一条都带一个超大的Client ID。Broker直接OOM崩溃,整个物联网平台宕机了4个小时。所以,Client ID长度限制、连接速率限制、消息大小限制,这三样东西必须配齐。

2.2 攻击面分析

攻击面,就是攻击者能下手的地方。MQTT的攻击面,我习惯从四个维度来看:网络层、协议层、应用层、设备层。

2.2.1 网络层攻击面

  • 明文传输:TCP 1883端口默认不加密
  • 端口暴露:Broker端口直接暴露在公网
  • DNS劫持:篡改Broker域名解析
  • ARP欺骗:局域网内冒充Broker

2.2.2 协议层攻击面

  • 无认证/弱认证:很多设备用默认用户名密码
  • Topic通配符滥用:用#订阅所有Topic
  • QoS滥用:恶意使用QoS 2导致消息堆积
  • Session劫持:Clean Session设置为0时窃取会话

2.2.3 应用层攻击面

  • Payload注入:在消息内容中嵌入恶意指令
  • 逻辑漏洞:控制指令缺乏二次确认
  • 权限越界:设备能发布/订阅不该访问的Topic

2.2.4 设备层攻击面

  • 固件逆向:从设备中提取证书和密钥
  • 物理篡改:直接操作设备修改配置
  • 弱随机数:Client ID或Token可预测

2.3 攻击面全景图

下面这张图,是我自己梳理的MQTT攻击面全景。你看一眼,就能明白攻击者到底能从哪些地方下手。

MQTT 攻击面全景图 MQTT Broker 网络层攻击面 • 明文TCP 1883端口 • 公网端口暴露 • DNS劫持 • ARP欺骗 协议层攻击面 • 无认证/弱认证 • Topic通配符滥用 • QoS滥用 • Session劫持 应用层攻击面 • Payload注入 • 逻辑漏洞 • 权限越界 • 控制指令无确认 设备层攻击面 • 固件逆向提取密钥 • 物理篡改配置 • 弱随机数 • 证书泄露 💡 攻击面覆盖了从网络到设备的全链路 任何一个环节出现漏洞,都可能被攻击者利用。安全防护必须层层设防。 中间人攻击 重放攻击 拒绝服务攻击

2.4 攻击链分析

攻击者不会只用一个手法。我见过最典型的攻击链是这样的:

  1. 侦察:扫描公网Broker端口,识别MQTT服务
  2. 嗅探:抓取明文CONNECT包,获取用户名密码
  3. 登录:用窃取的凭证连接Broker
  4. 订阅:用#通配符订阅所有Topic
  5. 收集:持续监听敏感数据
  6. 攻击:根据收集的信息发起重放或DoS攻击
🔑 核心观点: 安全不是单点防御,而是纵深防御。你堵住了网络层,攻击者可能从设备层进来;你加密了通信,攻击者可能从应用层下手。每一层都要有防护,每一层都要有监控。