◆竇亞楠 孟慶垚 丁琪
(曲阜師范大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院 山東 273100)
隨著近年德國的“工業(yè)4.0”、美國的“再工業(yè)化”風(fēng)潮、“中國制造2025”[1]等一批全球化重大國家工業(yè)發(fā)展戰(zhàn)略不斷推出,同時,我國云計算、大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等一系列全球化的新一代應(yīng)用信息電子技術(shù)蓬勃發(fā)展,與工業(yè)制造過程科學(xué)和應(yīng)用電子技術(shù)的發(fā)展深度緊密結(jié)合,工業(yè)生產(chǎn)過程控制管理體系從原始的工業(yè)封閉獨立走向高度開放、由傳統(tǒng)的單機(jī)控制走向移動互聯(lián)、由工業(yè)自動化走向工業(yè)智能化。在大量工業(yè)企業(yè)正在快速發(fā)展的時期,也產(chǎn)生了許多安全風(fēng)險問題,但是工業(yè)控制系統(tǒng)的安全問題與國家的系統(tǒng)安全以及社會穩(wěn)定密不可分。在工控的研究范圍內(nèi),為了研究探索工控安全問題,必須了解工控協(xié)議的具體內(nèi)容。
為了探究網(wǎng)絡(luò)安全問題,本文通過數(shù)據(jù)包的抓取以及數(shù)據(jù)包具體內(nèi)容的分析對Modbus 協(xié)議的安全性進(jìn)行研究。
Modbus 協(xié)議是邏輯通訊控制協(xié)議,它是一種應(yīng)用于工廠生產(chǎn)的可編程邏輯控制器,也就是PLC,為設(shè)備之間的相互通信提供了一種通用語言,即信息的傳輸與交換,例如Modbus 協(xié)議可以將同一網(wǎng)絡(luò)傳感器所測量的溫度和濕度等數(shù)據(jù)傳送給工控機(jī)或者PLC。
Modbus 協(xié)議是一個開放的協(xié)議,可以通過多種介質(zhì)進(jìn)行通信,例如串行RS-232、RS-485、RS-422 以及Ethernet。莫迪康公司發(fā)布了基于主從架構(gòu)多點網(wǎng)絡(luò)的Modbus 通信接口,通過發(fā)送請求和讀取應(yīng)答的方式來實現(xiàn)主從設(shè)備之間的通信[2]。Modbus 設(shè)備使用主從結(jié)構(gòu)進(jìn)行通信,即只能有一個主設(shè)備可以發(fā)起請求,其他設(shè)備通過將請求的數(shù)據(jù)提供給主站或執(zhí)行請求的操作方式來做出響應(yīng)。從站可以是任何外圍設(shè)備,例如閥門、網(wǎng)絡(luò)驅(qū)動器或其他測量設(shè)備,它們處理信息并且用Modbus 協(xié)議將其響應(yīng)消息發(fā)送給主站對應(yīng)的控制器,主站可以處理單個從站的數(shù)據(jù),也可以向所有的從站發(fā)起請求,從站可以分別對請求進(jìn)行尋址,并進(jìn)行響應(yīng),從站不會自行發(fā)出請求,從站之間也不能進(jìn)行通信,而是僅僅響應(yīng)從主站發(fā)出的請求,主站的請求包括一個從站地址、一個功能碼以及一個錯誤校驗字段。
Modbus 協(xié)議的通信格式包括數(shù)據(jù)長度、校驗位、停止位以及波特率,數(shù)據(jù)長度是固定的,其中Modbus 協(xié)議通信格式中的校驗位、停止位以及波特率都是可以選擇變化的。
Modbus 協(xié)議的數(shù)據(jù)格式如圖1所示:
圖1 Modbus 協(xié)議數(shù)據(jù)格式
2.2.1 常用功能碼及其含義
Modbus 協(xié)議數(shù)據(jù)格式的常見功能碼有H01、H02、H03、H04、H05、H06、H08、H0F、H10 等,其功能含義如圖2所示:
圖2 常用功能碼
在串行通信中,Modbus 協(xié)議支持兩種通信模式:ASCII 模式和RTU 模式。ASCII 模式的優(yōu)點之一是它可以允許字符之間的時間間隔長達(dá)1s,也就是它不會導(dǎo)致字符產(chǎn)生任何錯誤,而RTU 模式的優(yōu)點則是在相同的波特率下其所需要傳輸?shù)淖址拿芏缺華SCII 模式高,需要連續(xù)不斷地傳輸每個數(shù)據(jù)信息。
2.3.1 ASCII 通信模式的基本內(nèi)容
(1)ASCII 模式的通信格式
若是使用Modbus 協(xié)議,必須按照如下要求進(jìn)行,通信格式要求是不可更改的。
圖3 ASCII 模式通信格式要求
(2)ASCII 模式的數(shù)據(jù)格式
ASCII 模式數(shù)據(jù)格式要求如圖4所示,而且信息編碼都是十六進(jìn)制字符的。
圖4 ASCII 模式數(shù)據(jù)格式要求
2.3.2 RTU 模式的基本內(nèi)容
(1)RTU 模式通信格式
RTU 模式通信格式要求如圖5所示:
圖5 RTU 模式通信格式要求
(2)RTU 模式數(shù)據(jù)格式
RTU 模式數(shù)據(jù)要求如圖6所示,信息編碼都是十六進(jìn)制字符的。
圖6 RTU 模式數(shù)據(jù)格式要求
當(dāng)一個主站向從站發(fā)送信息時,全部通信由兩部分共同組成:一部分就是查詢,又叫做請求,即主站向從站的數(shù)據(jù)信息的發(fā)送,另一部分是回傳,又叫作響應(yīng),即從站對主站的數(shù)據(jù)信息的應(yīng)答。應(yīng)答的目的是告訴主站是否有錯誤,以及若主站向從站要求一些資料或者某種操作,則從站需要回答主站的相關(guān)通信請求。錯誤檢測是通過查詢主站的變化來指示是否有錯誤發(fā)生。當(dāng)沒有錯誤發(fā)生且從站正常應(yīng)答時,從站對相同的功能碼進(jìn)行回應(yīng),而對于有錯誤或者異常的應(yīng)答,從站應(yīng)答時,功能碼的最高位b7 將需要置為1[3]。與此同時,在數(shù)據(jù)格式的數(shù)據(jù)區(qū)中存入錯誤編碼,主站還需要知道通信過程中發(fā)生了哪些錯誤。
Modbus 協(xié)議作為一個非常典型的工業(yè)控制網(wǎng)絡(luò)協(xié)議,研究它的安全性對提高我國工業(yè)控制網(wǎng)絡(luò)的安全性具有十分重要的意義。一般而言,協(xié)議的安全性問題大致可以劃分為兩種,一種是由于協(xié)議自身的設(shè)計與描述而引起的安全問題;另一種是由于協(xié)議的錯誤實現(xiàn)而造成的安全事故。Modbus 協(xié)議也存在著這兩個基本的問題[4]。因此,本文通過數(shù)據(jù)包的抓取以及數(shù)據(jù)包具體內(nèi)容的分析對Modbus 協(xié)議的安全性進(jìn)行研究。
在PC-1 中安裝主站設(shè)備仿真軟件Modbus Poll,把IP Address 修改為PC-2 的IP 的地址192.168.1.108,選擇502 端口,Connect Timeout為3000ms,Response Timeout 為1000ms 以及Delay Between Polls 為20ms。
在PC-2 中安裝從站設(shè)備仿真軟件Modbus Slave,把IP Address修改為PC-1 的IP 的地址192.168.1.109,選擇502 端口。
當(dāng)Modbus Poll 和Modbus Slave 互連進(jìn)行數(shù)據(jù)通訊之后,即Tx現(xiàn)在傳輸?shù)木褪菙?shù)據(jù)。通過模仿集控室向PLC 發(fā)送一個指令,選擇指令里面其中一個比如寄存器,在寄存器中寫一些功能代碼,功能代碼中可以代入值,即在ModbusPoll 主界面點擊菜單中的Funtions 選擇Write Registers,雙擊選擇其中一個功能代碼,修改其數(shù)值Value為11,然后點擊發(fā)送。Modbus Poll 和Modbus Slave 的寄存器子窗口結(jié)果變化分別如圖7所示。
圖7 寄存器子窗口數(shù)值變化
在Wireshark 的面板中可以直接點擊查看并得到每次捕獲的文件中的所有數(shù)據(jù)包以及數(shù)據(jù)包的具體內(nèi)容,在Packet Details 面板中可以直接點擊查看捕獲到的Modbus 數(shù)據(jù)包的具體內(nèi)容,如圖8所示。Register 9(UINT16)的數(shù)值被改為11。
圖8 Wireshark 捕獲數(shù)據(jù)包的具體內(nèi)容
3.3.1 協(xié)議存在的問題及改進(jìn)
在基于Modbus 協(xié)議通信過程中,攻擊者利用一個恰當(dāng)?shù)腎P 地址就可以直接使用功能碼,就能建立一個基于Modbus 通信的會話,在上述實驗中若進(jìn)行MITM 攻擊,即作為中間人進(jìn)行攔截,對寄存器中的值進(jìn)行篡改,由于Modbus 協(xié)議沒有合法用戶的身份驗證,基于IP 層通過IP 地址做一個芯片把功能碼攔截下來,攔截下來之后便可以篡改數(shù)據(jù),寄存器里面的數(shù)值被改變,導(dǎo)致PLC 接受錯誤的指令,設(shè)備便會被攻擊者控制,發(fā)生災(zāi)難性的安全事故。
如今,Modbus 協(xié)議已經(jīng)被廣泛應(yīng)用于各種通用平板電腦與用戶設(shè)計的移動操作系統(tǒng)中,在 TCP/IP 之上運行來實現(xiàn)發(fā)展需求。這樣,TCP/IP 協(xié)議自身存在的安全問題不可避免地會影響到工控網(wǎng)絡(luò)安全[5]。因此,需要對Modbus 協(xié)議的安全問題進(jìn)行深入研究。
工業(yè)設(shè)備與傳統(tǒng)IP 設(shè)備不同,工業(yè)設(shè)備是持續(xù)進(jìn)行工作的,若大量的工業(yè)設(shè)備停止進(jìn)行安全改造,將是一個巨大的經(jīng)濟(jì)損失。因此,在基于經(jīng)濟(jì)效益和設(shè)備的特點等多種因素的考慮下,Modbus 協(xié)議中安全問題的研究重點應(yīng)注重其外部的完善。在主站設(shè)備與從站設(shè)備進(jìn)行通信時增加合法用戶身份認(rèn)證以及對傳輸數(shù)據(jù)進(jìn)行加密處理,為通信過程以及發(fā)送數(shù)據(jù)提供保護(hù),同時提供系統(tǒng)安全檢測設(shè)備,當(dāng)異常行為發(fā)生時能夠?qū)ζ溥M(jìn)行分析,若異常行為能夠?qū)ο到y(tǒng)產(chǎn)生威脅,安全檢測設(shè)備可進(jìn)一步進(jìn)行攔截或者對系統(tǒng)管理員發(fā)出危險警告。
通過對Modbus 協(xié)議基本內(nèi)容的了解,Modbus 協(xié)議具有在通信過程中效率高、實現(xiàn)功能穩(wěn)定以及可靠性強等優(yōu)點,Modbus 協(xié)議是過程自動化和Scada 領(lǐng)域,也就是監(jiān)控與數(shù)據(jù)采集領(lǐng)域迄今為止最早的、最受歡迎的自動化協(xié)議。如今,Modbus 協(xié)議已被運用到一系列領(lǐng)域,但是其安全問題并沒有被社會廣泛關(guān)注,Modbus 協(xié)議的缺點和脆弱性與工控網(wǎng)絡(luò)安全問題息息相關(guān),比如MITM 即中間人攻擊,通過篡改數(shù)據(jù)引起工控網(wǎng)絡(luò)安全事故。Modbus 協(xié)議存在缺少合法用戶的身份認(rèn)證、授權(quán)對象不明確、無加密機(jī)制等一系列安全隱患問題,因此,需要通過數(shù)字認(rèn)證實現(xiàn)合法用戶的身份認(rèn)證、明確授權(quán)對象、通信會話進(jìn)行加密等方法解決這些網(wǎng)絡(luò)安全隱患問題。