MQTT协议及安全浅析

MQTT

MQTT简介

MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传*输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅方式的消息协议,由 IBM 发布。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。由于其轻量、简单、开放和易于实现的特点非常适合需要低功耗和网络带宽有限的IoT场景。比如遥感数据、汽车、智能家居、智慧城市、医疗医护等。
MQTT是一个基于二进制消息的发布/订阅模式传输协议,在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT),传统的请求服务响应(Request/Response)模式不在适用,这就轻量级、可扩展的MQTT可以施展拳脚的舞台。

MQTT协议中有三种角色和一个主要概念,三种角色分别是发布者(PUBLISHER)、订阅者(SUBCRIBER)、代理(BROKER),还有一个主要的概念为主题(TOPIC)
消息的发送方被称为发布者,消息的接收方被称为订阅者,发送者和订阅者发布或订阅消息均会连接BROKER,BROKER一般为服务端,BROKER存放消息的容器就是主题。发布者将消息发送到主题中,订阅者在接收消息之前需要先“订阅主题”。每份订阅中,订阅者都可以接收到主题的所有消息。
在这里插入图片描述

MQTT的特点:
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。(这也是近期顶会中一个安全研究的一个点)

MQTT协议安全

MQTT匿名访问

有一些MQTT的服务端软件默认是开启匿名访问,如果管理员没有网络安全意识或懒惰,只要对公网开放,任何人都可以直接访问。

mqtt服务器相关配置文件及参数
emqttd/etc/emq.conf
默认是开启的任何人都能登陆 需改为false
mqtt.allow_anonymous = true

MQTT利用工具
Linux安装mqtt-pwn:
git clone https://github.com/akamai-threat-research/mqtt-pwn.git

cd mqtt-pwn/

安装docker-compose
sudo apt install docker-compose

启动docker服务

sudo service docker start
systemctl enable docker.servive
sudo systemctl enable docker.service
sudo systemctl status docker.service
sudo docker-compose up --build --detach
sudo docker-compose ps
sudo docker-compose run cli

在这里插入图片描述

使用mqtt-pwn的connect命令进行连接。connect -h 显示帮助信息,其他命令也是如此,使用时,多看帮助和文档,很快就可以熟悉使用。

对于开启匿名的服务,直接connect -o host 即可,当然该命令也支持输入用户名和密码。如果没有显示连接异常,就表示连接成功。连接成功后,可使用system_info 查看系统信息。

接下来就可以查看topic信息等内容。这时先执行 discovery ,等待显示scan #1 has finished,接下来执行 scans -i 序号 ,在执行 topics 命令即可看到topic信息。其中 disconvery 可以使用 -t 参数设置超时时间。 topics 命令可以使用 -l 参数设置查看条数。

使用-mr过滤参数
显示所有application信息

同时MQTT-PWN也可以进行用户名密码爆破,默认端口1883,用户和密码字典默认会在mqtt-pwn的 resources/wordlists 文件夹下
bruteforce --host host --port -uf user_dic -pf pass_dic

Mosquitto_sub是一个MQTT的命令行式客户端,获取到MQTT权限后,可以订阅和发送topic消息
在这里插入图片描述

协议安全

MQTT除默认明文通信,匿名登录,弱密码登录之外,更多的是与业务相关的逻辑漏洞,另外2020的安全顶会上,校友大佬也有MQTT协议相关安全研究
《Burglars’ IoT Paradise: Understanding and Mitigating Security Risks of General Messaging Protocols on IoT Clouds》
文章主要是分析了在IOT云平台通讯MQTT协议中的脆弱性,并找到了与MQTT协议中的message、session、clientid、topic相关漏洞,最后设计并实现了安全加固方法。
感兴趣的读者可以自行下载阅读

mqtt 安全建议

请勿启用匿名访问,对服务端(BROKER)设置认证,增加用户名密码验证。
根据实际情况,优先使用加密传输数据,防止中间人攻击。
加密payload后在进行安全传输。
使用最新的服务端程序架设服务。
不要将实现的代码上传到github等代码公开平台。

参考:
https://blog.csdn.net/weixin_29428137/article/details/112374142
http://rui0.cn/archives/975
https://blog.csdn.net/qq_32505207/article/details/111375635
https://bacde.me/post/mqtt-security-part-one/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值