洞察基的個(gè)人空間 http://selenalain.com/space-uid-170118.html [收藏] [復制] [RSS]

博客

MQTT 服務(wù)器安全性測試

已有 473 次閱讀2022-7-26 15:18

物聯(lián)網(wǎng)市場(chǎng)正在以爆炸式的增長(cháng)勢頭飛速發(fā)展。隨著(zhù)設備規模的不斷增長(cháng)和業(yè)務(wù)邏輯的日漸復雜,物聯(lián)網(wǎng)平臺基礎設施的安全性也愈發(fā)重要。物聯(lián)網(wǎng)平臺對協(xié)議的具體實(shí)現是否完整、對特定消息的解析過(guò)程是否安全就成了重中之重。

這需要面面俱到地針對協(xié)議中的繁雜標準和指定的行為規范進(jìn)行較為完整的測試。同時(shí),考慮到實(shí)際使用中可能存在的各種干擾和攻擊,測試過(guò)程也需要覆蓋各種非標準異常報文,以分析目標平臺對異常情況的容錯和處理能力。

模糊測試是一個(gè)非常有效的測試手段。本文將以 EMQX 為例,介紹如何使用模糊測試工具來(lái)發(fā)現 MQTT 服務(wù)器/MQTT 客戶(hù)端對協(xié)議實(shí)現上可能存在的缺陷和漏洞。

什么是模糊測試

模糊測試 (fuzz testing, fuzzing)是一種軟件測試技術(shù)。其核心思想是將自動(dòng)或半自動(dòng)生成的隨機數據輸入到一個(gè)程序中,并監視程序異常,如崩潰、斷言(assertion)失敗,以發(fā)現可能的程序錯誤,比如內存泄漏。模糊測試常常用于檢測軟件或電腦系統的安全漏洞。

模糊測試可以被用作白盒、灰盒或黑盒測試。通常用于黑盒測試,回報率較高。

來(lái)源:https://zh.wikipedia.org/wiki/模糊測試

準備工作測試工具及對象選擇

本文我們選擇 Defensics 作為模糊測試的工具。Defensics 是 Synopsys 新思公司開(kāi)發(fā)的黑盒模糊測試工具,提供了對大量文件格式、網(wǎng)絡(luò )協(xié)議、接口的模糊測試套件。它針對 MQTT v3.1 協(xié)議標準,使用大量自動(dòng)生成的 MQTT 數據包對 Broker/Client 進(jìn)行測試,幫助開(kāi)發(fā)者和測試人員提高軟件的安全性。

針對 MQTT v5 的測試套件目前尚未發(fā)布

我們將以開(kāi)源 MQTT 消息服務(wù)器 - EMQX 為例,對其協(xié)議實(shí)現情況進(jìn)行安全性測試。EMQX 是由 EMQ 映云科技 開(kāi)源的大規?蓮椥陨炜s的云原生分布式物聯(lián)網(wǎng) MQTT 消息服務(wù)器,可高效可靠連接海量物聯(lián)網(wǎng)設備,高性能實(shí)時(shí)處理消息與事件流數據,助力構建關(guān)鍵業(yè)務(wù)的物聯(lián)網(wǎng)平臺與應用。

測試環(huán)境準備

本次測試在 Arch Linux 環(huán)境下進(jìn)行,滾動(dòng)更新至最新版本,使用 EMQX 5.0-beta.2-8be2aaf7 進(jìn)行測試 。

此外,在進(jìn)入下一步之前,需要從 Synopsys 處下載 Defensics 的安裝包、后綴名為 .install 的測試套件安裝文件、以及 DEFENSIC 可執行文件以提供給 FlexNet 許可服務(wù)器驗證 license 狀態(tài)使用。

下載 Defensics 的安裝包

下載文件列表

部署許可服務(wù)器(FlexNet)

Synopsys Defensics 使用 FlexNet 管理許可證書(shū),需要在執行 Defensics 模糊測試器的的網(wǎng)絡(luò )環(huán)境中部署 FlexNet Server ,以管理從 Synopsys 處取得的許可證書(shū)(即 license.lic 文件)。

可以選擇使用 Systemd User Unit 在本地部署啟動(dòng) FlexNet Daemon ,配置如下。其中 license.lic 證書(shū)文件及 DEFENSIC ( Vendor Daemon )可執行文件將位于同一目錄。 FlexNet 將會(huì )從 $PATH 中搜索 Vendor Daemon 可執行文件來(lái)進(jìn)行認證。

當然,在需要更多測試人員使用 Defensics 的情況下,也可以將其部署在專(zhuān)用的證書(shū)服務(wù)器上以對更多的用戶(hù)提供證書(shū)認證服務(wù)。其他詳細信息和具體參數可參考 Defensics 及 FlexNet Publisher 相關(guān)文檔。

lmgrd.service Systemd User Unit

lmgrd.service Systemd User Unit

之后使用命令 systemctl --user enable --now lmgrd.service 啟動(dòng)認證服務(wù)器 Synopsys 提供的 Vendor Daemon。Defensics 便可以通過(guò)許可認證開(kāi)始測試了。

