虹科物联网设备安全分析与防护平台——更智能的工业通信协议黑盒模糊测试
工業控制系統 (ICS) 可能成為大型工業企業的重大漏洞。攻擊者如果發現系統中的漏洞,可以將其作為攻擊向量,也可以將其用于受攻擊網絡中的橫向運動,在不同系統之間傳播攻擊。
傳統上,連接工業控制系統的計算機網絡被嚴格隔離。網絡系統不經常更換,為了保證兼容性,協議也不頻繁更新。因此ICS通常包含遺留代碼,這些代碼在開發時沒有考慮到防御功能。此類設備往往包含軟件實現錯誤,其中一些會造成嚴重的安全漏洞。
通常定位工業設備中的軟件錯誤和潛在漏洞的一種方法是黑盒模糊測試。設備通過其網絡通信端口接收大量部分隨機輸入,監控各種不當行為。這種方法可以在即發即棄模式下使用,被測設備連接到PC,該PC生成隨機協議數據包并隨著時間的推移監控崩潰。這種方法可以監控系統的重大問題,而無需對協議及其實現進行深入研究。并且對特殊的問題很敏感,可以定位漏洞,但并非對所有具有潛在安全隱患的漏洞都通用。由于研究人員通常無法訪問設備的內部狀態和精確的故障情況,獲取的漏洞信息很少。因此,對使用純黑盒模糊測試方法產生的崩潰進行分類甚至重現是難以實現的。
在本文中,我們討論了一種更智能的黑盒模糊測試方法,該方法使我們能夠成功發現Modbus協議的libmodbus實現中的CVE-2019-14462和CVE-2019-14463漏洞。
什么是Modbus協議?
Modbus 協議是一種廣泛用于在工業設備之間建立主從通信的消息結構。盡管Modbus 協議不采用任何身份驗證、授權或加密機制,它仍是許多工業設備的主要傳輸協議。有基于 RS232/RS485 (Modbus RTU) 和以太網 (Modbus TCP) 的 Modbus 協議版本。
下圖顯示了包含 Modbus TCP 和 Modbus RTU 版本的典型 Modbus 架構:
從圖中可以看出,典型的架構可能包括以下組件:
-
Modbus 客戶端(主站),例如人機界面 (HMI)、分布式控制系統 (DCS) 和監控和數據采集 (SCADA)
-
Modbus 服務器(從站),例如 PLC
-
用于保護整個網絡通信的工業防火墻
-
用作將結構分成不同區域的屏障的開關
下圖顯示了請求或響應結構的總體輪廓:
面向Modbus的設備的模糊測試設置
1.標準方法
黑盒模糊測試是工業設備制造商使用的一種常用方法,通過向其發送隨機通信數據包并尋找其行為異常(例如軟件掛起或崩潰的跡象)來調查被測設備。
被測設備 (2) 使用檢查的通信協議通過被測通信端口連接到計算機 (1)。計算機生成通信數據包,通常遵守所需的協議但具有隨機內容,并通過請求來自設備的響應并檢查其有效性來監控設備狀態。
2.提高模糊測試的效率
在本報告中,我們為 libmodbus 庫實現了一個模糊器,它是Modbus協議的特定實現。雖然理想的模糊測試方法不需要任何協議或其實現的先驗知識,但了解如何使用其某些功能以及對協議內部工作的直覺,可以顯著提高過程的效率。
根據經驗,我們對上述標準方法進行了三項調整,在庫中發現了兩個新漏洞。
調整 1:更換被測設備
首先,由于libmodbus是開源的,我們可以隨意對其進行重新編譯,并且可以自由設置我們自己的testbench設備來直接運行待評估的代碼。更重要的是,我們可以使用這個新的編譯限定比真實設備的默認編譯中找到的更嚴格檢查條件。測試平臺設備對內存訪問違規變得更加敏感,這可能表明實現中存在漏洞。
我們使用了兩種清理程序:AddressSanitizer (ASAN) 擅長檢測內存損壞錯誤,例如堆/堆棧溢出和內存泄漏,以及MemorySanitizer (MSAN) 擅長檢測 C/C++ 程序中未初始化的內存讀取。MSAN暗中監視未初始化數據的傳播,并在發現使用此數據的地方發出警報。正如本文后面詳細描述的,MSAN幫助我們在運行Modbus寫入和讀取命令后找到未初始化的內存。
使用Clang編譯時,包括ASAN和 MSAN就像添加 –fsanitize=address和 –fsanitize=memory編譯鍵一樣簡單。
調整 2:選擇正確的輸入
了解協議及其可能的實現可能會提示某些字段,例如TCP modbus數據包的數據包長度、寫入有效負載大小和讀取有效負載大小,可能比其他字段更容易出錯。因此,重要的是檢查將這些特定場注入隨機錯誤值的后果。
測試協議對完全不遵守Modbus協議的隨機TCP流量的響應也很有趣。
事實上,我們可以確定Modbus數據包中最有希望進行模糊測試的字段是運行任何類型的特殊解析邏輯的字段(與可以以更簡單的方式處理的地址字段相反):?
調整 3:更有效地監控設備
雖然軟件在接收到來自模糊器的數據包時崩潰是實施錯誤的明顯跡象,但許多錯誤更加微妙,如果僅監控崩潰可能會被忽視。為了檢測其他不良行為模式,而不會被后續命令覆蓋,我們可以在模糊器生成的每個數據包之后發出讀取命令,并驗證響應的有效性。
用于此目的的讀取命令的良好候選者將返回有關設備內部狀態的盡可能多的信息。在Modbus的情況下,我們使用讀取保持寄存器或讀取線圈狀態命令。
此外,設備產生的各種錯誤代碼應該被記錄下來,并通過將它們與由發出的通信數據包中的錯誤字段值導致的預期錯誤進行比較來驗證。
模糊測試結果
在Raspberry Pi上運行時,運行上述模糊測試設置很快會導致模糊測試代碼崩潰。崩潰是由MSAN衛生條件檢查引起的(即對于此輸入,真實設備不會崩潰):
MSAN打印輸出提供的其他詳細信息幫助我們查明崩潰的原因,這可以在源代碼中清楚地看到:
在此代碼中,req是接收到的Modbus有效負載,nb是請求寫入的寄存器數。由于nb從接收到的數據包中獨立于的長度進行控制req,通過提供足夠大的nb,攻擊者將 req 后的內存內容保存到Modbus寄存器單元中。
內容可以稍后讀取,從而導致內存泄露漏洞。應該注意的是,MSAN對未初始化內存使用的檢測僅在讀取Modbus寄存器單元時(根據讀取命令)觸發。這突出了在模糊器發送每個數據包后從設備讀取的重要性。
結論
發現的兩個漏洞的CVE得分為9.8,被歸類為信息泄漏漏洞,通常在工業控制系統的環境中被認為不太重要,因為它們不能直接用于造成物理損壞。但是,在更復雜的攻擊場景中,可能會導致嚴重后果。例如,當與堆棧溢出漏洞結合使用時,信息泄漏漏洞可用于通過獲取有關內存布局的信息來破解地址空間布局隨機化 (ASLR) 保護機制。
虹科Vdoo負責任地向項目維護者披露了這些漏洞,維護者非常迅速地做出回應并將他們的修復程序上傳到libmodbus 3.1.6 版。
虹科Vdoo
虹科Vdoo是端到端的產品安全分析平臺,在整個產品生命周期中自動化完成軟件安全任務,確保所有安全問題得到優先處理、溝通和緩解。垂直無關的平臺使各種行業的設備制造商和部署者能夠跨多個業務線擴展其產品安全功能。虹科Vdoo的自動保護連接產品的方法使客戶大大縮短了上市時間,減少了資源需求,增加了銷售,降低了總體風險。
來源:虹科--工業物聯網
總結
以上是生活随笔為你收集整理的虹科物联网设备安全分析与防护平台——更智能的工业通信协议黑盒模糊测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为任意版本固件ROM下载技巧
- 下一篇: 荆棘中长出的玫瑰:EMUI正在刺穿iOS