今天(tiān)來聊一(yī)聊Modbus,先看看今天的主要(yào)內容:
01 術語解讀
02 背景(jǐng)
03 協議原理
04 傳輸方式
05 Modbus RTU與Modbus ASCII有什麽區別
06 Modbus TCP及其注意點(diǎn)
07 功能碼作用
08 Modbus協議安全分析
01 術語解讀
校驗碼:校驗碼通常是一組數字的最後一位,由前麵的數字通過某種運算得出,用以檢驗該組數據的正確性。代碼作為數(shù)據在向計(jì)算(suàn)機或其(qí)它(tā)設備進行(háng)輸入時,容易產(chǎn)生輸入錯誤,為了減少這種輸入錯誤,編碼專家發明了各種校驗檢錯方法,並依據(jù)這些方法設置了校驗碼。常用的校驗有:累加和校驗(yàn)SUM、字節異或校驗XOR、縱向冗餘(yú)校驗LRC、循環冗餘校驗CRC……
離(lí)散量輸入:主(zhǔ)要用來讀取單個位的(de)數據,如IO的狀態;
線圈(quān):開關輸出信號,主要用來寫入單個位的數據,與離散量構(gòu)成組成對位的操作;
輸入(rù)寄存器:主要用來讀取16位,也就是兩個字節的數據;
保持寄存器:主要用(yòng)來寫入16位的數據;
PLC:可(kě)編程邏輯控製器,是一種采用(yòng)一類可編程的存儲器,用於其內部存儲程序(xù)和(hé)執行邏輯(jí)運(yùn)算(suàn)、順序控製、定時、計數與算術操作(zuò)等麵向用戶的指令,並(bìng)通過(guò)數字或模擬(nǐ)式輸入/輸出控製各種類型的機械或生產過程。
串口通信:隨著計算機係統的應用和(hé)微機網絡的發展,通信功能越來越顯得重要(yào)。這(zhè)裏所說的通信是指計算機(jī)與外(wài)界的(de)信息交換。因此,通信既包括計算機與外部設備之間,也(yě)包括計算機和計算機之間(jiān)的信息交換。由於串(chuàn)行通信是在一根傳輸線上一位一位的傳送信息(xī),所用的傳輸線少,並且可以(yǐ)借助現成的電話網進(jìn)行信息傳送,因此特別適合於遠距離(lí)傳輸。對於那些與計算(suàn)機相距不遠的人-機交換設備和串行存儲的外部設備如終端、打印機、邏輯分析儀、磁(cí)盤等,采用串行(háng)方式交換數據也很普遍。在實時控製(zhì)和管理(lǐ)方麵,采用多台(tái)微機處理機組(zǔ)成分級(jí)分布控製係統(tǒng)中,各 CPU 之間的通信一般都是串(chuàn)行方式。所以串行(háng)接口是(shì)微機應用係統常用的接口。許多外設和計算機按串行方式進行通信,這(zhè)裏所說的串行方式,是指外設與接口(kǒu)電路之間的信息(xī)傳送方(fāng)式,實際上CPU 與接口之間仍按並行方式工作。
串口:串口是計算機上一種非常通用設(shè)備通信的協議,不要與通用串行總線Universal Serial Bus(USB)混淆。大多數計算機包含兩個基於RS232的串口。串口同時也是儀器儀表設備通用的通(tōng)信協議;很(hěn)多GPIB兼容的設備也帶有RS-232口。同時,串(chuàn)口通信協議也可以用於獲取遠程采集設備的數據(jù)。
串口通信的概念非常簡單,串口按位(bit)發送和接收字節。盡管比按字節(byte)的並行通信要慢(màn),但是串口可以在使用一根線發送數據(jù)的同時用另(lìng)一根線接收數據。它很簡單並且能夠實現遠距離通信。比如IEEE488定義並行通(tōng)行狀態時,規定設備線(xiàn)總常不得超過20米,並且任意兩個設備間的長度不得超過2米(mǐ);而對於(yú)串口而言,長度(dù)可達1200米。
典型地,串口用於ASCII碼字符的(de)傳輸。通信使用3根線完成:地線、發送和接(jiē)收。由於(yú)串口通信(xìn)是異步(bù)的,端口能夠在一根線上發送數據同時在另一根線(xiàn)上(shàng)接(jiē)收數據(jù)。其他線用於握手,但是不是必須的。串口通信最重要的參數是波特(tè)率(lǜ)、數據位、停止位和奇偶校驗。對於(yú)兩個進行通行的端口,這些參數(shù)必(bì)須匹配:
a. 波特率:這是一個衡量通信速度的參數。它表示每秒鍾傳送的(de)bit的個數。例如300波特表示(shì)每秒鍾(zhōng)發送300個bit。當我們提到時鍾周期時(shí),我們就(jiù)是指波(bō)特(tè)率。例(lì)如如果(guǒ)協議需要4800波特率,那麽時鍾是4800Hz。這意味著串口通信在數據線上的采樣率為4800Hz。通常電話線的波特率為14400,28800和36600。波特率可以遠(yuǎn)遠大於(yú)這些值,但是波特率和距離成反比。高波特率常常用於放置的很近的儀器間的通信,典型的例子就(jiù)是GPIB設備的(de)通信(xìn)。
b. 數據位:這(zhè)是衡量通(tōng)信中實(shí)際數據位的參數。當計算機發送一個信息包(bāo),實際的數(shù)據不(bú)會是8位的,標準(zhǔn)的值是(shì)5、7和8位。如何設置取(qǔ)決於你想傳送的信息。比如,標準(zhǔn)的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數據使用簡(jiǎn)單的文本(標準 ASCII碼),那麽每個數據包使用7位(wèi)數據。每個包是(shì)指一個字節(jiē),包括開始/停止(zhǐ)位,數據位和奇偶校驗位。由於實(shí)際數據位取決於通信(xìn)協議的選(xuǎn)取,術語“包”指(zhǐ)任何通信的情況。
c. 停止位:用於表示單個(gè)包的最後一位。典型的值為1,1.5和2位。由於數據是在傳輸線上定(dìng)時的,並且(qiě)每一(yī)個設備有其自己的(de)時鍾,很可能在通信中兩台設備間出現了小小(xiǎo)的不同步。因此停(tíng)止(zhǐ)位不僅僅是表示傳輸的結束(shù),並且提供計算機校正時鍾同步的機會。適(shì)用於停止位的位數(shù)越多,不同時鍾同步的容忍程度越(yuè)大,但是數據傳輸率同時也越慢。
d. 奇偶校驗位:在串口通信中一種(zhǒng)簡單的檢錯方式。有(yǒu)四種檢錯方(fāng)式:偶、奇、高和低(dī)。當然(rán)沒有校驗位也是可以的。對於偶和奇校驗的(de)情況,串口會(huì)設置校驗位(wèi)(數據位後麵的一位),用一個值確(què)保傳輸的數據(jù)有偶個或者奇(qí)個邏輯高(gāo)位。例如,如果數據是(shì)011,那麽對於偶校驗(yàn),校驗位為0,保證邏輯高(gāo)的位數是(shì)偶數個。如果是(shì)奇校驗(yàn),校驗位1,這樣就有3個邏(luó)輯高位。高位和低位不真正的檢(jiǎn)查數據,簡單置位邏輯高(gāo)或(huò)者(zhě)邏輯低校驗。這樣(yàng)使得接收設備能夠(gòu)知道(dào)一個(gè)位的狀態,有機會判斷是(shì)否有(yǒu)噪聲幹(gàn)擾了(le)通信或者是否傳輸和接收數據是否不同步。
02 背景
早在1971年,Modicon公司首次推出了Modbus協議,ModbusRTU和Modbus ASCII誕生於此(cǐ)。後來施耐德電氣(SchneiderElectric)收購了Modicon公司,並在1997年推出了ModbusTCP協議。2004年,中國國家標準委員會正式把(bǎ)Modbus作為了國家(jiā)標(biāo)準,開啟了Modbus為中國工業通信做貢獻的時代。
通過此協議,控製(zhì)器相互(hù)之間、控(kòng)製器經由網(wǎng)絡(luò)和其它設備之間可(kě)以通信(xìn)。Modbus協議具有標準、開放(fàng),可以支持多種電氣接口,數(shù)據幀格式簡單緊湊,數據傳輸量大、實時性好等特點,在工業控製係統中得到了(le)廣泛(fàn)的應用,已經成為通用工業標準(zhǔn)。深入分析Modbus協議實現原理(lǐ)和(hé)其安全性對提高工控係統安全性有著重要的現實意義。
ModbusRTU和ModbusASCII主要用於串行通信領(lǐng)域,而ModbusTCP則常用於以太網(wǎng)通信(xìn)。現在,Modbus已經成為工業領域通信協議標準,並且現在是工業電子設備之間相當常用(yòng)的(de)連(lián)接方式。