其他配置

在 Linux 系統中可能存在顯示問(wèn)題及字體模糊的情況,可以參考 Java Runtime Environment fonts - ArchWiki 進(jìn)行配置。

安裝 Defensics 及測試套件

以 root 身份執行 .sh 安裝程序進(jìn)行安裝。并且安裝過(guò)程中建議勾選啟動(dòng)腳本的生成選項 /usr/local/bin/Defensics 。

Defensics 安裝選項

安裝選項

如果一切順利,啟動(dòng) Defensics 后在 File -> License Manager 中就可以看到經(jīng)過(guò)驗證的 License 狀態(tài)。之后就可以安裝并加載測試套件了。

Defensics 安裝測試套件

安裝測試套件

Defensics 測試基礎配置

在基礎配置中設置 MQTT Server 的 ip 地址和端口號,以及用于測試的 MQTT Client 配置。

其中 MQTT 默認為 1883 端口(在啟用了 TLS/SSL 時(shí)為 8883 端口)。

如果 MQTT Server 啟用了客戶(hù)端認證或消息主題權限,需要對測試用的兩個(gè)客戶(hù)端進(jìn)行更詳細的配置。 另外 Defensics 也提供了更進(jìn)階的 Payload 模糊測試和基于 TLS/SSL 連接的測試。但本次測試僅涉及 MQTT v3.1.1 協(xié)議標準相關(guān)的模糊測試,所以無(wú)需進(jìn)行配置。

MQTT Basic Configuration

Basic Configuration

在配置了相應的字段值后,Defensics 將會(huì )以指定的 Client ID 、用戶(hù)名密碼連接 MQTT Server ,并會(huì )用指定的 MQTT 主題進(jìn)行消息發(fā)布和主題訂閱,即 PUBLISH 與 SUBSCRIBE 。

對于更高階和復雜的測試,可以使用 Edit sequence 功能編輯對應的配置文件,來(lái)改變連接或斷開(kāi)連接時(shí)的行為,例如連接后自動(dòng)訂閱,連接后立刻發(fā)布消息等操作。

可操作性測試

完成配置后在 Interoperability 中進(jìn)行可操作性測試,來(lái)驗證不同的報文能否正常進(jìn)行發(fā)送接收。在與 MQTT Server 正常連通的情況下,可以執行的測試組將會(huì )以綠色標注。

Defensics Interoperability Test

Interoperability Test

高級配置

在這一部分,允許用戶(hù)對具體的測試用例執行過(guò)程進(jìn)行配置,但一般來(lái)說(shuō)默認配置已經(jīng)足夠。

其中包括了對測試用例執行過(guò)程的控制,例如超時(shí)閾值、重復次數、嘗試次數等。

Defensics Test Case Run Control

Test Case Run Control

另外用戶(hù)也可以根據實(shí)際情況進(jìn)行網(wǎng)絡(luò )相關(guān)的配置,以獲取在不同網(wǎng)絡(luò )情景下的測試結果。此時(shí)也可以選擇根據 MQTT Server 的目標 IP 進(jìn)行自動(dòng)配置。

Defensics ip 自動(dòng)配置

Capture Conf

TCP Conf

TCP Conf

另外也可以根據 CVSS (通用漏洞評分系統)提供的漏洞分級方法對可能檢測到的異常情況進(jìn)行評估。

儀表配置(Instrumentation)

儀表是指在測試過(guò)程中觀(guān)察和控制被測系統,觀(guān)察的目標是檢測由測試引起的任何故障。儀表還可用于在運行測試時(shí)重新啟動(dòng)或以其他方式控制被測系統。

大多數測試套件都啟用了默認檢測,無(wú)需進(jìn)行額外配置。并且此默認配置的性質(zhì)因不同的測試套件而異。

選擇測試用例

Defensics 對于 MQTT v3.1.1 協(xié)議標準,提供了總計超過(guò) 100 萬(wàn)的測試用例可以用來(lái)對目標系統進(jìn)行全面的模糊測試。與此同時(shí),也支持用戶(hù)進(jìn)行基于這些細分的測試用例自行選擇、組合用例,來(lái)針對性地聚焦分析并解決問(wèn)題。

此次我們選取部分用例進(jìn)行測試,其中包括 CONNECT-DISCONNECT PUBLISH-qos-0 SUBSCRIBE-qos-0 三組用例,并同時(shí)選擇全部異常消息用例進(jìn)行測試。

Defensics 選擇測試用例

Test Case Chosen

在針對于異常消息的測試中,也可以選擇各類(lèi)不同數據的異常行為數量和程度進(jìn)行測試。例如文本、二進(jìn)制數據、數字、字符等;同時(shí)也可以配置溢出異常的字節限制來(lái)使用值溢出的畸形報文進(jìn)行測試。

Sequence anomalies Chosen

Sequence anomalies Chosen

Defensics Customize anomalies size

Customize anomalies size

執行測試

