今天來聊一聊Modbus,先看看今天的主要內容(róng):
01 術語解讀(dú)
02 背景
03 協議原理
04 傳輸方式
05 Modbus RTU與Modbus ASCII有什麽區別
06 Modbus TCP及其注意(yì)點
07 功能碼作(zuò)用
08 Modbus協議安全分析(xī)
01 術語解(jiě)讀(dú)
校(xiào)驗碼:校驗碼通常是一組數字的最後一位,由前麵的數字通過某種運算得(dé)出,用以檢驗該組數據的正確(què)性。代碼作為數(shù)據在向計算機或其它設備進行輸(shū)入時,容易產(chǎn)生輸入錯誤,為了減少這種輸入錯誤,編碼專家發明了各種校驗檢錯方法(fǎ),並依據這些方(fāng)法設置了校(xiào)驗(yàn)碼。常用的校驗有:累加(jiā)和校驗SUM、字節異或校驗XOR、縱向冗餘校驗LRC、循環冗餘校驗CRC……
離散量輸入:主要用來讀取(qǔ)單個位的數(shù)據,如IO的(de)狀態;
線圈:開關輸出信號,主要用來寫入單個位的數據,與離散量構成組成(chéng)對位(wèi)的操作;
輸入寄存器:主要用來讀取16位,也就是兩個字節的數據;
保持寄存器:主要用來寫入(rù)16位的(de)數據(jù);
PLC:可編程邏輯控製器,是一(yī)種采(cǎi)用一(yī)類可編程的存儲器,用於其內部存儲程序和執行邏輯(jí)運算、順序控製、定時、計數與(yǔ)算(suàn)術操作等麵向(xiàng)用戶的(de)指令,並通過數字或模(mó)擬式輸入/輸出控製各種類型的機械或生產過程。
串口通信:隨著計算機係統的應用和(hé)微(wēi)機網絡的發(fā)展(zhǎn),通信功能越來越顯(xiǎn)得重要。這裏所說(shuō)的通信(xìn)是指計算(suàn)機與外界的信息交換。因此,通信既包括計算(suàn)機與外部(bù)設備之間,也包括計算機和計算機之間的信息交換。由於串行通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,並(bìng)且可以借助現成的電話網進行信息傳送(sòng),因此特別適合於遠距離傳輸。對於那些與計算機相(xiàng)距不遠的人-機交換(huàn)設備和串行存儲的外部設備如終端、打印機(jī)、邏輯分析(xī)儀、磁盤等,采用串行方式交換數據也很普遍。在實時控製和管理方麵,采用多台微機處理機(jī)組成分級分布控製係統(tǒng)中,各 CPU 之(zhī)間的通信一般都是串行方式。所以串(chuàn)行接口是微機應用係統常用的接口。許多外設和(hé)計算機按串行方式進行通信,這(zhè)裏所說的串行方式,是指外設與接口電路之間的(de)信(xìn)息傳送方式,實際上CPU 與接口之間仍按並行方式工作。
串口:串口是(shì)計算機上一種非常通用(yòng)設備通信的協議,不要與通用串行總線Universal Serial Bus(USB)混淆。大(dà)多數計算機包含兩個基於RS232的串口。串口同時也是儀(yí)器儀表設備通用的通信協議;很多GPIB兼容的設備也帶有RS-232口。同時,串(chuàn)口通信(xìn)協議也可以用於獲取遠(yuǎn)程采集設備的數據。
串口通信的概念非常(cháng)簡(jiǎn)單,串口按位(bit)發送和接收字節。盡管比按字節(byte)的並行通信要慢,但是串口可以在使用一根(gēn)線(xiàn)發送數據的(de)同時用另一根線接收數據。它很簡單並且能夠實現遠距(jù)離通信。比(bǐ)如IEEE488定義並行通行狀態時,規(guī)定設備線總常不得超過20米,並且任意兩個設備間的長度不得超過2米;而對於串(chuàn)口而言,長度可達1200米。
典型地,串口用於ASCII碼字符的傳輸。通信使用3根(gēn)線完成:地線、發送和接收。由於串口通信是異步的,端(duān)口能夠在一根線上發送數據(jù)同時在另一根(gēn)線上接收數據。其他線用於握手,但是不是(shì)必須的。串口通信最重要(yào)的參數是(shì)波特率、數據位、停(tíng)止位和奇偶校驗。對於兩個進行通行的端口,這些參數(shù)必須匹配:
a. 波特率:這是一(yī)個衡量通信速度的參數。它表示每秒鍾傳送的bit的個數。例如300波特表示每秒鍾發送300個bit。當我們提到(dào)時鍾周期時,我們就是指波特率。例如如果協(xié)議需要4800波特率,那(nà)麽時鍾是4800Hz。這意味(wèi)著串口通信在數據線上的采樣率為4800Hz。通常(cháng)電話線的波特率為14400,28800和36600。波特率可以遠遠大於這些值,但是波特率和距離成反比。高波特率常常用於(yú)放置的很近的儀器間的通信,典型的例子就是GPIB設備的通信(xìn)。
b. 數(shù)據位(wèi):這(zhè)是衡量通信中實際數據位的參數。當計算機發送一個信息包,實際的數(shù)據不(bú)會是8位的(de),標準的值是5、7和8位。如何設置(zhì)取決於你想傳送的信息。比如(rú),標準的ASCII碼是0~127(7位(wèi))。擴展的ASCII碼是0~255(8位)。如果數據(jù)使用簡單的(de)文本(標準 ASCII碼),那麽每個數據包使用7位數據。每個包(bāo)是(shì)指一個字節,包括開始/停止位,數據(jù)位和奇偶校驗位(wèi)。由於實際數據位取決於通信協議的選取,術語“包”指(zhǐ)任何通信的情況。
c. 停止位:用於表示單個包的最後一位。典型的值為1,1.5和2位。由(yóu)於數據是在傳輸線上定時的,並且每一個設備有其自己的時(shí)鍾,很可能在(zài)通信中兩(liǎng)台設(shè)備間出現了小(xiǎo)小的不同步。因此停止位不僅僅是表示傳輸的結(jié)束(shù),並且提供計算機校正時鍾同步的機會。適(shì)用於停止位的位(wèi)數越多,不同時鍾同步(bù)的容忍程(chéng)度越大,但是數據傳輸(shū)率(lǜ)同時也(yě)越慢。
d. 奇偶校(xiào)驗位:在(zài)串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對於偶和奇校驗的(de)情況,串(chuàn)口會設置校驗位(數據位後麵的一位),用一個值確保傳輸的數據有偶個或者奇個邏輯高位。例如,如果數據是011,那麽對於偶校(xiào)驗(yàn),校驗位為0,保證邏輯高的位數是偶數個。如果是奇(qí)校驗,校驗位(wèi)1,這樣就有3個邏輯高位。高位和低位不真(zhēn)正的檢查(chá)數(shù)據,簡單置位邏輯高或者邏輯低(dī)校驗。這樣使得接收設備能夠知道一(yī)個位的(de)狀態,有機會判斷是否有噪聲幹擾了通信或者是否傳(chuán)輸和接收數據是否不(bú)同步。
02 背景
早在1971年,Modicon公司(sī)首次推出(chū)了Modbus協議,ModbusRTU和Modbus ASCII誕生於此。後來施耐德電氣(SchneiderElectric)收購了Modicon公(gōng)司,並在1997年推出(chū)了ModbusTCP協議。2004年,中國國家標準委員會正式(shì)把Modbus作為了(le)國家標準,開啟了Modbus為(wéi)中國工業通信做貢獻的時代。
通過(guò)此協議,控製器相互之間(jiān)、控製(zhì)器經由網絡和其它設備之間可以通信。Modbus協議具有標準、開放,可以支持多種電氣接(jiē)口(kǒu),數據幀格式簡(jiǎn)單緊湊,數據(jù)傳輸量大、實時性好等特點,在工業控製係統中得到了廣(guǎng)泛的(de)應用,已經成(chéng)為(wéi)通用工業標準。深入(rù)分析Modbus協議實現原理和(hé)其安(ān)全性對提高工控係統(tǒng)安全性有著重要的現實意義。
ModbusRTU和ModbusASCII主要用於串(chuàn)行通信(xìn)領域,而ModbusTCP則常用於以太網通信。現在,Modbus已經成為工業領(lǐng)域(yù)通信協議標準,並且現在是工業電(diàn)子(zǐ)設備之間相當常用的連接方(fāng)式。
03 協(xié)議原理
Modbus使用一種簡單的MasterandSlave主從協議(客戶機/服務器協議(yì))進行通信。客戶機作為主站,向服務器發送請求;服務器(從(cóng)站)接到請求後,對請求進行分析(xī)並作出應答。其中使用的通信幀被稱為應用數據單元(Application Data Unit,ADU),它包括通(tōng)信地址段、功能代碼(mǎ)段、數據段和校驗段,如下(xià)圖:
一般(bān)使(shǐ)用上,監控係統(HMI)都為Master,PLC、電表、儀表等都為Slave,HMI係統一直PollingSlave的各種relayandregister最新數值,然後做顯示及各種邏輯計算(suàn)及控製調整等處理。
其中,功能代碼段和數(shù)據段組合稱為協議(yì)數據單元(Protocol Data Unit or Protocol Description Unit),PDU)。功能代碼段占用一個字節,取值範圍為1~255,其中(zhōng)128~255為(wéi)保留值,用於異常消息(xī)應答報文。1~127為功能代碼編號(hào),其中65~72和100~110為(wéi)用戶自定義編(biān)碼。
04 傳輸方式
Modbus 協議是一(yī)種應用層報文傳輸協議,包括ASCII、RTU、TCP三種報文類型(xíng),協議本身並沒(méi)有定義(yì)物理層,隻是定義了控製器能夠認識和使用的消息(xī)結構,而不管它們是經過何種網絡(luò)進行通信的。
Modbus 協議使用串口傳輸時可以(yǐ)選擇(zé)RTU或ASCII模式,並(bìng)規定了消息、數據(jù)結構、命令和應(yīng)答方式並需要對數據進行校驗。ASCII 模式采用LRC校驗,RTU模式(shì)采用16 位CRC校驗。通過(guò)以太網傳輸時使用TCP,這種模式不(bú)使用校驗,因為TCP協議是一個麵(miàn)向連接的可(kě)靠協議。
05 Modbus RTU與(yǔ)Modbus ASCII有什麽區別
Modbus是一種應用(yòng)層協議,它(tā)定義了與基礎網絡無關的數據單元(ADU),可以在以(yǐ)太網(TCP/IP)或串行(háng)鏈路上(RS232、RS485等)進行通信(以太網ADU和串行(háng)ADU略有不同)。在串行鏈路上,Modbus協議有兩種傳輸模式——ASCII模式和RTU模式。其(qí)中,ASCII是英文“American Standard Code for Information Interchange”的縮寫,中文翻譯為“美國國家信(xìn)息交換標準(zhǔn)編碼”;RTU是英文“ Remote Terminal Unit”的縮(suō)寫,中文翻譯為“遠程終端(duān)設備”。
首(shǒu)先,讓我(wǒ)們來看看Modbus的工作原理(lǐ)。
Modbus采用(yòng)主從(Master-Salve)通信模式(shì),僅有主設備(Master)能對傳輸進行(háng)初始化,從設備(Slave)根據主設備的請求進行應答。典型的主設備包括現(xiàn)場儀表和(hé)顯示麵板,典型的從設備為可編程邏輯控製器(PLC)。
在串(chuàn)行鏈(liàn)路(lù)的主從(cóng)通信中,Modbus主設備可以連接一個或N(最大為247)個從設備,主從(cóng)設備之間的通信包括單播模式(shì)和廣播模式。
在廣播模式中,Modbus主設備(bèi)可(kě)同時(shí)向多個從設備(bèi)發送請求(設備地址0用於廣(guǎng)播模式),從設備(bèi)對廣播請求不進行響應(yīng)。
在單播模式中,主設備發送請求(qiú)至某個特定的從(cóng)設備(每個Modbus從設備具有(yǒu)唯一地址),請求的(de)消息幀中會包含(hán)功能代碼和數(shù)據,比如功能代碼“01”用來讀取離散量線(xiàn)圈的狀(zhuàng)態。從設備接到請求後,進行(háng)應答並把消(xiāo)息反饋主設備。
在主從設備的通信中,可以使用ASCII模式(shì)或者RTU模式。在ASCII(AmericanStandard Code for Information Interchange)傳輸模式下,消(xiāo)息幀以英文冒號(hào)(“:”,ASCII3A Hex)開(kāi)始,以回車和換號(hào)(CRLF,ASCII 0D and 0A Hex)符號(hào)結束(shù),允許的傳輸的字符集為十六進製的0~9和A~F;網絡中的從設備監視傳輸通路上是否有英文冒號(“:”),如果有的話,就對消息幀進行解碼,查看消息中的地址是否與自己的(de)地址相同,如果相同的話,就接收其中的數據;如果不同的話(huà),則不予理會。
在ASCII模式下(xià),每個8位的字節(jiē)被(bèi)拆分成兩(liǎng)個ASCII字符(fú)進行發送,比如十六進製數0xAF ,會被(bèi)分解成ASCII字符“A”和“F”進行發送,發送的字符量比RTU增加一倍。ASCII模式的好處(chù)是允許(xǔ)兩個字符之間間隔的時間長達1s而不引發通信故(gù)障,該模式采用縱向冗餘校驗(Longitudinal Redundancy Check ,LRC)) 的(de)方法(fǎ)來檢驗錯誤,當控製器設為在Modbus 網絡上以RTU 模(mó)式通信,消息中的每個8Bit 字節都包含兩個4 Bit 的十六進(jìn)製字(zì)符,這種模式沒有開始和結束標(biāo)記。其優點是: 在同樣的(de)波特率下(xià),可傳送更(gèng)多的數(shù)據。
在RTU(RemoteTerminal Unit)模式下,每個字節可以傳輸兩個十六進製(zhì)字符,比如十六進製數0xAF,直接(jiē)以十六進製0xAF(二進製:10101111)進行(háng)發送,因此它的發送密度比ASCII模式高一倍;RTU模式采(cǎi)用循環冗餘校驗(CRC),下麵是對RTU模式的總結:
具體格式(shì)如下圖所示:
06 Modbus TCP及(jí)其注意點
6.1 主機和從機、服務端和客戶端
在modbus協議中:主機發送(sòng)modbus請求,從機根據請求(qiú)內容向主機返回響應。在modbus協議中,主機總是主動(dòng)方,從機總是被動方。
在網絡應用中:在網絡應用中存在客戶(hù)端和服務器端,客戶端(例如瀏覽器)發送請求到(dào)服務器,服務器向客(kè)戶端返回內容(例如HTML文本)。
在modbus tcp中:主機是客戶端,而從機(jī)是服務器端。千(qiān)萬不要以為服務器端重要,主機也重要,所以主機就是服務器端。
modbus TCP和modbus RTU基本相同,但是也存(cún)在一(yī)些區別:
a.從機地址變得不再重要,多數情況下忽略。從某種意義上說從機地址被(bèi)IP地址取代;
b.CRC校驗變得(dé)不(bú)再重要,甚至可以忽略(luè)。由於TCP數據包中已經存在校驗,為了(le)不重複造輪子,modbus TCP幹脆取(qǔ)消了CRC校驗。
TCP 模(mó)式是為了讓(ràng)Modbus 數據順利在以太網上傳輸產生(shēng)的,使用TCP502 端口。該協議物理層,數據鏈路層,網絡(luò)層,傳輸層都是基於TCP 協議,隻在應用層(céng),將Modbus 協議修改後封裝進去; 接收端將該TCP 數據包拆封後,重新獲得原始(shǐ)Modbus 幀,然(rán)後按照Modbus 協議規範進行解(jiě)析,並將返回的數(shù)據包重新封裝進TCP 協議中,返回到(dào)發送端。與(yǔ)串行鏈(liàn)路傳輸的數據(jù)格式不同,TCP 模式去除了附加地址和校驗,增加(jiā)了報文頭,其具體格式如(rú)圖4所(suǒ)示。
在modbus TCP中包含一個MBAP頭,該頭包含以下幾個部分(fèn):
區域 | 長度(dù) | 描述 | 客戶端 | 服務器 |
傳輸標誌(zhì) |
2字節 |
MODBUS 請求和響應(yīng)傳輸過程中序列號(hào) |
客戶端生成 |
應答時複製該值 |
協議標(biāo)誌(zhì) |
2字節(jiē) |
Modbus協議默認為0 |
客(kè)戶端生成 |
應答時複製該值 |
長度 |
2字節 |
剩餘(yú)部分的(de)長度 |
客戶端生成 |
應答時由服務器端生成 |
單元標誌 |
1字節 |
從機標誌(從機地址) |
客戶端(duān)生成 |
應答時複製該值 |
注意(yì):
a.傳輸(shū)標誌可(kě)理解為序列號,防止 MODBUS TCP通信錯位,例如後發生的響應先到了主機,而早發生(shēng)的響應後到主機;
b.單元標誌可理解為從機地址,此時已經不再重要。
modbus TCP可以理解(jiě)為發生(shēng)在TCP上的應用層協(xié)議,既然是TCP協議那麽一個完整的MODBUSTCP報(bào)文必然包括TCP首部,IP首部和Ethernet首部。
07 功能碼作(zuò)用
啟動Modbus事務處理的(de)客戶機創建Modbus應用數據單元。功(gōng)能碼(PDU中的)向服務器指示將(jiāng)執行哪種操作。
用一個字節編碼Modbus數據單元的功能碼域。有效範圍是十(shí)製製1-255(128-255為異(yì)常響應保留)。當從客戶機向服務器發(fā)送報文時,功能碼域通過服務器執行哪種操作。
從客戶機向(xiàng)服務(wù)器(qì)發送的報文數據域包括附加信息,服(fú)務器使(shǐ)用這個信息執行功能碼定義的(de)操作。這個域還(hái)包括離(lí)散項目和寄存(cún)器地(dì)址、處理項目的數量以及域(yù)中的實際數據字節數。
在某種請求中,數據域可以是不存(cún)在的,在此情況下服務(wù)器不需要任何附加信息(xī)。功能碼僅說明操作。
功能碼的類型:
功能碼主要分為有效功能碼、異常功能碼和錯誤功能碼(mǎ)。如果在一個正確接收Modbus ADU中,不出現與請求Modbus功能有關的差錯(cuò),那(nà)麽服務器至客戶機的響應數據會包含請求中的正常功能碼。如果出現與請求Modbus功能有關的差錯,那麽響應數據會包含一個異常碼和錯誤碼。
例如,客(kè)戶機能(néng)夠讀一組離散量輸出或輸入的開/關狀態,或者用戶能夠讀/寫(xiě)一組寄存器數(shù)據內容。當服務(wù)器對(duì)客(kè)戶機響應(yīng)時,它使用功能碼域來指示正(zhèng)常(無差錯)響應或出現某種(zhǒng)差錯(稱(chēng)為異常響應)。對於一個正常響應來說,服務器(qì)僅對原始功能碼響(xiǎng)應。
對於異常響應,服務器返回一個與(yǔ)客戶機等同的碼,設(shè)置該原始功能碼(mǎ)的最高有(yǒu)效(xiào)位為邏輯1,並加該異常碼(mǎ)後增加錯誤碼,以通(tōng)知客戶機異常原因。
有效功能碼:
有(yǒu)效功能碼(mǎ)有二(èr)十幾種,但是一般使(shǐ)用上都以1、2、3、4、5、6、15、16等八種最為(wéi)常(cháng)用,以及另外特殊使用的20、21兩種,此為General Reference Register,絕大部份的Modbus設(shè)備並不會(huì)提供此Register。於PLC上主要的控(kòng)製數據(jù)有下(xià)列四種型式。此八種功能碼就是處理這些控製資料,詳細說明如(rú)下各點:
控製數據四種型式:
DI:DigitalInput(數字輸入,離散輸入),一個地址一個數據(jù)位,用戶隻能讀取它(tā)的狀態,不能修改。以一個 bit表示 On/Off,用來記錄控製信號的狀態輸入,例如:開關,接觸點(diǎn),馬達(dá)運(yùn)轉,超限switch…等等。於PLC上被稱為Input relay、input coil等。
DO:DigitalOutput(數字輸出(chū),線圈輸(shū)出),一個地址一個(gè)數據位,用戶可以置位、複位,可以回讀狀態。以一個 bit表示(shì) On/Off,用來輸出控(kòng)製(zhì)信號,以激活或停(tíng)止馬達,警鈴(líng),燈光…等(děng)等。於PLC上被稱為Output relay、Output coil等。
AI:Analog Input(模擬輸(shū)入,輸入寄存器),一個地址16位數據,用戶隻能讀,不能(néng)修改,,以16 bits integer表示一個數(shù)值,用來記錄(lù)控製信(xìn)號的數值輸入,例如:溫(wēn)度、流量、料量、速度(dù)、轉速、文件板開度、液位、重量…等等。於PLC上被稱為(wéi)Input register。
AO:AnalogOutput(模擬輸出,保持寄存器),一個地址16位數(shù)據,用(yòng)戶可以寫,也可以回讀,以16 bits integer表示一個數值,用來輸出控製信號的數值,例如(rú):溫度、流量、速度、轉速、文件板(bǎn)開度、飼(sì)料量…等等設定值。於PLC上被稱(chēng)為Output register、Holding register。
08 Modbus協議安全分析(xī)
Modbus 協(xié)議是典型的工控網協議,研究其安全性對於加強工業控製(zhì)網絡的安全性有重要意義。一般來說,協議安全(quán)性問(wèn)題可以分為兩種,一種是協議自身的設(shè)計和描述引起的安全(quán)問題; 另一種是協議的不正確實現引起的安全(quán)問題(tí)。Modbus 協議也存在著這兩方麵的問題。
絕大多數工控協議在設計之初,僅僅考慮了功能實現、提高效率、提(tí)高可靠性等方麵,而沒考慮過安全性問題。Modbus 協議也不(bú)例外,盡管其已經成為事實上的(de)工業標準。從前麵原理分析可以看出其本身的(de)安全性問題是: 缺乏認證、授權、加密等安全(quán)防護機製和功能碼濫用問題。
(1)缺乏認證(zhèng)
認證的目的是(shì)保證(zhèng)收到的信息來自合法的用戶,未認證用戶向設備發送控製命令不會被(bèi)執行。在Modbus 協議通信過程中,沒有任何(hé)認證方麵的相(xiàng)關定義,攻擊者隻需要找到一個合法的地址就可以使用(yòng)功能碼就能(néng)建立一個Modbus 通信會話,從而擾(rǎo)亂整個或者部分控(kòng)製過程。
(2)缺乏授權
授權是保證不同的特權操作需要由擁(yōng)有不同權限的認證用戶來完成,這樣(yàng)可大大(dà)降低誤操作與內部(bù)攻擊的概(gài)率。目前,Modbus 協議沒有基於角色的訪問控製機製(zhì),也沒有對用戶(hù)分(fèn)類,沒有(yǒu)對用戶的權限進行劃分,這會導致任(rèn)意用戶可以執行任意功能(néng)。
(3)缺(quē)乏加密
加密可(kě)以保證(zhèng)通信過程中(zhōng)雙方(fāng)的(de)信息不被第三(sān)方非法獲取。Modbus 協議(yì)通信過程中,地址和命令全部采用明文傳輸,因此數據可以很容易的被攻擊者捕獲(huò)和解析,為攻擊(jī)者(zhě)提供便利。
(4)功能碼濫用(yòng)
功能碼是Modbus 協議中的一項重要內容,幾乎所有的通信都包含功能碼。目前,功(gōng)能(néng)碼濫用是導致Modbus 網絡異常的一個主(zhǔ)要因素。例如不合法報(bào)文長度,短周期的無用命令,不正確的報文長度,確認異常代碼延遲等都有可能導致拒絕服務攻擊。
雖然Modbus 協議獲得了廣泛的應(yīng)用,但是在實現(xiàn)具體的工業控(kòng)製係統時,開發者並不具備安全(quán)知識或者沒有意識到(dào)安全問題(tí)。這樣就導致了使用Modbus 協議的係統中可能存在各種(zhǒng)各樣的安全漏(lòu)洞。
(1)設計安全問題
Modbus 係統開發者重點關注(zhù)的是其功(gōng)能實現問題,安全問題在設(shè)計時很少被注意到。設計安全是指設計時充(chōng)分(fèn)考慮安全性,解決Modbus 係統可能出現(xiàn)的各(gè)種異常和非法操作等問題。比如在通信(xìn)過程中,某個節(jiē)點被惡意控製後發出非法數據,就(jiù)需要考慮這些數據(jù)的判別和處理問題。
(2)緩衝(chōng)區溢出(chū)漏洞
緩衝區溢出是指在向緩衝區內填充數據時超(chāo)過了緩衝區本身的(de)容量導致溢出的數據覆蓋在合法數據上,這是在軟件開發中最常見也是非常危險的漏洞,可以導(dǎo)致係統(tǒng)崩潰,或者被攻擊者(zhě)利用來控(kòng)製係統(tǒng)。
Modbus 係統開發者大多不具(jù)備安全開發知識,這樣就會產生很多的緩衝區溢出漏洞,一旦被惡意者利用會導致嚴重的後果。
(3)Modbus TCP 安全問題
目前,Modbus 協議已經(jīng)可以在(zài)通用計算機和通用操作係統上實現,運行於TCP /IP 之上以滿(mǎn)足發展需要。這(zhè)樣,TCP /IP 協議自身存在的安全問題不可避(bì)免(miǎn)地會(huì)影響到工控網(wǎng)絡安全。非法網絡數據獲取,中間(jiān)人,拒絕服務(wù), IP 欺騙(piàn),病毒木馬等在IP 互聯網中的常用攻擊手段都會影響Modbus 係統安全。
目前,Modbus 係統采取(qǔ)的安全(quán)防護措施普遍不足,這裏參考信息安全業內研究並結合工控係統(tǒng)自(zì)身的安全問題,提出了一些(xiē)安全建議,能(néng)夠有效地降(jiàng)低工業控製係(xì)統麵臨的威脅。
(1)從源頭(tóu)開始
工控網絡漏洞,很大一部分是其(qí)實(shí)現過程出現的漏洞。如果從源頭開始控製,從Modbus 係統的需(xū)求設計、開發實現、內部測試和部署等階段,全生命(mìng)周期的介入安全(quán)手段,融入安全設計、安全編碼(mǎ)以及安全測試等技術,可以極大地消除安全漏洞,降低整個Modbus 係統的(de)安全風險。
(2)異(yì)常行為檢測
異常行為代表著可能發生威脅,不管是有沒有(yǒu)攻擊(jī)者,因此開發(fā)針對Modbus 係統的專用異常行為檢測設備可以極大提高工控網絡的(de)安全性(xìng)。針對Modbus 係統,首先要(yào)分析其存在(zài)的各(gè)種(zhǒng)操作行(háng)為,依據“主體,地點,時間,訪問方式,操作,客體”等(děng)行為描述成一個六元組模型; 進而分析其行為是否屬於異常; 最終(zhōng)決定采取記(jì)錄或(huò)者報警等措施。
(3)安全審計
Modbus 的安全審計就是對協議數據(jù)進行深度(dù)解碼分析,記錄(lù)操作的時間、地點、操作者(zhě)和操作行為等關鍵信息,實現對Modbus 係統的安全審計日誌記錄和(hé)審計功能,從而提供安全事件爆發後的時候追查能力。
(4)使用網絡安全設備
使用入侵防禦和防火牆等網(wǎng)絡安(ān)全設備。防火牆是(shì)一個串行設備,通過設置,隻允許特定的地址訪問(wèn)服務端,禁止外部地址訪問Modbus 服務器,可以有效(xiào)的防止外部入侵; 入侵防禦設備可以分析Modbus協議的(de)具體操作內容(róng),有效地檢測並阻止來自內(nèi)部/外部的異常操作和(hé)各種滲透攻擊行為,對內網提供保護功能(néng)。
本文來源於網絡,版權歸原(yuán)作者所有,但因轉載(zǎi)眾(zhòng)多,無法確認原作者,故僅標明轉載來源。
上(shàng)一篇:施耐德電氣開(kāi)放自動化平台初體(tǐ)驗(4)
下(xià)一篇:施耐德電氣開放自(zì)動(dòng)化平台初體驗(3)