既然購物能通過一套規則做到這么便捷,那么通信是不是也能做到?答案是肯定的,因為通信就是數據交互,也可以通過制定一套規則來方便數據交互,這種規則就是通信協議。萬事開頭難,整明白了協議以及通信協議,那么MODBUS就說清楚了一半,因為MODBUS就是一種通信協議,那么MODBUS是怎樣的一種通信協議呢?
眾所周知,網購的規則是為了協調買家、賣家、第三方平臺之間的關系,規定了各方享有的權利和承擔的義務,提出一些完成交易需要的步驟和方法。大家直接就能想到的場景,比如說電商會展示商品和服務內容(買、可退換)、網絡平臺(淘寶、天貓)制定了交易的規則,以及快遞公司定義了傳輸商品的方式(包裹、快遞單)。
同樣道理,MODBUS通信協議是為了方便控制器、設備之間的數據交互,表面上由類似于“用戶須知”一樣的諸多條文組成,其實也就是說了幾件事情:協議功能、通信內容、通信規則、通信數據格式。
1)通信功能:MODBUS通信協議定義的功能包括讀、寫、診斷,這里可以想象一下,當你打電話辦理某個業務,語音提示你:請輸入您想辦理業務,按鍵1查詢,2充值,0人工服務,這不就是功能碼嘛!
2)通信內容:正如電商會展示出商品供大家選擇一樣,MODBUS通信協議定義了通信的內容包括保持型寄存器、輸入寄存器、線圈等。商品有小件也有大件的,能退也有不能退的,這些通信的內容也是有的可以讀寫,有的只能讀。

3)通信規則:MODBUS通信協議采用客戶端/服務器模式進行通信,可以看看圖表2對這種通信模式與網購的類比。顯然兩個客戶端是沒辦法直接通信的,因為兩個買家能干嘛?
4)通信數據格式:網購后,賣家會采用物流投遞,快遞公司不會像餐廳侍者一樣,托著商品呈遞到家中,而采用包裹的形式,按照快遞單據準確送達,這就是網購貨品的形式。
MODBUS通信協議為了實現準確傳輸數據,也需要“打包”和“快遞單”。假如說貨品是一個保持寄存器,那么打包過程就是將保持寄存器的值用功能碼包裝,形成協議數據PDU(類似于包裹);貨品貼上快遞單就是說數據PDU被加上了地址和差錯校驗(即)后形成一幀完整的通信數據(應用數據ADU)。
Modbus協議包括ASCII、RTU、TCP等。并且沒有指定物理層。該協議定義了控制器可以識別和使用的消息結構,而不管它們通過什么網絡進行通信。標準Modicon控制器采用RS232C實現串行Modbus。Modbus的ASCII和RTU協議規定了消息和數據的結構,命令和應答方式。數據通信采用主從模式,主機發出數據請求消息。從屬設備收到正確的消息后,可以向主設備發送數據以響應請求。主終端也可以直接發送消息修改從終端的數據,實現雙向讀寫。
Modbus協議需要檢查數據。除了奇偶校驗,ASCII模式使用LRC校驗,RTU模式使用16位CRC校驗,但TCP模式沒有額外的校驗,因為TCP協議是可靠的面向連接的協議。另外,Modbus采用主從模式,定時收發數據。在實際使用中,如果從站斷開(如故障或關機),主終端可以進行診斷,故障修復后,網絡可以自動連接。所以Modbus協議的可靠性更好。
Modbus 協議是典型的工控網協議,研究其安全性對于加強工業控制網絡的安全性有重要意義。一般來說,協議安全性問題可以分為兩種,一種是協議自身的設計和描述引起的安全問題; 另一種是協議的不正確實現引起的安全問題。Modbus 協議也存在著這兩方面的問題。
Modbus 協議的固有問題
絕大多數工控協議在設計之初,僅僅考慮了功能實現、提高效率、提高可靠性等方面,而沒考慮過安全性問題。Modbus 協議也不例外,盡管其已經成為事實上的工業標準。從前面原理分析可以看出其本身的安全性問題是: 缺乏認證、授權、加密等安全防護機制和功能碼濫用問題。
( 1) 缺乏認證
認證的目的是保證收到的信息來自合法的用戶,未認證的用戶向設備發送控制命令不會被執行。在Modbus 協議通信過程中,沒有任何認證方面的相關定義,攻擊者只需要找到一個合法的地址就可以使用功能碼就能建立一個Modbus 通信會話,從而擾亂整個或者部分控制過程。
( 2) 缺乏授權
授權是保證不同的特權操作需要由擁有不同權限的認證用戶來完成,這樣可大大降低誤操作與內部攻擊的概率。目前,Modbus 協議沒有基于角色的訪問控制機制,也沒有對用戶分類,沒有對用戶的權限進行劃分,這會導致任意用戶可以執行任意功能。
( 3) 缺乏加密
加密可以保證通信過程中雙方的信息不被第三方非法獲取。Modbus 協議通信過程中,地址和命令全部采用明文傳輸,因此數據可以很容易的被攻擊者捕獲和解析,為攻擊者提供便利。
( 4) 功能碼濫用
功能碼是Modbus 協議中的一項重要內容,幾乎所有的通信都包含功能碼。目前,功能碼濫用是導致Modbus 網絡異常的一個主要因素。例如不合法報文長度,短周期的無用命令,不正確的報文長度,確認異常代碼延遲等都有可能導致拒絕服務攻擊。
協議實現產生的問題
雖然Modbus 協議獲得了廣泛的應用,但是在實現具體的工業控制系統時,開發者并不具備安全知識或者沒有意識到安全問題。這樣就導致了使用Modbus 協議的系統中可能存在各種各樣的安全漏洞。
( 1) 設計安全問題
Modbus 系統開發者重點關注的是其功能實現問題,安全問題在設計時很少被注意到。設計安全是指設計時充分考慮安全性,解決Modbus 系統可能出現的各種異常和非法操作等問題。比如在通信過程中,某個節點被惡意控制后發出非法數據,就需要考慮這些數據的判別和處理問題。
( 2) 緩沖區溢出漏洞
緩沖區溢出是指在向緩沖區內填充數據時超過了緩沖區本身的容量導致溢出的數據覆蓋在合法數據上,這是在軟件開發中最常見也是非常危險的漏洞,可以導致系統崩潰,或者被攻擊者利用來控制系統。Modbus 系統開發者大多不具備安全開發知識,這樣就會產生很多的緩沖區溢出漏洞,一旦被惡意者利用會導致嚴重的后果。
( 3) Modbus TCP 安全問題
目前,Modbus 協議已經可以在通用計算機和通用操作系統上實現,運行于TCP /IP 之上以滿足發展需要。這樣,TCP /IP 協議自身存在的安全問題不可避免地會影響到工控網絡安全。非法網絡數據獲取,中間人,拒絕服務, IP 欺騙,病毒木馬等在IP 互聯網中的常用攻擊手段都會影響Modbus 系統安全。

