◆竇亞楠 孟慶垚 丁琪
(曲阜師范大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院 山東 273100)
隨著近年德國(guó)的“工業(yè)4.0”、美國(guó)的“再工業(yè)化”風(fēng)潮、“中國(guó)制造2025”[1]等一批全球化重大國(guó)家工業(yè)發(fā)展戰(zhàn)略不斷推出,同時(shí),我國(guó)云計(jì)算、大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等一系列全球化的新一代應(yīng)用信息電子技術(shù)蓬勃發(fā)展,與工業(yè)制造過程科學(xué)和應(yīng)用電子技術(shù)的發(fā)展深度緊密結(jié)合,工業(yè)生產(chǎn)過程控制管理體系從原始的工業(yè)封閉獨(dú)立走向高度開放、由傳統(tǒng)的單機(jī)控制走向移動(dòng)互聯(lián)、由工業(yè)自動(dòng)化走向工業(yè)智能化。在大量工業(yè)企業(yè)正在快速發(fā)展的時(shí)期,也產(chǎn)生了許多安全風(fēng)險(xiǎn)問題,但是工業(yè)控制系統(tǒng)的安全問題與國(guó)家的系統(tǒng)安全以及社會(huì)穩(wěn)定密不可分。在工控的研究范圍內(nèi),為了研究探索工控安全問題,必須了解工控協(xié)議的具體內(nèi)容。
為了探究網(wǎng)絡(luò)安全問題,本文通過數(shù)據(jù)包的抓取以及數(shù)據(jù)包具體內(nèi)容的分析對(duì)Modbus 協(xié)議的安全性進(jìn)行研究。
Modbus 協(xié)議是邏輯通訊控制協(xié)議,它是一種應(yīng)用于工廠生產(chǎn)的可編程邏輯控制器,也就是PLC,為設(shè)備之間的相互通信提供了一種通用語言,即信息的傳輸與交換,例如Modbus 協(xié)議可以將同一網(wǎng)絡(luò)傳感器所測(cè)量的溫度和濕度等數(shù)據(jù)傳送給工控機(jī)或者PLC。
Modbus 協(xié)議是一個(gè)開放的協(xié)議,可以通過多種介質(zhì)進(jìn)行通信,例如串行RS-232、RS-485、RS-422 以及Ethernet。莫迪康公司發(fā)布了基于主從架構(gòu)多點(diǎn)網(wǎng)絡(luò)的Modbus 通信接口,通過發(fā)送請(qǐng)求和讀取應(yīng)答的方式來實(shí)現(xiàn)主從設(shè)備之間的通信[2]。Modbus 設(shè)備使用主從結(jié)構(gòu)進(jìn)行通信,即只能有一個(gè)主設(shè)備可以發(fā)起請(qǐng)求,其他設(shè)備通過將請(qǐng)求的數(shù)據(jù)提供給主站或執(zhí)行請(qǐng)求的操作方式來做出響應(yīng)。從站可以是任何外圍設(shè)備,例如閥門、網(wǎng)絡(luò)驅(qū)動(dòng)器或其他測(cè)量設(shè)備,它們處理信息并且用Modbus 協(xié)議將其響應(yīng)消息發(fā)送給主站對(duì)應(yīng)的控制器,主站可以處理單個(gè)從站的數(shù)據(jù),也可以向所有的從站發(fā)起請(qǐng)求,從站可以分別對(duì)請(qǐng)求進(jìn)行尋址,并進(jìn)行響應(yīng),從站不會(huì)自行發(fā)出請(qǐng)求,從站之間也不能進(jìn)行通信,而是僅僅響應(yīng)從主站發(fā)出的請(qǐng)求,主站的請(qǐng)求包括一個(gè)從站地址、一個(gè)功能碼以及一個(gè)錯(cuò)誤校驗(yàn)字段。
Modbus 協(xié)議的通信格式包括數(shù)據(jù)長(zhǎng)度、校驗(yàn)位、停止位以及波特率,數(shù)據(jù)長(zhǎng)度是固定的,其中Modbus 協(xié)議通信格式中的校驗(yàn)位、停止位以及波特率都是可以選擇變化的。
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)點(diǎn)之一是它可以允許字符之間的時(shí)間間隔長(zhǎng)達(dá)1s,也就是它不會(huì)導(dǎo)致字符產(chǎn)生任何錯(cuò)誤,而RTU 模式的優(yōu)點(diǎn)則是在相同的波特率下其所需要傳輸?shù)淖址拿芏缺華SCII 模式高,需要連續(xù)不斷地傳輸每個(gè)數(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)一個(gè)主站向從站發(fā)送信息時(shí),全部通信由兩部分共同組成:一部分就是查詢,又叫做請(qǐng)求,即主站向從站的數(shù)據(jù)信息的發(fā)送,另一部分是回傳,又叫作響應(yīng),即從站對(duì)主站的數(shù)據(jù)信息的應(yīng)答。應(yīng)答的目的是告訴主站是否有錯(cuò)誤,以及若主站向從站要求一些資料或者某種操作,則從站需要回答主站的相關(guān)通信請(qǐng)求。錯(cuò)誤檢測(cè)是通過查詢主站的變化來指示是否有錯(cuò)誤發(fā)生。當(dāng)沒有錯(cuò)誤發(fā)生且從站正常應(yīng)答時(shí),從站對(duì)相同的功能碼進(jìn)行回應(yīng),而對(duì)于有錯(cuò)誤或者異常的應(yīng)答,從站應(yīng)答時(shí),功能碼的最高位b7 將需要置為1[3]。與此同時(shí),在數(shù)據(jù)格式的數(shù)據(jù)區(qū)中存入錯(cuò)誤編碼,主站還需要知道通信過程中發(fā)生了哪些錯(cuò)誤。
Modbus 協(xié)議作為一個(gè)非常典型的工業(yè)控制網(wǎng)絡(luò)協(xié)議,研究它的安全性對(duì)提高我國(guó)工業(yè)控制網(wǎng)絡(luò)的安全性具有十分重要的意義。一般而言,協(xié)議的安全性問題大致可以劃分為兩種,一種是由于協(xié)議自身的設(shè)計(jì)與描述而引起的安全問題;另一種是由于協(xié)議的錯(cuò)誤實(shí)現(xiàn)而造成的安全事故。Modbus 協(xié)議也存在著這兩個(gè)基本的問題[4]。因此,本文通過數(shù)據(jù)包的抓取以及數(shù)據(jù)包具體內(nèi)容的分析對(duì)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ā)送一個(gè)指令,選擇指令里面其中一個(gè)比如寄存器,在寄存器中寫一些功能代碼,功能代碼中可以代入值,即在ModbusPoll 主界面點(diǎn)擊菜單中的Funtions 選擇Write Registers,雙擊選擇其中一個(gè)功能代碼,修改其數(shù)值Value為11,然后點(diǎn)擊發(fā)送。Modbus Poll 和Modbus Slave 的寄存器子窗口結(jié)果變化分別如圖7所示。

