用MQTT攻击物联网
1、介绍
MQTT是Andy Stanford-Clark和Arlen Nipper创建的M2M协议。
(MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。)百度百科
MQTT
一些协议的主要特点:
1、发布和订阅模式
2、简单数据包格式:二进制有效载荷
3、该协议通过TCP运行
4、默认端口:1883 / TCP(未加密!)
2、发布/订阅模式
发布/订阅模型由以下部分组成:
出版商:向经纪商中的一个(或多个)主题发布消息。
订阅者:订阅代理中的一个(或多个)主题并接收发布者发送的所有消息。
经纪人:将所有消息从发布者路由到订阅者。
主题:由一个或多个由正斜线分隔的级别组成(图01)
图01:发布/订阅模型3.数据包格式
每个MQTT数据包都包含一个固定标题(图02)。
图02:固定标题固定标头的第一个字段表示MQTT包的类型。所有数据包类型在表1中列出。
表01:MQTT数据包类型4. MQTT安全性
MQTT关于安全性的官方说明
您可以在协议的V3.1中将MQTT数据包传递给用户名和密码。可以使用SSL处理整个网络的加密,而不依赖于MQTT协议本身(值得注意的是,SSL不是最轻的协议,并且会增加大量的网络开销)。应用程序可以通过加密发送和接收的数据来添加额外的安全性,但这不是协议内置的内容,为了保持简单和轻量级。
客户端可以通过CONNECT数据包向MQTT Broker发送用户名和密码进行身份验证。
图03:身份验证消息(连接命令)CONNACK数据包是MQTT代理响应从客户端收到的CONNECT数据包而发送的数据包。CONNACK数据包头包含一个表示验证结果的“返回码”字段(例如,连接接受)。所有返回代码值列于表02中。
表02:返回码值(CONNACK数据包)需要考虑的两点:
第一:认证是完全可选的
第二:即使正在执行身份验证,默认情况下也不会使用加密(凭证以明文传输)。MITM攻击仍然可以被执行来窃取密码。
5.shodan统计
我们通过Shodan来查看在互联网中可以找到多少个MQTT服务器。使用port:1883进行简短搜索会返回超过15万台主机。大多数MQTT服务器都在中国和美国找到(中国几乎占总数的60%)
图04:Shodan找到的MQTT服务器但是这些MQTT服务器是否真的实现了安全性?
创建一个Python脚本来连接Shodan发现的主机,并验证是否(至少)正在使用身份验证。我们可以检查CONNACK包中的“返回码”字段来确认。图05显示了从总共800个MQTT服务器的python脚本获得的连接结果。
图05:MQTT身份验证结果6.外部连接
你可以连接到服务器并使用简单的脚本来订阅所有主题:
python脚本发现开放MQTT服务器的总结:
1、不同种类的物联网设备
2、传感器:光照和温度值
3、健身器材:Fitbit
4、健康设备:血压监视器
5、位置服务:Owntracks
6、家庭自动化套件:SmartThings(三星)
图06和07中可以看到开放MQTT服务器的例子:
图06:MQTT服务器(传感器数据) 图07:MQTT服务器(Owntracks)当攻击者能够通过向MQTT主题发布命令(例如关闭灯并打开车库门)来控制物联网设备时,会出现可怕的安全风险。这里显示了一个简单的python脚本来打开一个虚构的车库门(图08):
图08虚构的车库门7.总结
未来安全对于物联网与嵌入式设备来说是一个巨大的挑战,攻击将减少现实与虚拟世界之间的差距(列如,攻击者能够远程控制医疗、家庭、工控等一切智能设备),安全从业者须更加了解智能设备的新技术与协议。我想我会对MQTT的物联网中看到更多的攻击。