既然購物能通過一套規(guī)則做到這么便捷,那么通信是不是也能做到?答案是肯定的,因為通信就是數(shù)據(jù)交互,也可以通過制定一套規(guī)則來方便數(shù)據(jù)交互,這種規(guī)則就是通信協(xié)議。萬事開頭難,整明白了協(xié)議以及通信協(xié)議,那么MODBUS就說清楚了一半,因為MODBUS就是一種通信協(xié)議,那么MODBUS是怎樣的一種通信協(xié)議呢?
眾所周知,網(wǎng)購的規(guī)則是為了協(xié)調(diào)買家、賣家、第三方平臺之間的關系,規(guī)定了各方享有的權利和承擔的義務,提出一些完成交易需要的步驟和方法。大家直接就能想到的場景,比如說電商會展示商品和服務內(nèi)容(買、可退換)、網(wǎng)絡平臺(淘寶、天貓)制定了交易的規(guī)則,以及快遞公司定義了傳輸商品的方式(包裹、快遞單)。
同樣道理,MODBUS通信協(xié)議是為了方便控制器、設備之間的數(shù)據(jù)交互,表面上由類似于“用戶須知”一樣的諸多條文組成,其實也就是說了幾件事情:協(xié)議功能、通信內(nèi)容、通信規(guī)則、通信數(shù)據(jù)格式。
1)通信功能:MODBUS通信協(xié)議定義的功能包括讀、寫、診斷,這里可以想象一下,當你打電話辦理某個業(yè)務,語音提示你:請輸入您想辦理業(yè)務,按鍵1查詢,2充值,0人工服務,這不就是功能碼嘛!
2)通信內(nèi)容:正如電商會展示出商品供大家選擇一樣,MODBUS通信協(xié)議定義了通信的內(nèi)容包括保持型寄存器、輸入寄存器、線圈等。商品有小件也有大件的,能退也有不能退的,這些通信的內(nèi)容也是有的可以讀寫,有的只能讀。
3)通信規(guī)則:MODBUS通信協(xié)議采用客戶端/服務器模式進行通信,可以看看圖表2對這種通信模式與網(wǎng)購的類比。顯然兩個客戶端是沒辦法直接通信的,因為兩個買家能干嘛?
4)通信數(shù)據(jù)格式:網(wǎng)購后,賣家會采用物流投遞,快遞公司不會像餐廳侍者一樣,托著商品呈遞到家中,而采用包裹的形式,按照快遞單據(jù)準確送達,這就是網(wǎng)購貨品的形式。
MODBUS通信協(xié)議為了實現(xiàn)準確傳輸數(shù)據(jù),也需要“打包”和“快遞單”。假如說貨品是一個保持寄存器,那么打包過程就是將保持寄存器的值用功能碼包裝,形成協(xié)議數(shù)據(jù)PDU(類似于包裹);貨品貼上快遞單就是說數(shù)據(jù)PDU被加上了地址和差錯校驗(即)后形成一幀完整的通信數(shù)據(jù)(應用數(shù)據(jù)ADU)。
Modbus協(xié)議包括ASCII、RTU、TCP等。并且沒有指定物理層。該協(xié)議定義了控制器可以識別和使用的消息結(jié)構(gòu),而不管它們通過什么網(wǎng)絡進行通信。標準Modicon控制器采用RS232C實現(xiàn)串行Modbus。Modbus的ASCII和RTU協(xié)議規(guī)定了消息和數(shù)據(jù)的結(jié)構(gòu),命令和應答方式。數(shù)據(jù)通信采用主從模式,主機發(fā)出數(shù)據(jù)請求消息。從屬設備收到正確的消息后,可以向主設備發(fā)送數(shù)據(jù)以響應請求。主終端也可以直接發(fā)送消息修改從終端的數(shù)據(jù),實現(xiàn)雙向讀寫。
Modbus協(xié)議需要檢查數(shù)據(jù)。除了奇偶校驗,ASCII模式使用LRC校驗,RTU模式使用16位CRC校驗,但TCP模式?jīng)]有額外的校驗,因為TCP協(xié)議是可靠的面向連接的協(xié)議。另外,Modbus采用主從模式,定時收發(fā)數(shù)據(jù)。在實際使用中,如果從站斷開(如故障或關機),主終端可以進行診斷,故障修復后,網(wǎng)絡可以自動連接。所以Modbus協(xié)議的可靠性更好。
Modbus 協(xié)議是典型的工控網(wǎng)協(xié)議,研究其安全性對于加強工業(yè)控制網(wǎng)絡的安全性有重要意義。一般來說,協(xié)議安全性問題可以分為兩種,一種是協(xié)議自身的設計和描述引起的安全問題; 另一種是協(xié)議的不正確實現(xiàn)引起的安全問題。Modbus 協(xié)議也存在著這兩方面的問題。
Modbus 協(xié)議的固有問題
絕大多數(shù)工控協(xié)議在設計之初,僅僅考慮了功能實現(xiàn)、提高效率、提高可靠性等方面,而沒考慮過安全性問題。Modbus 協(xié)議也不例外,盡管其已經(jīng)成為事實上的工業(yè)標準。從前面原理分析可以看出其本身的安全性問題是: 缺乏認證、授權、加密等安全防護機制和功能碼濫用問題。
( 1) 缺乏認證
認證的目的是保證收到的信息來自合法的用戶,未認證的用戶向設備發(fā)送控制命令不會被執(zhí)行。在Modbus 協(xié)議通信過程中,沒有任何認證方面的相關定義,攻擊者只需要找到一個合法的地址就可以使用功能碼就能建立一個Modbus 通信會話,從而擾亂整個或者部分控制過程。
( 2) 缺乏授權
授權是保證不同的特權操作需要由擁有不同權限的認證用戶來完成,這樣可大大降低誤操作與內(nèi)部攻擊的概率。目前,Modbus 協(xié)議沒有基于角色的訪問控制機制,也沒有對用戶分類,沒有對用戶的權限進行劃分,這會導致任意用戶可以執(zhí)行任意功能。
( 3) 缺乏加密
加密可以保證通信過程中雙方的信息不被第三方非法獲取。Modbus 協(xié)議通信過程中,地址和命令全部采用明文傳輸,因此數(shù)據(jù)可以很容易的被攻擊者捕獲和解析,為攻擊者提供便利。
( 4) 功能碼濫用
功能碼是Modbus 協(xié)議中的一項重要內(nèi)容,幾乎所有的通信都包含功能碼。目前,功能碼濫用是導致Modbus 網(wǎng)絡異常的一個主要因素。例如不合法報文長度,短周期的無用命令,不正確的報文長度,確認異常代碼延遲等都有可能導致拒絕服務攻擊。
協(xié)議實現(xiàn)產(chǎn)生的問題
雖然Modbus 協(xié)議獲得了廣泛的應用,但是在實現(xiàn)具體的工業(yè)控制系統(tǒng)時,開發(fā)者并不具備安全知識或者沒有意識到安全問題。這樣就導致了使用Modbus 協(xié)議的系統(tǒng)中可能存在各種各樣的安全漏洞。
( 1) 設計安全問題
Modbus 系統(tǒng)開發(fā)者重點關注的是其功能實現(xiàn)問題,安全問題在設計時很少被注意到。設計安全是指設計時充分考慮安全性,解決Modbus 系統(tǒng)可能出現(xiàn)的各種異常和非法操作等問題。比如在通信過程中,某個節(jié)點被惡意控制后發(fā)出非法數(shù)據(jù),就需要考慮這些數(shù)據(jù)的判別和處理問題。
( 2) 緩沖區(qū)溢出漏洞
緩沖區(qū)溢出是指在向緩沖區(qū)內(nèi)填充數(shù)據(jù)時超過了緩沖區(qū)本身的容量導致溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上,這是在軟件開發(fā)中最常見也是非常危險的漏洞,可以導致系統(tǒng)崩潰,或者被攻擊者利用來控制系統(tǒng)。Modbus 系統(tǒng)開發(fā)者大多不具備安全開發(fā)知識,這樣就會產(chǎn)生很多的緩沖區(qū)溢出漏洞,一旦被惡意者利用會導致嚴重的后果。
( 3) Modbus TCP 安全問題
目前,Modbus 協(xié)議已經(jīng)可以在通用計算機和通用操作系統(tǒng)上實現(xiàn),運行于TCP /IP 之上以滿足發(fā)展需要。這樣,TCP /IP 協(xié)議自身存在的安全問題不可避免地會影響到工控網(wǎng)絡安全。非法網(wǎng)絡數(shù)據(jù)獲取,中間人,拒絕服務, IP 欺騙,病毒木馬等在IP 互聯(lián)網(wǎng)中的常用攻擊手段都會影響Modbus 系統(tǒng)安全。
安全建議
目前,Modbus 系統(tǒng)采取的安全防護措施普遍不足,這里參考信息安全業(yè)內(nèi)研究并結(jié)合工控系統(tǒng)自身的安全問題,提出了一些安全建議,能夠有效地降低工業(yè)控制系統(tǒng)面臨的威脅。
( 1) 從源頭開始
工控網(wǎng)絡漏洞,很大一部分是其實現(xiàn)過程出現(xiàn)的漏洞。如果從源頭開始控制,從Modbus 系統(tǒng)的需求設計、開發(fā)實現(xiàn)、內(nèi)部測試和部署等階段,全生命周期的介入安全手段,融入安全設計、安全編碼以及安全測試等技術,可以極大地消除安全漏洞,降低整個Modbus 系統(tǒng)的安全風險。
( 2) 異常行為檢測
異常行為代表著可能發(fā)生威脅,不管是有沒有攻擊者,因此開發(fā)針對Modbus 系統(tǒng)的專用異常行為檢測設備可以極大提高工控網(wǎng)絡的安全性。針對Modbus 系統(tǒng),首先要分析其存在的各種操作行為,依據(jù)“主體,地點,時間,訪問方式,操作,客體”等行為描述成一個六元組模型; 進而分析其行為是否屬于異常; 最終決定采取記錄或者報警等措施。
( 3) 安全審計
Modbus 的安全審計就是對協(xié)議數(shù)據(jù)進行深度解碼分析,記錄操作的時間、地點、操作者和操作行為等關鍵信息,實現(xiàn)對Modbus 系統(tǒng)的安全審計日志記錄和審計功能,從而提供安全事件爆發(fā)后的時候追查能力。
( 4) 使用網(wǎng)絡安全設備
使用入侵防御和防火墻等網(wǎng)絡安全設備。防火墻是一個串行設備,通過設置,只允許特定的地址訪問服務端,禁止外部地址訪問Modbus 服務器,可以有效的防止外部入侵; 入侵防御設備可以分析Modbus協(xié)議的具體操作內(nèi)容,有效地檢測并阻止來自內(nèi)部/外部的異常操作和各種滲透攻擊行為,對內(nèi)網(wǎng)提供保護功能。
至于ModbusASCII、RTU和TCP協(xié)議,其中TCP和RTU協(xié)議非常相似,我們只需要去掉RTU協(xié)議的兩字節(jié)校驗碼,然后在RTU協(xié)議開頭加上五個零和一個六,通過TCP/IP網(wǎng)絡協(xié)議發(fā)送出去。
綜上所述,MODBUS就是包含以上4個內(nèi)容的通信協(xié)議。其實,工業(yè)互聯(lián)網(wǎng)中的一些技術并不是特別深奧,能從生活中找到原型,你看MODBUS通信協(xié)議不也是可以很俗很直觀的嗎?