選擇好測試用例的種類(lèi)和異常數據的數量,便可以開(kāi)始測試。本次測試用時(shí)約 6 分鐘,其中約 98% 通過(guò)測試,約 1%(2779條用例)結果未知。

Defensics 執行測試

Run time 06:03

分析保存結果

我們先來(lái)選取其中一條未知結果的異常報文進(jìn)行分析。

可以看到 Defensics 為了評估被測對象的健壯性,在模糊測試時(shí)嘗試使用了不符合協(xié)議規范的異常數據進(jìn)行測試。例如圖中被進(jìn)行了紅色高亮標注部分,這部份兩字節數據在 MQTT v3.1.1 協(xié)議的 SUBSCRIBE 報文中,指示了訂閱主題的 UTF-8 字符串的長(cháng)度。即表示接下來(lái)長(cháng)度 0x009A (154字節)的數據為訂閱主題過(guò)濾器的 UTF-8 字符串。但該主題過(guò)濾器實(shí)際長(cháng)度 18 字節,值應為 0x0012 ,與實(shí)際長(cháng)度不符。

按照協(xié)議的強制性規范聲明,在此種情況下,服務(wù)端必須關(guān)閉傳輸這個(gè)協(xié)議違規控制報文的網(wǎng)絡(luò )連接[MQTT-4.8.0-1]。

但并未具體規定是否必須有指示錯誤原因的報文回傳。所以 EMQX 僅進(jìn)行了內部錯誤處理,對異常報文直接丟棄。也不對發(fā)送方進(jìn)行任何信息回傳操作,所以 Defensics 將此條結果標記為未知。

但按照協(xié)議,此結果仍然符合要求。

Defensics 結果分析

Malformed Subscribe Packet

經(jīng)過(guò)統計,2779 條結果未知的測試用例中,不同類(lèi)型的錯誤如下表所示:

錯誤類(lèi)型數量
報文過(guò)大(overflow)190
固定報頭錯誤(fixed-header)44
固定報頭標志位錯誤(flags)34
報文剩余長(cháng)度值異常(remaining-length)1167
報文標識符異常(packet-identifer)626
主題過(guò)濾器結構錯誤(topic-filters)304
主題過(guò)濾器長(cháng)度值異常(topic-filter-length)414

EMQX 在面對這些異常報文時(shí),直接作了丟棄處理,并未發(fā)回關(guān)于錯誤信息的指示報文。

對于其中一部分錯誤類(lèi)型,由于錯誤點(diǎn)位的信息比較關(guān)鍵,試圖對關(guān)鍵信息邊界進(jìn)行猜測甚至可能造成更大、更無(wú)法接受的錯誤。 例如上面剖析過(guò)的字符串長(cháng)度指示值錯誤。如果對主題過(guò)濾器及其長(cháng)度進(jìn)行猜測,可能會(huì )得到錯誤的主題過(guò)濾器,造成客戶(hù)端得到非預期的主題訂閱。甚至也有可能是主題過(guò)濾器長(cháng)度正確,而主題過(guò)濾器的值在傳輸過(guò)程中丟失損壞。

這類(lèi)邏輯錯誤在系統運行中更加難以發(fā)現和排查,并且后果更難以接受。所以此時(shí)對異常報文直接丟棄成為了更優(yōu)選擇。

至于其他類(lèi)型的錯誤,由于錯誤點(diǎn)位過(guò)于明顯,相較之下更可能的原因是傳輸過(guò)程中的數據丟失、或數據流邊界錯誤導致的異常。所以更傾向于認為這些數據不是 MQTT 報文,也作了丟棄處理,不去耗費額外的資源對這些異常進(jìn)行處理。

總結

本文大致梳理了使用 Synopsys 出品的 Defensics 模糊測試器及配套的 MQTT v3.1 協(xié)議測試套件,對 EMQX 的模糊測試過(guò)程,并且選取了部分用例進(jìn)行測試和結果原因分析。

可以看到 EMQX 在對協(xié)議的實(shí)現上非常完整,即使使用大量錯誤報文進(jìn)行測試也不會(huì )導致 EMQX 失去提供服務(wù)的能力,可以保證協(xié)議的安全性,為實(shí)際項目的穩定運行提供安全保障。

EMQ 致力于為物聯(lián)網(wǎng)領(lǐng)域提供高可用、高可靠的 MQTT 消息服務(wù)器及其他數據基礎設施軟件。在去年,我們也與 Synopsys 達成了合作,該公司將全面負責 EMQ 各產(chǎn)線(xiàn)產(chǎn)品整個(gè)生命周期的安全和質(zhì)量風(fēng)險管理。我們希望用戶(hù)可以通過(guò) EMQ 的產(chǎn)品,構建更加穩定可靠的物聯(lián)網(wǎng)平臺與應用。

EMQX 開(kāi)源項目也隨時(shí)歡迎您的參與,歡迎通過(guò) GitHub:https://github.com/emqx/emqx 向我們提交 PR 或 Issue。

原創(chuàng )文章,作者:EMQ,如若轉載,請注明出處:https://www.emqx.com/zh/blog/mqtt-broker-security-fuzz-testing

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页