本環(huán)境是蛇矛實驗室基于"火天網(wǎng)演攻防演訓(xùn)靶場"進(jìn)行搭建,通過火天網(wǎng)演中的環(huán)境構(gòu)建模塊,可以靈活的對目標(biāo)網(wǎng)絡(luò)進(jìn)行設(shè)計和配置,并且可以快速進(jìn)行場景搭建和復(fù)現(xiàn)驗證工作。
自 2005年國際電信聯(lián)盟正式提出“物聯(lián)網(wǎng)(IoT)”這一概念以來,物聯(lián)網(wǎng)在全球范圍內(nèi)迅速獲得認(rèn)可,并成為信息產(chǎn)業(yè)革命第三次浪潮和第四次工業(yè)革命的核心支撐。
同時,數(shù)以億計的設(shè)備接入物聯(lián)網(wǎng),這些設(shè)備如今已滲透到我們生活的方方面面,從家居到工廠無處不在。一方面物聯(lián)網(wǎng)設(shè)備使我們的生活更加便捷,而另一方面物聯(lián)網(wǎng)安全事件頻發(fā),全球物聯(lián)網(wǎng)安全支出不斷增加。
當(dāng)前,大量物聯(lián)網(wǎng)設(shè)備及云服務(wù)端直接暴露于互聯(lián)網(wǎng),這些設(shè)備和云服務(wù)端存在的漏洞一旦被利用,可導(dǎo)致設(shè)備被控制、用戶隱私泄露、云服務(wù)端數(shù)據(jù)被竊取等安全風(fēng)險,甚至?xí)A(chǔ)通信網(wǎng)絡(luò)造成嚴(yán)重影響。
從2018年全球統(tǒng)計數(shù)據(jù)來看,路由器、視頻監(jiān)控設(shè)備暴漏數(shù)量占比較高。路由器暴漏數(shù)量超過3000萬臺,視頻監(jiān)控設(shè)備暴露數(shù)量超過1700萬臺,并且這些設(shè)備往后幾年會一年比一年多,物聯(lián)網(wǎng)安全的事件也會越來越多。由此,物聯(lián)網(wǎng)安全行業(yè)需要大力發(fā)展,物聯(lián)網(wǎng)安全人才的培養(yǎng)也刻不容緩。
蛇矛實驗室在后續(xù)將利用火天網(wǎng)境系列靶場中的相關(guān)目標(biāo)仿真和環(huán)境構(gòu)建的特性,將持續(xù)發(fā)布關(guān)于“物聯(lián)網(wǎng)安全-CVE實戰(zhàn)分析”系列的文章來幫助大家入門物聯(lián)網(wǎng)安全。
關(guān)于MQTT
MQTT是一個基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡單、開放和易于實現(xiàn)的,這些特點使它適用范圍非常廣泛。
在很多情況下,包括受限的環(huán)境中,如:機(jī)器與機(jī)器(M2M)通信和物聯(lián)網(wǎng)(IoT)。其在,通過衛(wèi)星鏈路通信傳感器、偶爾撥號的醫(yī)療設(shè)備、智能家居、及一些小型化設(shè)備中已廣泛使用。
MQTT介紹
MQTT的幾個要素:
1
1. 客戶端(Client):使用MQTT的程序或設(shè)備,一般分為發(fā)布者和訂閱者 2. 服務(wù)端(Server):發(fā)布者和訂閱者之間的Broker 3. 主題(Topic):附加在消息上的一個標(biāo)簽,Broker會將該消息發(fā)送給所有訂閱該主題的訂閱者 4. 主題過濾器(Topic Filter):訂閱者訂閱時可使用通配符同時訂閱一個或多個主題
MQTT基于發(fā)布和訂閱模型,MQTT 協(xié)議的訂閱與發(fā)布是基于主題的(Topic),MQTT工作在 TCP/IP協(xié)議族上。一個典型的 MQTT 消息發(fā)送與接收的流程如下:
1. Publisher 連接 Broker; 2. Suscriber連接 Broker,并訂閱主題 Topic; 3. Publisher 發(fā)送一條消息給 Broker,主題為 Topic; 4. Broker 收到 Publisher 的消息,查出 Suscriber 訂閱了 Topic,然后將消息轉(zhuǎn)發(fā)到 Suscriber;
我們可以簡單理解,將MQTT理解為微博工作模式,當(dāng)你(Suscriber)點擊關(guān)注一個博主(Publisher)后,你就訂閱了博主(連接到了Broker),當(dāng)博主發(fā)微博消息時(Publish message),微博的服務(wù)器(Broker)會將你訂閱博主的微博消息轉(zhuǎn)發(fā)給你(Subcribe message),這樣就完成了消息傳遞。
MQTT服務(wù)器搭建
Eclipse Mosquitto是一個開源消息代理,實現(xiàn)了MQTT協(xié)議版本3.1和3.1.1。Mosquitto輕量,適用于低功耗單板計算機(jī)到完整服務(wù)器的所有設(shè)備。Mosquitto項目還提供了用于實現(xiàn)MQTT客戶端的C庫,以及非常受歡迎的mosquitto_pub和mosquitto_sub命令行的MQTT客戶端(來自于翻譯)。
安裝Mosquitto的過程,首先添加mosquitto的ppa源:
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
安裝mosquitto程序和mosquitto-clients客戶端程序
sudo apt installmosquitto sudo apt installmosquitto-clients
我們接下來就可以啟動mosquitto服務(wù)了,啟動可以查看一下mosquitto進(jìn)程是否啟動。這里可以看到mosquitto -c參數(shù)后運(yùn)行配置文件的路徑
sudo service mosquitto start ps -aux | grep mosquitto 或者 sudo service mosquitto status
接下來,我們就可以測試mqtt協(xié)議的工作流程了,首先啟動一個終端
mosquitto_sub-t "topic_name"
然后再起一個終端,使用
mosquitto_pub-t "topic_name"-m "this is a test"
這時,客戶端就會接受到訂閱的消息,服務(wù)器再次發(fā)送后,客戶端將又會接受到訂閱消息
我們可以添加一個用戶,這里我創(chuàng)建了一個example用戶,密碼為example
sudomosquitto_password -c /etc/mosquitto/example example
進(jìn)入到"/etc/mosquitto"目錄下,可以看到剛剛創(chuàng)建example用戶名和密碼的配置文件
接下來我們可以添加一個用戶的配置文件,使用用戶的配置文件進(jìn)行運(yùn)行,我們先停止"mosquitto"服務(wù),然后在"/etc/mosquitto/conf.d"目錄下創(chuàng)建一個default.conf(這里也可以拷貝"/usr/share/doc/mosquitto/example/mosquitto.conf"文件根據(jù)需求進(jìn)行修改),然后重新啟動mosquitto服務(wù),查看一下服務(wù)是否啟動。
此時重復(fù)上面的信息發(fā)送過程,使用-u參數(shù)指定用戶名,-P參數(shù)輸入密碼
以上操作均在linux終端下運(yùn)行,在Windows上可以使用MQTT X工具,MQTTX 是EMQ 開源的一款跨平臺 MQTT 5.0 桌面客戶端,它能運(yùn)行在 macOS,Linux,Windows上。
MQTT X 的用戶界面借助聊天軟件的形式簡化了頁面的操作邏輯,用戶可以快速創(chuàng)建連接保存并同時建立多個連接客戶端,方便用戶快速測試 MQTT/TCP、MQTT/TLS 的連接、發(fā)布/訂閱功能及其他特性。
打開MQTT X官網(wǎng)下載好以后,我們可以使用wireshark進(jìn)行抓包進(jìn)行分析整個的流程。
首先啟動wireshark進(jìn)行監(jiān)聽,然后打開MQTTX軟件新建一個鏈接,如下圖,這里名稱我設(shè)置的"mqtt_test",Client ID我使用默認(rèn)分配的,服務(wù)器地址協(xié)議為"mqtt://",后面填"broker.emqx.io"。這里的EMQ X Cloud 提供的公共 MQTT 服務(wù)器,可以供我們免費(fèi)使用。
下面的端口號為1883,可以進(jìn)行修改,賬號和密碼隨意設(shè)置。設(shè)置好以后,就可以點擊連接了。
修改下面msg的值為我們要發(fā)送的內(nèi)容,點擊小飛機(jī)進(jìn)行發(fā)送。就可以看到消息的發(fā)布和訂閱過程了。
整個流程完畢后,點擊MQTTX上面的關(guān)閉連接按鈕。然后wireshark輸入"mqtt"進(jìn)行過濾。
按時間排序,可以看到MQTT協(xié)議給Broker發(fā)送了一個Connect登錄請求,然后,服務(wù)器回應(yīng)一個ACK,表示登錄成功。再雙擊Connect Command這條數(shù)據(jù)包,我們可以從下面窗口中看到數(shù)據(jù)包詳細(xì)的十六進(jìn)制字節(jié)內(nèi)容。
接下來,查看Connect Ack數(shù)據(jù)包可以看到到服務(wù)器回應(yīng)了"20 02 00 00",這里表示登錄成功。
接下來看MQTT協(xié)議的 Subcribe和Publish數(shù)據(jù)包。可以看到客戶端Subcribe一個topic("test_topic/1111")
Broker返回了"90 03 99 47 00",其中"90"為 Subscribe ACK 報文固定報頭,"03" 為剩余長度,后面?zhèn)z字節(jié)為id號,"00"結(jié)束。
當(dāng)Publisher往這個topic 推送 Payload 時,Broker 就會把 Payload 轉(zhuǎn)發(fā)給定閱這個topic的Subcriber。這樣就完成了整個流程。
MQTT相關(guān)漏洞
授權(quán)和認(rèn)證漏洞
1
MQTT 是一種機(jī)器對機(jī)器連接協(xié)議,被設(shè)計為一種極其輕量級的發(fā)布/訂閱消息傳輸,并被全球數(shù)百萬的物聯(lián)網(wǎng)設(shè)備廣泛使用。
MQTT-PWN 旨在成為 IoT Broker 滲透測試和安全評估操作的一站式商店,因為它結(jié)合了枚舉、支持功能和開發(fā)模塊,同時將其全部打包在命令行界面中,并易于使用和可擴(kuò)展的類殼環(huán)境(來自翻譯)。
接下來,我們使用mqtt-pwn做一些mqtt授權(quán)和認(rèn)證漏洞的演示,首先安裝mqtt-pwn
git clone https://github.com/akamai-threat-research/mqtt-pwn.git cdmqtt-pwn sudo docker-compose up--build --detach
然后就可以啟動MQTT-PWN了
sudo docker-compose ps sudo docker-compose run cli
下圖為MQTT-PWN運(yùn)行時狀態(tài)
有一些公網(wǎng)開放的MQTT服務(wù)端軟件默認(rèn)是開啟匿名訪問,我們可以在shodan、fofa、zoomeye等,搜索MQTT,可以看到"MQTT Connection Code: 0"。
這里如果連接某個Broker,返回結(jié)果中"MQTT Connection Code"為0就代表成功連接,如果返回值為4說明賬號密碼錯誤,如果返回值為5說明該Broker不支持用戶密碼登陸。
我們接下來使用mqtt-pwn進(jìn)行連接,help 顯示幫助信息,可以使用connect命令進(jìn)行連接。對于開啟匿名登錄的服務(wù)端,直接使用"connect -o host"命令就可連接,如果沒有報錯,就表示連接成功。
連接成功后,可使用system_info 查看系統(tǒng)信息。接下來使用discovery建立掃描,等待Scans完成才可進(jìn)行下一步,否則會報錯。
使用"scans -i id",id為建立discovery的線程id。然后就可以使用"topics"查看所有topic了。
可以輸入`messages`查看topic的內(nèi)容
我們可以用MQTT-PWN使用弱口令爆破某個MQTT Broker,得到其賬號密碼,然后接入Broker。
bruteforce --host host --port port
這里的暴力破解,主要還是看自己收藏的字典是否強(qiáng)大,另一方面就是網(wǎng)速的快慢。我們可以使用如下命令進(jìn)行爆破,爆破成功后會顯示用戶名和密碼。"mqtt-pwn/resources/wordlists"目錄下存放了mqtt-pwn的爆破的用戶名和密碼字典,這里可以添加我們自己收藏的字典。
傳輸漏洞
2
MQTT可造成XSS攻擊,這里測試CVE-2020-13821漏洞,本次測試搭建的版本為hivemq 4.3.2。我們使用docker搭建環(huán)境進(jìn)行復(fù)現(xiàn),比較方便。
sudodockerpullhivemq/hivemq4:4.3.2 sudodockerrun-p8080:8080-p1883:1883hivemq/hivemq4:4.3.2
環(huán)境搭建好以后,使用瀏覽器訪問ip地址,發(fā)現(xiàn)運(yùn)行正常。
使用上面提到的MQTTX工具進(jìn)行連接。創(chuàng)建一個新的連接,名稱隨意填寫,Client ID為漏洞點,payload為"",然后端口填寫docker映射出的相對端口。
設(shè)置完畢后,點擊connect進(jìn)行連接和發(fā)送。
連接成功后,去瀏覽器進(jìn)行驗證。
點擊Clients,然后點擊“Refresh Snaphot”即可觸發(fā)執(zhí)行payload
應(yīng)用漏洞
3
以EMQX為例,EMQX 是一款大規(guī)模可彈性伸縮的云原生分布式物聯(lián)網(wǎng) MQTT 消息服務(wù)器。作為全球最具擴(kuò)展性的 MQTT 消息服務(wù)器,EMQX 提供了高效可靠海量物聯(lián)網(wǎng)設(shè)備連接,能夠高性能實時移動與處理消息和事件流數(shù)據(jù),幫助您快速構(gòu)建關(guān)鍵業(yè)務(wù)的物聯(lián)網(wǎng)平臺與應(yīng)用。
我們可以搜索EMQX的相關(guān)文檔信息,獲取有用信息。
以默認(rèn)用戶名和密碼為例,我們在fofa或者shodan等搜索18083端口,并且title有dashboard,就可以搜索出EMQX的相關(guān)站點,我們使用默認(rèn)用戶名和密碼即可進(jìn)行登錄查看。
其他漏洞
4
對于無法通過一般途徑獲取賬號密碼的客戶端,我們可以通過提取設(shè)備的固件,對其逆向分析,然后把文件系統(tǒng)中的證書或是賬號密碼提取出來。亦或者M(jìn)QTT使用加密通信,通過提取固件分析其加密流程進(jìn)行解密,并進(jìn)行后續(xù)攻擊操作。
總結(jié)
這一小節(jié)我們本文簡單介紹MQTT安全相關(guān)內(nèi)容,使用mosquito和mqttx完成了整個mqtt信息傳輸流程,然后復(fù)現(xiàn)了幾個分類中常見的MQTT漏洞。最后提醒一下大家,自己在學(xué)習(xí)過程中最好自己搭建服務(wù)進(jìn)行測試,請勿對網(wǎng)絡(luò)上的機(jī)器目標(biāo)進(jìn)行測試和破壞。
審核編輯:劉清
-
傳感器
+關(guān)注
關(guān)注
2552文章
51353瀏覽量
755611 -
過濾器
+關(guān)注
關(guān)注
1文章
432瀏覽量
19679 -
MQTT協(xié)議
+關(guān)注
關(guān)注
0文章
98瀏覽量
5451
原文標(biāo)題:物聯(lián)網(wǎng)安全實戰(zhàn)從零開始-MQTT協(xié)議分析
文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論