圖7 寄存器子窗口數(shù)值變化
在Wireshark 的面板中可以直接點(diǎn)擊查看并得到每次捕獲的文件中的所有數(shù)據(jù)包以及數(shù)據(jù)包的具體內(nèi)容,在Packet Details 面板中可以直接點(diǎn)擊查看捕獲到的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é)議通信過程中,攻擊者利用一個(gè)恰當(dāng)?shù)腎P 地址就可以直接使用功能碼,就能建立一個(gè)基于Modbus 通信的會(huì)話,在上述實(shí)驗(yàn)中若進(jìn)行MITM 攻擊,即作為中間人進(jìn)行攔截,對(duì)寄存器中的值進(jìn)行篡改,由于Modbus 協(xié)議沒有合法用戶的身份驗(yàn)證,基于IP 層通過IP 地址做一個(gè)芯片把功能碼攔截下來,攔截下來之后便可以篡改數(shù)據(jù),寄存器里面的數(shù)值被改變,導(dǎo)致PLC 接受錯(cuò)誤的指令,設(shè)備便會(huì)被攻擊者控制,發(fā)生災(zāi)難性的安全事故。
如今,Modbus 協(xié)議已經(jīng)被廣泛應(yīng)用于各種通用平板電腦與用戶設(shè)計(jì)的移動(dòng)操作系統(tǒng)中,在 TCP/IP 之上運(yùn)行來實(shí)現(xiàn)發(fā)展需求。這樣,TCP/IP 協(xié)議自身存在的安全問題不可避免地會(huì)影響到工控網(wǎng)絡(luò)安全[5]。因此,需要對(duì)Modbus 協(xié)議的安全問題進(jìn)行深入研究。
工業(yè)設(shè)備與傳統(tǒng)IP 設(shè)備不同,工業(yè)設(shè)備是持續(xù)進(jìn)行工作的,若大量的工業(yè)設(shè)備停止進(jìn)行安全改造,將是一個(gè)巨大的經(jīng)濟(jì)損失。因此,在基于經(jīng)濟(jì)效益和設(shè)備的特點(diǎn)等多種因素的考慮下,Modbus 協(xié)議中安全問題的研究重點(diǎn)應(yīng)注重其外部的完善。在主站設(shè)備與從站設(shè)備進(jìn)行通信時(shí)增加合法用戶身份認(rèn)證以及對(duì)傳輸數(shù)據(jù)進(jìn)行加密處理,為通信過程以及發(fā)送數(shù)據(jù)提供保護(hù),同時(shí)提供系統(tǒng)安全檢測(cè)設(shè)備,當(dāng)異常行為發(fā)生時(shí)能夠?qū)ζ溥M(jìn)行分析,若異常行為能夠?qū)ο到y(tǒng)產(chǎn)生威脅,安全檢測(cè)設(shè)備可進(jìn)一步進(jìn)行攔截或者對(duì)系統(tǒng)管理員發(fā)出危險(xiǎn)警告。
通過對(duì)Modbus 協(xié)議基本內(nèi)容的了解,Modbus 協(xié)議具有在通信過程中效率高、實(shí)現(xiàn)功能穩(wěn)定以及可靠性強(qiáng)等優(yōu)點(diǎn),Modbus 協(xié)議是過程自動(dòng)化和Scada 領(lǐng)域,也就是監(jiān)控與數(shù)據(jù)采集領(lǐng)域迄今為止最早的、最受歡迎的自動(dòng)化協(xié)議。如今,Modbus 協(xié)議已被運(yùn)用到一系列領(lǐng)域,但是其安全問題并沒有被社會(huì)廣泛關(guān)注,Modbus 協(xié)議的缺點(diǎn)和脆弱性與工控網(wǎng)絡(luò)安全問題息息相關(guān),比如MITM 即中間人攻擊,通過篡改數(shù)據(jù)引起工控網(wǎng)絡(luò)安全事故。Modbus 協(xié)議存在缺少合法用戶的身份認(rèn)證、授權(quán)對(duì)象不明確、無加密機(jī)制等一系列安全隱患問題,因此,需要通過數(shù)字認(rèn)證實(shí)現(xiàn)合法用戶的身份認(rèn)證、明確授權(quán)對(duì)象、通信會(huì)話進(jìn)行加密等方法解決這些網(wǎng)絡(luò)安全隱患問題。