Ywc

MQTT安全初探

Word count: 668 / Reading time: 2 min
2020/06/16 Share

前言

最近在做安全测试,在测试的过程中遇到MQTT的测试项目,以前没了解过emmm学一波~

项目背景:
某项目的设备端有MQTT消息转发服务
端口:1883 / 8883 端口 (QMTT over TCP)
版本:eclipse mosquitto 1.6.8, MQTT v3.1.1版本协议

MQTT简介

MQTT消息队列遥测传输(英语:Message Queuing Telemetry Transport)是ISO 标准(ISO/IEC PRF 20922)下基于发布 (Publish)/订阅 (Subscribe)范式的消息协议,可视为“数据传递的桥梁”它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件,以解决当前繁重的数据传输协议,如:HTTP。

MQTT 相较于HTTP, 能节省更多的资源,带来较多的传输负担,也因为这样,在制造业中,让更多人发现 IoT 在设备、厂房的无限可能,发现原来要取机台的温度这么容易,要了解厂区的产量这么方便…

MQTT漏洞

1、Eclipse Mosquitto 1.0~1.5.5 存在授权问题漏洞
漏洞公告:https://www.anquanke.com/vul/id/1514742

1、Eclipse Mosquitto <= 1.4.15 存在拒绝服务漏洞
漏洞公告:http://www.nsfocus.net/vulndb/40015

2、 Eclipse Mosquitto 1.0~1.5.5存在访问控制漏洞
漏洞公告:https://www.anquanke.com/vul/id/1514740

3、 MQTT 3.4.6之前版本和4.0.5之前的4.0.x版本存在拒绝服务漏洞
漏洞公告:https://www.anquanke.com/vul/id/1132531

4、 MQTT protocol 3.1.1版本中存在安全漏洞
漏洞公告:https://www.anquanke.com/vul/id/2051251

MQTT安全测试

思路:

客户端可以匿名连接,没有TLS吗?
mosquitto_sub -t test/topic -h <broker address>

如果客户端提供用户名但不提供密码,没有TLS,可以连接吗?
mosquitto_sub -t test/topic -u <username> -h <broker address>

如果客户端提供用户名和密码(正确与否),并且没有TLS,客户端可以连接吗?
mosquitto_sub -t test/topic -u <username> -P <password> -h <broker address>

客户可以订阅该$SYS主题并查看有关代理的信息吗?
mosquitto_sub -t '$SYS/#' -v -h <broker address>

客户端可以使用TLS连接吗?
mosquitto_sub -t test/topic -h <broker address> -p 8883 --capath /etc/ssl/certs

客户可以订阅所有主题吗?看到了什么?
mosquitto_sub -t '#' -v

结束语

2020最新的CVE刚好适合此项目,然鹅有公告无详情….(瑟瑟发抖~

Reference

在MQTT网络上进行安全测试
浅析MQTT安全
MQTT.fx 接入指南
维基百科

CATALOG
  1. 1. 前言
  2. 2. MQTT简介
  3. 3. MQTT漏洞
  4. 4. MQTT安全测试
  5. 5. 结束语
  6. 6. Reference