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攻击面全景。你看一眼,就能明白攻击者到底能从哪些地方下手。
2.4 攻击链分析
攻击者不会只用一个手法。我见过最典型的攻击链是这样的:
- 侦察:扫描公网Broker端口,识别MQTT服务
- 嗅探:抓取明文CONNECT包,获取用户名密码
- 登录:用窃取的凭证连接Broker
- 订阅:用
#通配符订阅所有Topic - 收集:持续监听敏感数据
- 攻击:根据收集的信息发起重放或DoS攻击
🔑 核心观点: 安全不是单点防御,而是纵深防御。你堵住了网络层,攻击者可能从设备层进来;你加密了通信,攻击者可能从应用层下手。每一层都要有防护,每一层都要有监控。