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

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

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

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

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

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

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

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