03 協議原理
Modbus使用(yòng)一種簡單的MasterandSlave主從協議(客戶機/服務器(qì)協(xié)議)進行通信(xìn)。客戶機作為主(zhǔ)站,向服務器發送請求;服務器(qì)(從站)接到請求後,對請求進行分析並作出應答。其中使用的(de)通(tōng)信幀被稱(chēng)為應用數據單元(Application Data Unit,ADU),它包(bāo)括通信地址(zhǐ)段、功能代碼段、數據段和校驗段,如(rú)下圖:

一般使用(yòng)上(shàng),監控係(xì)統(HMI)都為Master,PLC、電表、儀表等都為Slave,HMI係統一直PollingSlave的各種(zhǒng)relayandregister最新(xīn)數值,然後做顯示及各種邏輯計算及控製調整(zhěng)等處理。
其中,功能代碼段和數據段組合稱為協(xié)議數據單(dān)元(Protocol Data Unit or Protocol Description Unit),PDU)。功能代碼段占用一(yī)個字節(jiē),取值(zhí)範圍為1~255,其中128~255為保留(liú)值,用(yòng)於異常消息(xī)應答報文。1~127為功能代碼編號,其中65~72和100~110為用戶自(zì)定義編碼。
04 傳輸方(fāng)式
Modbus 協議是一種應用層報文傳輸協議,包括ASCII、RTU、TCP三種報(bào)文類型,協議本身並沒有定義物理(lǐ)層,隻是定義了(le)控製器能夠認識和使用的消息結構,而不管它們是經過(guò)何種網(wǎng)絡進行通信的(de)。
Modbus 協議使用串口傳輸時可(kě)以選(xuǎn)擇RTU或ASCII模式,並規定了消息、數據結構、命令和(hé)應答方式(shì)並需要對數據(jù)進行校驗。ASCII 模式采用LRC校驗,RTU模式采用16 位CRC校驗。通過以太網傳輸時使用(yòng)TCP,這種模式不使用校驗,因為(wéi)TCP協議是一個麵向連接的可(kě)靠協議。
05 Modbus RTU與Modbus ASCII有(yǒu)什麽(me)區別
Modbus是一種應用層協議,它定義(yì)了與基礎(chǔ)網絡無關的數據單元(ADU),可以在以太網(TCP/IP)或串行鏈路上(shàng)(RS232、RS485等)進行通信(以太網ADU和串行(háng)ADU略有不(bú)同)。在串行(háng)鏈路上,Modbus協議有兩種傳輸模(mó)式——ASCII模式和RTU模式。其中,ASCII是(shì)英文“American Standard Code for Information Interchange”的縮寫,中文翻(fān)譯為“美國國家信息交換標(biāo)準編碼”;RTU是英文“ Remote Terminal Unit”的縮寫,中文翻譯為“遠程終端設備”。
首先,讓我們來(lái)看看Modbus的工作原理。
Modbus采用主從(Master-Salve)通信模式,僅有主設備(Master)能對傳輸進行初(chū)始化,從設備(Slave)根據主(zhǔ)設備的請求進行應(yīng)答。典型的主設備包(bāo)括現(xiàn)場儀表和顯示麵板,典型的從(cóng)設備為可編程邏輯控(kòng)製器(PLC)。
在串行鏈(liàn)路的主從通信中,Modbus主設(shè)備可以(yǐ)連接一個或N(最大為247)個從設備,主從設備之間的通(tōng)信包括單播模式和廣播模式。
在(zài)廣播模式中,Modbus主設備可同時向多個從(cóng)設備發送請求(設(shè)備地址0用於廣播模式),從設備對廣播請求不進行響應。
在單播模(mó)式中(zhōng),主設備發送請求至某個特(tè)定(dìng)的從設備(每個Modbus從設備具有唯一地址(zhǐ)),請求(qiú)的消息幀中會包含功能代碼和數據,比如功能代碼“01”用(yòng)來讀取離散量線圈的狀態。從設備接到請求後,進行應答並把消息反饋主設備(bèi)。