安全建議
目前,Modbus 系統采取的安全防護措施普遍不足,這里參考信息安全業內研究并結合工控系統自身的安全問題,提出了一些安全建議,能夠有效地降低工業控制系統面臨的威脅。
( 1) 從源頭開始
工控網絡漏洞,很大一部分是其實現過程出現的漏洞。如果從源頭開始控制,從Modbus 系統的需求設計、開發實現、內部測試和部署等階段,全生命周期的介入安全手段,融入安全設計、安全編碼以及安全測試等技術,可以極大地消除安全漏洞,降低整個Modbus 系統的安全風險。
( 2) 異常行為檢測
異常行為代表著可能發生威脅,不管是有沒有攻擊者,因此開發針對Modbus 系統的專用異常行為檢測設備可以極大提高工控網絡的安全性。針對Modbus 系統,首先要分析其存在的各種操作行為,依據“主體,地點,時間,訪問方式,操作,客體”等行為描述成一個六元組模型; 進而分析其行為是否屬于異常; 最終決定采取記錄或者報警等措施。
( 3) 安全審計
Modbus 的安全審計就是對協議數據進行深度解碼分析,記錄操作的時間、地點、操作者和操作行為等關鍵信息,實現對Modbus 系統的安全審計日志記錄和審計功能,從而提供安全事件爆發后的時候追查能力。

( 4) 使用網絡安全設備
使用入侵防御和防火墻等網絡安全設備。防火墻是一個串行設備,通過設置,只允許特定的地址訪問服務端,禁止外部地址訪問Modbus 服務器,可以有效的防止外部入侵; 入侵防御設備可以分析Modbus協議的具體操作內容,有效地檢測并阻止來自內部/外部的異常操作和各種滲透攻擊行為,對內網提供保護功能。
至于ModbusASCII、RTU和TCP協議,其中TCP和RTU協議非常相似,我們只需要去掉RTU協議的兩字節校驗碼,然后在RTU協議開頭加上五個零和一個六,通過TCP/IP網絡協議發送出去。
綜上所述,MODBUS就是包含以上4個內容的通信協議。其實,工業互聯網中的一些技術并不是特別深奧,能從生活中找到原型,你看MODBUS通信協議不也是可以很俗很直觀的嗎?