车联网、工控协议测试——MQTT协议篇
字数 1526 2025-08-29 22:41:24

MQTT协议安全测试教学文档

0x01 MQTT协议基础

1. MQTT简介

MQTT全称为Message Queuing Telemetry Transport,即消息队列遥测传输协议,是一种基于发布/订阅(Publish/Subscribe)模式的轻量级消息传输协议,主要用于物联网和车联网领域。

2. MQTT核心角色

  1. 发布者(Publisher):消息的生产者,负责创建消息并发布到Broker的特定主题(Topic)
  2. 订阅者(Subscriber):消息的消费者,向Broker订阅感兴趣的主题
  3. 代理/服务器(Broker):MQTT架构的核心,负责消息路由、会话管理、认证授权等

3. MQTT工作流程

  1. 订阅者与Broker建立TCP连接并发送SUBSCRIBE报文
  2. 订阅者维护连接并等待Broker推送消息
  3. 发布者向Broker发布消息到特定主题
  4. Broker主动将消息推送给订阅了该主题的订阅者

4. MQTT特点

  • 发布/订阅模型
  • Broker中心模型
  • 异步通信
  • 轻量级高效
  • 支持三种QoS级别(0,1,2)

5. MQTT与HTTP对比

特性 HTTP MQTT
模型 请求-响应 发布-订阅
状态 无状态 有状态(会话)
通信方向 客户端发起 Broker主动推送
消息大小 较大 极小(最小2字节)

0x02 MQTT环境搭建

1. Broker环境搭建

  1. 安装Mosquitto服务器:

    sudo apt-get install mosquitto mosquitto-clients
    
  2. 查看默认配置:

    cat /etc/mosquitto/mosquitto.conf
    
  3. 配置访问端口(默认1883):

    sudo vim /etc/mosquitto/mosquitto.conf
    
  4. 重启服务:

    sudo systemctl restart mosquitto
    
  5. 配置防火墙:

    sudo ufw allow 1883
    

2. 客户端环境搭建

  1. 安装Mosquitto客户端:

    sudo apt-get install mosquitto-clients
    
  2. 订阅主题:

    mosquitto_sub -h [broker_ip] -t "topic" -v
    
  3. 发布消息:

    mosquitto_pub -h [broker_ip] -t "topic" -m "message"
    

0x03 MQTT安全测试工具

1. MQTT-PWN安装

  1. 下载工具:

    git clone https://github.com/akamai-threat-research/mqtt-pwn.git
    
  2. 修改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"]
    
  3. 构建并运行:

    docker build -t mqtt-pwn .
    docker run -it mqtt-pwn
    

0x04 MQTT安全测试方法

1. 未授权访问测试

  1. 匿名连接测试:

    mosquitto_sub -h [broker_ip] -t "#" -v
    
  2. 使用MQTT-PWN测试:

    connect -h [broker_ip] -p 1883
    

2. 信息收集

  1. 获取Broker信息:

    system
    
  2. 枚举主题:

    discovery
    scans
    
  3. 查看主题消息:

    messages -t [topic_name]
    

3. 暴力破解

  1. 使用MQTT-PWN暴力破解:

    brute-force -h [broker_ip] -U [userlist] -P [passlist]
    
  2. 使用破解的凭据连接:

    connect -h [broker_ip] -p 1883 -u [username] -P [password]
    

4. 命令注入测试

  1. 订阅命令主题:

    subscribe -t commands/serverA
    
  2. 发布恶意命令:

    publish -t commands/serverA -m "malicious_command"
    
  3. 查看执行结果:

    subscribe -t results/serverA
    

0x05 安全加固建议

1. 认证配置

  1. 禁用匿名访问:

    allow_anonymous false
    
  2. 配置密码文件:

    password_file /etc/mosquitto/passwd
    
  3. 创建用户密码:

    mosquitto_passwd -c /etc/mosquitto/passwd username
    

2. 访问控制

  1. 配置ACL:

    acl_file /etc/mosquitto/acl
    
  2. 示例ACL规则:

    user username
    topic readwrite topic/name
    

3. 加密通信

  1. 配置TLS:

    listener 8883
    certfile /etc/mosquitto/certs/server.crt
    keyfile /etc/mosquitto/certs/server.key
    
  2. 生成证书:

    openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
    

4. 其他安全措施

  1. 限制客户端ID长度
  2. 设置最大连接数
  3. 启用日志记录
  4. 定期更新软件

0x06 车联网应用案例

1. 远程解锁车辆流程

  1. 车辆连接

    • T-Box连接Broker
    • 订阅指令Topic:iov/vehicles/{VIN}/command/door/lock
  2. 用户操作

    • App发送HTTPS请求到云平台
    • 云平台验证权限并生成MQTT消息
  3. 指令下发

    • 云平台发布消息到车辆Topic
    • Broker推送消息给车辆
  4. 执行反馈

    • 车辆执行指令
    • 发布状态到iov/vehicles/{VIN}/status/door/lock
    • 云平台接收状态并通知用户

2. 潜在攻击面

  1. 未授权Broker访问
  2. 弱认证凭据
  3. Topic枚举和信息泄露
  4. 消息注入
  5. 中间人攻击

0x07 总结

MQTT协议在物联网和车联网领域广泛应用,其安全性直接影响物理世界。安全测试应关注:

  1. 认证机制是否健全
  2. 授权控制是否严格
  3. 通信是否加密
  4. 敏感信息是否暴露
  5. 能否实现命令注入

与传统Web测试相比,MQTT测试更注重协议层面的安全性和Broker配置,但核心安全原则不变。

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服务器: 查看默认配置: 配置访问端口(默认1883): 重启服务: 配置防火墙: 2. 客户端环境搭建 安装Mosquitto客户端: 订阅主题: 发布消息: 0x03 MQTT安全测试工具 1. MQTT-PWN安装 下载工具: 修改Dockerfile(可选): 构建并运行: 0x04 MQTT安全测试方法 1. 未授权访问测试 匿名连接测试: 使用MQTT-PWN测试: 2. 信息收集 获取Broker信息: 枚举主题: 查看主题消息: 3. 暴力破解 使用MQTT-PWN暴力破解: 使用破解的凭据连接: 4. 命令注入测试 订阅命令主题: 发布恶意命令: 查看执行结果: 0x05 安全加固建议 1. 认证配置 禁用匿名访问: 配置密码文件: 创建用户密码: 2. 访问控制 配置ACL: 示例ACL规则: 3. 加密通信 配置TLS: 生成证书: 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配置,但核心安全原则不变。