在主從設備的通信中,可以使用ASCII模式或者RTU模式。在ASCII(AmericanStandard Code for Information Interchange)傳輸模式下,消息幀以(yǐ)英文冒號(“:”,ASCII3A Hex)開始,以回車和換號(CRLF,ASCII 0D and 0A Hex)符號結束,允(yǔn)許的傳輸的字符(fú)集為十六進(jìn)製的0~9和A~F;網絡中(zhōng)的從設備監視傳輸通路上是否有英文冒號(“:”),如果有的話,就對消息幀進行解碼,查看消息中的地址是否(fǒu)與自(zì)己的地址相同(tóng),如果相同(tóng)的話,就接收其中的數據;如果不(bú)同的話,則不予(yǔ)理會。

在ASCII模式下,每個(gè)8位的字節被拆分(fèn)成兩(liǎng)個ASCII字(zì)符進行發送,比如(rú)十六進製數0xAF ,會被分解成ASCII字符“A”和“F”進行(háng)發送,發送的字符量比RTU增加(jiā)一倍。ASCII模式的好處是允許兩個字符之間間隔的時間長達1s而不引發(fā)通(tōng)信故障,該模(mó)式采用縱向冗餘校驗(Longitudinal Redundancy Check ,LRC)) 的方法來檢驗錯誤,當控製器設(shè)為(wéi)在Modbus 網絡上以RTU 模式(shì)通信,消息中的(de)每個8Bit 字節(jiē)都包(bāo)含兩個4 Bit 的(de)十(shí)六進製字符(fú),這種模式沒有開始和結束標記。其優點是: 在同樣的波特率下,可傳送更多的數據。
在RTU(RemoteTerminal Unit)模(mó)式下,每個字節可以傳輸兩個十(shí)六進製字符,比如十六進製數0xAF,直接以十六進製0xAF(二進製:10101111)進(jìn)行發送,因此它的發送密度(dù)比ASCII模式(shì)高(gāo)一倍;RTU模式采用循(xún)環冗餘校驗(CRC),下麵是對RTU模式(shì)的總結:
具體格式如下圖所示:

06 Modbus TCP及其注意點
6.1 主機和從機、服務端和客戶端
在modbus協議中:主機發送modbus請求,從機根據請求內(nèi)容向主機返回(huí)響應。在(zài)modbus協議中,主機總(zǒng)是主動方,從(cóng)機總是被動方。
在網絡應用中:在網絡應用中存在客戶端和服務器端,客戶端(例如瀏覽器)發送請求到服務器,服(fú)務器(qì)向客戶端返回內容(例如HTML文本)。
在modbus tcp中:主機是(shì)客戶(hù)端,而從機是服務器端。千萬不要以為服務(wù)器端重要(yào),主機(jī)也重要,所以主機就是服務器(qì)端。
modbus TCP和modbus RTU基本相同,但是也存在一些區別:
a.從機地址變得不再重要,多數情(qíng)況下忽略。從某種意義(yì)上說從機地址被IP地址取代(dài);
b.CRC校驗變(biàn)得不再重要,甚(shèn)至可以忽略。由於TCP數據包(bāo)中已經存在校驗,為了(le)不重複造輪子,modbus TCP幹脆取消了CRC校驗。
TCP 模式是(shì)為了讓Modbus 數據順利在以太網上傳輸產生的,使用TCP502 端口。該協議(yì)物理層,數據鏈路層,網絡層,傳輸層都是基於TCP 協議,隻在應(yīng)用層,將Modbus 協議修改後封裝進去(qù); 接收端將(jiāng)該TCP 數據包拆封後,重新獲得原始Modbus 幀,然後按照Modbus 協議規範進(jìn)行解析,並(bìng)將返回的數據包重(chóng)新封裝進TCP 協議中,返回到發送端。與串(chuàn)行鏈路傳輸的數據(jù)格式不同,TCP 模式去除了附加地址和校驗,增加了報文(wén)頭(tóu),其具體格式如圖4所示。

