车联网、工控协议测试——MQTT协议篇
字数 1526 2025-08-29 22:41:24
MQTT协议安全测试教学文档
0x01 MQTT协议基础
1. MQTT简介
MQTT全称为Message Queuing Telemetry Transport,即消息队列遥测传输协议,是一种基于发布/订阅(Publish/Subscribe)模式的轻量级消息传输协议,主要用于物联网和车联网领域。
2. MQTT核心角色
- 发布者(Publisher):消息的生产者,负责创建消息并发布到Broker的特定主题(Topic)
- 订阅者(Subscriber):消息的消费者,向Broker订阅感兴趣的主题
- 代理/服务器(Broker):MQTT架构的核心,负责消息路由、会话管理、认证授权等
3. MQTT工作流程
- 订阅者与Broker建立TCP连接并发送SUBSCRIBE报文
- 订阅者维护连接并等待Broker推送消息
- 发布者向Broker发布消息到特定主题
- Broker主动将消息推送给订阅了该主题的订阅者
4. MQTT特点
- 发布/订阅模型
- Broker中心模型
- 异步通信
- 轻量级高效
- 支持三种QoS级别(0,1,2)
5. MQTT与HTTP对比
| 特性 | HTTP | MQTT |
|---|---|---|
| 模型 | 请求-响应 | 发布-订阅 |
| 状态 | 无状态 | 有状态(会话) |
| 通信方向 | 客户端发起 | Broker主动推送 |
| 消息大小 | 较大 | 极小(最小2字节) |
0x02 MQTT环境搭建
1. Broker环境搭建
-
安装Mosquitto服务器:
sudo apt-get install mosquitto mosquitto-clients -
查看默认配置:
cat /etc/mosquitto/mosquitto.conf -
配置访问端口(默认1883):
sudo vim /etc/mosquitto/mosquitto.conf -
重启服务:
sudo systemctl restart mosquitto -
配置防火墙:
sudo ufw allow 1883
2. 客户端环境搭建
-
安装Mosquitto客户端:
sudo apt-get install mosquitto-clients -
订阅主题:
mosquitto_sub -h [broker_ip] -t "topic" -v -
发布消息:
mosquitto_pub -h [broker_ip] -t "topic" -m "message"
0x03 MQTT安全测试工具
1. MQTT-PWN安装
-
下载工具:
git clone https://github.com/akamai-threat-research/mqtt-pwn.git -
修改Dockerfile(可选):
FROM python:3.7-slim RUN apt-get update && apt-get install -y git nmap RUN pip install paho-mqtt==1.5.0 psutil==5.7.0 python-nmap==0.6.1 requests==2.23.0 WORKDIR /mqtt-pwn COPY . . CMD ["python", "cli.py"] -
构建并运行:
docker build -t mqtt-pwn . docker run -it mqtt-pwn
0x04 MQTT安全测试方法
1. 未授权访问测试
-
匿名连接测试:
mosquitto_sub -h [broker_ip] -t "#" -v -
使用MQTT-PWN测试:
connect -h [broker_ip] -p 1883
2. 信息收集
-
获取Broker信息:
system -
枚举主题:
discovery scans -
查看主题消息:
messages -t [topic_name]
3. 暴力破解
-
使用MQTT-PWN暴力破解:
brute-force -h [broker_ip] -U [userlist] -P [passlist] -
使用破解的凭据连接:
connect -h [broker_ip] -p 1883 -u [username] -P [password]
4. 命令注入测试
-
订阅命令主题:
subscribe -t commands/serverA -
发布恶意命令:
publish -t commands/serverA -m "malicious_command" -
查看执行结果:
subscribe -t results/serverA
0x05 安全加固建议
1. 认证配置
-
禁用匿名访问:
allow_anonymous false -
配置密码文件:
password_file /etc/mosquitto/passwd -
创建用户密码:
mosquitto_passwd -c /etc/mosquitto/passwd username
2. 访问控制
-
配置ACL:
acl_file /etc/mosquitto/acl -
示例ACL规则:
user username topic readwrite topic/name
3. 加密通信
-
配置TLS:
listener 8883 certfile /etc/mosquitto/certs/server.crt keyfile /etc/mosquitto/certs/server.key -
生成证书:
openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
4. 其他安全措施
- 限制客户端ID长度
- 设置最大连接数
- 启用日志记录
- 定期更新软件
0x06 车联网应用案例
1. 远程解锁车辆流程
-
车辆连接:
- T-Box连接Broker
- 订阅指令Topic:
iov/vehicles/{VIN}/command/door/lock
-
用户操作:
- App发送HTTPS请求到云平台
- 云平台验证权限并生成MQTT消息
-
指令下发:
- 云平台发布消息到车辆Topic
- Broker推送消息给车辆
-
执行反馈:
- 车辆执行指令
- 发布状态到
iov/vehicles/{VIN}/status/door/lock - 云平台接收状态并通知用户
2. 潜在攻击面
- 未授权Broker访问
- 弱认证凭据
- Topic枚举和信息泄露
- 消息注入
- 中间人攻击
0x07 总结
MQTT协议在物联网和车联网领域广泛应用,其安全性直接影响物理世界。安全测试应关注:
- 认证机制是否健全
- 授权控制是否严格
- 通信是否加密
- 敏感信息是否暴露
- 能否实现命令注入
与传统Web测试相比,MQTT测试更注重协议层面的安全性和Broker配置,但核心安全原则不变。