在modbus TCP中包含(hán)一個MBAP頭,該頭包含以下幾個部分:
| 區域 | 長度 | 描述 | 客戶端 | 服務器 |
|
傳輸標誌 |
2字節 |
MODBUS 請求和響應傳輸過程中(zhōng)序列號 |
客戶端生成(chéng) |
應答時複製(zhì)該值 |
|
協議標(biāo)誌(zhì) |
2字節 |
Modbus協議默認為0 |
客戶端生成 |
應答時(shí)複製該值 |
|
長度 |
2字節 |
剩餘部分的長度 |
客戶端生成 |
應答時由服務器端生成 |
|
單元標誌 |
1字(zì)節 |
從機標誌(從機地(dì)址) |
客戶端生成 |
應答時複(fù)製該值 |
注意:
a.傳輸標誌可理解為序列號,防止 MODBUS TCP通信錯位,例如後發生的響應先到了主機,而早發生的響應後到主機;
b.單元標誌(zhì)可理解為從機地址,此時已經不再重要。
modbus TCP可以理解為發生在TCP上(shàng)的應用層協議,既然是(shì)TCP協議那麽(me)一個完整的(de)MODBUSTCP報文(wén)必然包括TCP首部,IP首部和Ethernet首部。
07 功能碼作用
啟動(dòng)Modbus事務處理的客戶機創建Modbus應用數據單元。功能碼(PDU中的)向服務器指(zhǐ)示將執行哪種操作(zuò)。
用一個字(zì)節編碼(mǎ)Modbus數據單元的功能碼(mǎ)域。有效範圍(wéi)是十製製1-255(128-255為異常響應(yīng)保留)。當從客戶機向服務器發送報文(wén)時,功(gōng)能碼域通(tōng)過服務器執行哪種操作。
從(cóng)客(kè)戶機向服務器發送的報文數據域包(bāo)括附加信息,服務器使用這個信息執行(háng)功能碼定義的操作。這個域還包括離散項目和寄存器地址、處理項目的數(shù)量以及域中的實(shí)際數(shù)據字節數(shù)。
在某種請求中,數據域可以(yǐ)是不存在的,在此情況下服務(wù)器不需要任何附加信(xìn)息。功能碼僅說明操作。
功能碼的類型(xíng):
功能(néng)碼主要分為有效功能碼(mǎ)、異常功能碼和錯誤功能(néng)碼。如果在一個(gè)正確接收Modbus ADU中,不出現(xiàn)與請求Modbus功能有關的差(chà)錯,那麽服務器至客戶機的響(xiǎng)應數據會包含請求中的正常功能碼。如果出(chū)現與(yǔ)請求Modbus功能有關的差錯,那麽響應數據會包含一個異常碼和錯誤碼。
例如,客(kè)戶機能夠(gòu)讀一組離散量輸出或輸入的開/關狀態,或者用戶能夠讀/寫一組寄存器數據內容。當服務器(qì)對客戶機響應時,它使(shǐ)用功能碼域來指示正常(無差錯)響應或出現某種差錯(稱為異常響應)。對(duì)於一個正常響應來說,服務器僅對原始功能碼響應。
對於異常響應,服務器返(fǎn)回一個(gè)與客戶機等同(tóng)的(de)碼,設置該原始功能碼的最高有效位(wèi)為邏輯1,並加該異常碼後(hòu)增加錯誤碼,以(yǐ)通知客戶機異(yì)常原因。
有效(xiào)功能碼:
有(yǒu)效功能碼有二十幾種,但是一般使用上都以1、2、3、4、5、6、15、16等八種最為常用,以及另外(wài)特殊使用的20、21兩種,此(cǐ)為General Reference Register,絕大部份的Modbus設備並不會提供(gòng)此Register。於(yú)PLC上主要的控製數據有下列四(sì)種(zhǒng)型式。此八種功(gōng)能碼就是處理這些控製資料,詳(xiáng)細說明如下各點:
控製數(shù)據四種(zhǒng)型式:
DI:DigitalInput(數(shù)字輸入,離散輸入(rù)),一(yī)個地址一個數據位,用(yòng)戶隻能讀取它的(de)狀態,不能修改。以一個(gè) bit表示 On/Off,用來記錄控製信號的狀態輸(shū)入(rù),例如:開(kāi)關,接觸點,馬達運轉,超限switch…等等(děng)。於PLC上被稱為Input relay、input coil等。
DO:DigitalOutput(數字(zì)輸(shū)出,線(xiàn)圈輸出(chū)),一個地址一個數據位(wèi),用(yòng)戶可以置位、複位,可以回讀(dú)狀態。以一(yī)個 bit表示 On/Off,用來輸出(chū)控製信號(hào),以激(jī)活(huó)或停止馬達(dá),警鈴(líng),燈光…等等。於PLC上被稱為Output relay、Output coil等。
AI:Analog Input(模擬輸入,輸入寄存器),一個地址16位數據(jù),用戶隻能讀,不能修改,,以16 bits integer表示一個數值,用來記(jì)錄控製信號的數值輸入,例如:溫度、流量、料量、速度、轉速、文件板開度、液位、重量…等等。於PLC上被稱為Input register。
AO:AnalogOutput(模擬輸出(chū),保持寄存器),一個地址(zhǐ)16位數據,用戶(hù)可以寫,也可以回讀(dú),以16 bits integer表示一個數值,用來輸出(chū)控製信號的數值,例如:溫度、流(liú)量、速度、轉速、文件(jiàn)板開(kāi)度、飼料量…等等設定值。於PLC上被稱為Output register、Holding register。

08 Modbus協議安全分析
Modbus 協議是典型的工(gōng)控網協議,研究其(qí)安全性對於加強工(gōng)業控製(zhì)網絡的安全性有(yǒu)重要意義。一般來(lái)說,協議安(ān)全性問題可以(yǐ)分為兩種,一(yī)種是協議(yì)自身的設計和描述引起的安全問題; 另一種是(shì)協(xié)議的不正確實現(xiàn)引起的安全問題。Modbus 協議也存在著這兩方麵(miàn)的問題。
絕大多數工控協議在設計之初(chū),僅(jǐn)僅考(kǎo)慮了功(gōng)能實現、提高效(xiào)率、提(tí)高可靠性等方(fāng)麵,而沒考慮過安(ān)全性問題。Modbus 協議也不例外,盡(jìn)管(guǎn)其已經成為事實上的(de)工業標準。從前麵(miàn)原理分析可以看出其本身的安全性問題是: 缺乏認(rèn)證、授權、加密等安全防護機製和功能碼濫用問題。
(1)缺乏認證
認證的目的是保證收到的信息來自合法的用戶,未認(rèn)證用戶向設備發送控製命(mìng)令不會被執行。在Modbus 協議通信過程中,沒有(yǒu)任何認(rèn)證方麵的相關定義,攻擊者(zhě)隻需要找到一個合法的地址就可以使用(yòng)功能碼就能(néng)建立一個Modbus 通信會話,從而擾(rǎo)亂整個或者部分控製過程。
(2)缺乏授權
授權是保證不(bú)同的特權操作需要由擁有不同權限的認證用戶來完成,這樣可大大降低誤操作與內部攻擊的概(gài)率。目前,Modbus 協議(yì)沒(méi)有基(jī)於角(jiǎo)色的訪問控製機製(zhì),也(yě)沒有對用戶分類,沒有對用戶的權(quán)限進行劃分,這會導致任意用戶可以執行任意功能。
(3)缺乏加密
加密可以保證通信過程中雙方的信息不被第三方非法獲取。Modbus 協議通信過程中,地址和(hé)命令全部采用明文傳輸,因此數據可以很容易的被攻擊者捕獲(huò)和解析,為(wéi)攻(gōng)擊者提供便利。
(4)功能碼濫用
功能碼是Modbus 協議中的一項重要內容,幾乎所有的通信都包含功能碼。目(mù)前(qián),功能(néng)碼濫用是導致Modbus 網絡異常的一個主要因素。例如不合法報文長度,短周期的無用命令,不正(zhèng)確的報文長度,確認異常代碼(mǎ)延遲等都有(yǒu)可能導致拒絕服務攻擊。
雖然Modbus 協議獲得了廣泛(fàn)的應用,但是在實現具體的工(gōng)業控製係統時,開發者並不具備安全知識或者沒有意識到安全問題。這樣就導致(zhì)了使用Modbus 協議的係統中可能存在各種各樣的安全漏洞。
(1)設計安全問題
Modbus 係統開發者重點關注的(de)是其功能實現問題,安全問題在設計時很(hěn)少被注(zhù)意到。設計安全是指設計時充分(fèn)考慮安全性,解決Modbus 係統可能出現的各種異(yì)常和非法操作等問題。比如在通信過程中,某個節點被惡意控製後發出非法數據,就需要考慮這些數(shù)據的判別和處理問題。
(2)緩衝區溢出漏洞
緩(huǎn)衝(chōng)區溢出是指在向緩衝區內填充數據(jù)時超過了緩衝區(qū)本身的容量導致溢出的數據覆蓋在合(hé)法數據上,這是在軟件開發中最常(cháng)見也是非(fēi)常危險的漏洞,可以導致係統崩潰,或者被攻(gōng)擊者利(lì)用來控製係統。
Modbus 係統開發者(zhě)大多不具備安全開發知識(shí),這樣就會產生很多的緩衝區(qū)溢出漏洞,一旦被惡意者利用會導致嚴重的後果。
(3)Modbus TCP 安全問題
目前,Modbus 協議已經可以在通用計算機和通用操作(zuò)係統上實現,運行於TCP /IP 之上以滿足發展(zhǎn)需要。這樣,TCP /IP 協議自身存在的安全問(wèn)題不可避免地會影響到工控(kòng)網絡安全。非法網絡數據獲取,中間人,拒絕服(fú)務, IP 欺騙,病毒(dú)木馬等在IP 互聯網中的常用(yòng)攻擊手段都會影響Modbus 係統安全。
目前,Modbus 係統采取的安全防護措施普(pǔ)遍不足,這裏參考信息安全業內研究並(bìng)結合工控係統(tǒng)自身的安全問題,提出(chū)了一些安全建議(yì),能夠有效地降低工業控(kòng)製係統麵臨的威脅。
(1)從源頭(tóu)開始
工控網絡漏洞,很大(dà)一部分是其實現(xiàn)過程出現的漏洞(dòng)。如果從源頭開始控製(zhì),從Modbus 係(xì)統的需求設計、開發實現、內部(bù)測試和部署等階段,全生命周期的介入安全手段,融入安全設計、安全編碼以及安全測試等技術,可以極大地消除安全漏洞,降低整個Modbus 係統的安全風險。
(2)異常(cháng)行為(wéi)檢測
異常行為代表著可能發生威脅,不管是有沒有攻(gōng)擊者,因此開發針對Modbus 係統的專用異常行為(wéi)檢測設(shè)備可以極(jí)大提高(gāo)工控網絡的安全性。針對Modbus 係統,首先(xiān)要分析(xī)其存在的各種操作行為,依據“主體,地點,時間,訪問方式,操作,客體”等行為(wéi)描述成一個六元組模型; 進而分析其行為是否屬於異常; 最終(zhōng)決定采取記錄或者報警等措施。
(3)安全審計
Modbus 的安全審計就是對協(xié)議數據進(jìn)行深度解碼分析,記錄操作的(de)時間、地點、操作(zuò)者(zhě)和操作(zuò)行為等關鍵信息,實現對Modbus 係統的(de)安全審計日誌記錄和審計功能,從而提供安全事(shì)件爆發後的時候追查能(néng)力。
(4)使用網絡安全設備
使用(yòng)入侵防(fáng)禦和防火牆等(děng)網絡安全設備。防火牆是一個串行設備,通(tōng)過設置,隻允許(xǔ)特(tè)定的地址訪問服務(wù)端,禁止外部地址訪問Modbus 服務器,可以有效的防止外部入侵; 入侵防禦設備可以分析Modbus協(xié)議的具體操作(zuò)內容,有效地檢測並(bìng)阻(zǔ)止來自內部/外部的異常操作和(hé)各種滲透攻擊行為,對內網提供(gòng)保(bǎo)護功能。
本文來源於網絡,版權歸原作者所有,但因轉(zhuǎn)載眾多,無法確認原作(zuò)者,故僅標明轉載來源。