羅 旋 李永忠
(江蘇科技大學(xué)計(jì)算機(jī)學(xué)院,鎮(zhèn)江,212003)
針對(duì)Modbus TCP協(xié)議存在的安全問題,不少學(xué)者做了相關(guān)研究,如高棟梁[1]以netfilter為框架,設(shè)計(jì)了一個(gè)Modbus TCP協(xié)議網(wǎng)關(guān)防火墻;Shang等[2]基于Linux平臺(tái),使用iptable工具設(shè)計(jì)了一個(gè)工業(yè)防火墻。但是二者并未對(duì)傳輸數(shù)據(jù)做加密處理,不能保證數(shù)據(jù)的機(jī)密性,其次無法防止重放攻擊。尚文利等[3]提出了一種基于統(tǒng)計(jì)分析的日志規(guī)則自學(xué)習(xí)算法,動(dòng)態(tài)生成并更新規(guī)則;呂雪峰等[4]利用snort設(shè)計(jì)了基于協(xié)議缺陷和系統(tǒng)狀態(tài)的檢測(cè)規(guī)則,當(dāng)測(cè)量值匹配規(guī)則時(shí),觸發(fā)告警。這二者提出的方法對(duì)規(guī)則精度的設(shè)定具有極高的要求,一旦精度設(shè)置過大或過小,都會(huì)嚴(yán)重影響檢測(cè)效果。Fovino等[5]通過添加哈希鏈字段并作簽名的方法實(shí)現(xiàn)了數(shù)據(jù)的完整性與可認(rèn)證性,但仍存在功能碼的濫用問題。
針對(duì)上述文獻(xiàn)中存在的問題,本文基于功能碼管理、數(shù)據(jù)傳輸以及可行性等問題對(duì)Modbus協(xié)議作了深入研究。以原Modbus協(xié)議為基礎(chǔ),設(shè)計(jì)了一種安全的工控系統(tǒng)通信協(xié)議——Modbus-S協(xié)議。該協(xié)議可以實(shí)現(xiàn)通信雙方的雙向認(rèn)證,同時(shí)保證數(shù)據(jù)的完整性以及唯一性。該協(xié)議對(duì)關(guān)鍵數(shù)據(jù)字段進(jìn)行加密,同時(shí)還可對(duì)功能碼進(jìn)行管理,從而全面提升工控通信的安全。
Modbus TCP協(xié)議工作在TCP/IP模型的應(yīng)用層,采用主從通訊模式,Modbus的主站可以與從站采用一對(duì)一或多對(duì)多方式進(jìn)行通訊,其報(bào)文格式[6]如圖1所示。
圖1 Modbus TCP的報(bào)文格式Fig.1 Message format for Modbus TCP
Modbus TCP協(xié)議由Modbus協(xié)議與TCP/IP融合而成,不僅未能解決原Modbus協(xié)議設(shè)計(jì)存在的安全隱患,甚至還引入了TCP/IP協(xié)議的安全缺陷[7],如:
(1)缺乏認(rèn)證機(jī)制[8]。任意客戶端只要與服務(wù)器端網(wǎng)絡(luò)互通,并可對(duì)服務(wù)器端發(fā)送指令。攻擊者只需接入網(wǎng)絡(luò)中,便可對(duì)服務(wù)器發(fā)送惡意指令。
(2)無權(quán)限管理[9]。所有用戶均擁有相同權(quán)限,可執(zhí)行任意指令,如誤操作發(fā)送了重啟或關(guān)機(jī)等高危命令,服務(wù)器端仍能正常響應(yīng)。
(3)數(shù)據(jù)篡改。攻擊者可以通過截獲數(shù)據(jù)包,并篡改相應(yīng)字段,從而實(shí)現(xiàn)網(wǎng)絡(luò)攻擊。
(4)數(shù)據(jù)明文傳輸。Modbus TCP協(xié)議以明文方式傳輸數(shù)據(jù),一些敏感信息很容易被攻擊者獲取,攻擊者可以通過收集相關(guān)信息為將來攻擊系統(tǒng)作準(zhǔn)備[10]。
(5)重放攻擊。Modbus TCP缺乏防重放機(jī)制,攻擊者可以反復(fù)發(fā)送截獲的數(shù)據(jù)包,從而破壞系統(tǒng)的穩(wěn)定性。
Modbus-S協(xié)議以原Modbus TCP協(xié)議為基礎(chǔ),通過添加相應(yīng)字段,實(shí)現(xiàn)工控系統(tǒng)的通信安全。其協(xié)議格式如圖2所示。
通過利用哈希算法的單向性原理實(shí)現(xiàn)數(shù)據(jù)同步,其實(shí)現(xiàn)原理如下所示:
(1)首先取兩個(gè)隨機(jī)數(shù)依次作為種子ai,1和安全因子bi,每一對(duì)通信對(duì)象都擁有對(duì)應(yīng)的種子與安全因子,i為其編號(hào)。Vi,1為(ai,1+bi)進(jìn)行哈希計(jì)算的值,F(xiàn)(x)的值則為x的首個(gè)字節(jié)數(shù)據(jù),其作為同步標(biāo)識(shí)字段Syni,1的值。
圖2 Modbus-S協(xié)議格式Fig.2 Modbus-S protocol format
(2)若同步標(biāo)識(shí)匹配成功后,則將當(dāng)前哈希值與安全因子進(jìn)行異或運(yùn)算,然后求其哈希值,得到Vi,2,同時(shí)取其首字節(jié)作為Syni,2。
(3)為防止攻擊者發(fā)送具有相同同步標(biāo)識(shí)的數(shù)據(jù)包,破壞同步性,需要重復(fù)步驟(2)操作以確保每次在網(wǎng)絡(luò)中傳輸?shù)耐綐?biāo)識(shí)均不相同。得到Vi,3和Syni,3,將Syni,3作為下次發(fā)送的同步標(biāo)識(shí)碼。
(4)使用相同方法得到每次通信的同步標(biāo)識(shí)碼。
通信雙方通過匹配同步標(biāo)識(shí)碼,確定數(shù)據(jù)的唯一性。由于哈希算法的單向性,攻擊者截獲數(shù)據(jù)包,無法構(gòu)造下一次發(fā)送的同步標(biāo)識(shí)碼。同時(shí)有安全因子的加入,以及數(shù)據(jù)包中不含有完整的哈希值,這也極大地提升了同步標(biāo)識(shí)的安全性。
通過設(shè)定“白名單”過濾規(guī)則實(shí)現(xiàn)對(duì)功能碼的有效管理,其規(guī)則模型[11]如圖3所示。
“白名單”過濾規(guī)則以Level,IP地址、設(shè)備ID以及功能碼作為過濾對(duì)象。Level字段的值用于進(jìn)行角色劃分,如root,admin和monitor。root權(quán)限最高,可執(zhí)行任意指令;admin的權(quán)限次于root,只擁有線圈與寄存器值的讀寫權(quán)限;monitor的權(quán)限最低,只可監(jiān)視線圈或寄存器狀態(tài)。多個(gè)用戶也可以設(shè)置相同的權(quán)限等級(jí),另外通過綁定MAC地址可以防止ARP攻擊,提升網(wǎng)絡(luò)的安全性。采用結(jié)構(gòu)體數(shù)組方式存儲(chǔ)“白名單”列表。每一條“白名單”規(guī)則對(duì)應(yīng)結(jié)構(gòu)體數(shù)組中的一個(gè)結(jié)構(gòu)體,其參數(shù)由用戶事先設(shè)定。
圖3 “白名單”規(guī)則模型Fig.3 Rule model of"white list"
Modbus-S協(xié)議系統(tǒng)通過自己開發(fā)的一對(duì)通信軟件Modbus-S client/server實(shí)現(xiàn)數(shù)據(jù)的安全通信,以負(fù)責(zé)Modbus TCP與Modbus-S之間的協(xié)議轉(zhuǎn)換,其實(shí)現(xiàn)原理如圖4所示。
圖4 Modbus-S協(xié)議系統(tǒng)實(shí)現(xiàn)原理Fig.4 Implementation principle of Modbus-S protocol system
Modbus-S協(xié)議的數(shù)據(jù)處理由Modbus-S client與Modbus-S server實(shí)現(xiàn),其處理過程為:
(1)Modbus client發(fā)送Modbus請(qǐng)求包(Mreq);
(2)Modbus-S client接收到 Mreq,按照式(5,6)構(gòu)造 Modbus-S請(qǐng)求包 C,并發(fā)送給 Modbus-S server端,其中各字段含義如下所示。
Syn:同步標(biāo)識(shí);Level:權(quán)限等級(jí);TID:傳輸標(biāo)識(shí);PID:協(xié)議標(biāo)識(shí);L:長(zhǎng)度;UID:?jiǎn)卧獦?biāo)識(shí);Lt:加密后的 PDU總長(zhǎng)度;En:對(duì)稱密鑰;Pri:私鑰。
(3)Modbus-S server接收到請(qǐng)求包C后,首先計(jì)算本地的同步標(biāo)識(shí)碼,將其與請(qǐng)求包中的同步標(biāo)識(shí)碼進(jìn)行匹配,若匹配成功則進(jìn)行簽名認(rèn)證,其次再進(jìn)行“白名單”粗過濾,即匹配Level,IP與設(shè)備ID字段的值。然后再對(duì)PDU進(jìn)行解密,最后進(jìn)行“白名單”細(xì)過濾,即匹配Level,IP,設(shè)備ID與功能碼的值。返回其結(jié)果True或False。
(4)只有當(dāng)匹配結(jié)果為True時(shí),才會(huì)構(gòu)造原始請(qǐng)求包Mreq并轉(zhuǎn)發(fā),否則丟棄并告警。
(5)服務(wù)器端的響應(yīng)包采用相同方法進(jìn)行處理。
實(shí)驗(yàn)以4臺(tái)虛擬機(jī)與本地主機(jī)為環(huán)境,虛擬機(jī)與本地主機(jī)均為windows 7系統(tǒng),使用Modbus poll/slave分別模擬Modbus TCP客戶端與服務(wù)器端,使用自己開發(fā)的Modbus-S client/server分別模擬Modbus-S客戶端與服務(wù)器端。虛擬機(jī)模擬Client端,本地主機(jī)模擬服務(wù)器端。其中3臺(tái)虛擬機(jī)安裝有Modbus poll與Modbus-S client。本地主機(jī)安裝有Modbus slave與Modbus-S server。其中PC1,PC2,PC3均加入“白名單”列表,權(quán)限等級(jí)依次為100,50,10。其實(shí)驗(yàn)環(huán)境如圖5所示。
圖5 實(shí)驗(yàn)環(huán)境圖Fig.5 Experimental environment diagram
實(shí)驗(yàn)使用Wireshark抓取Modbus-S協(xié)議正常通信時(shí)的數(shù)據(jù)包進(jìn)行分析。圖6為Modbus-S請(qǐng)求包的ADU數(shù)據(jù),圖7為Modbus-S響應(yīng)數(shù)據(jù)包ADU數(shù)據(jù),由圖可知數(shù)據(jù)的關(guān)鍵字段已被加密,測(cè)試結(jié)果符合預(yù)期。
圖6 Modbus-S請(qǐng)求數(shù)據(jù)包的ADU數(shù)據(jù)Fig.6 ADU data of Modbus-S request packet
圖7 Modbus-S響應(yīng)數(shù)據(jù)包的ADU數(shù)據(jù)Fig.7 ADU data of Modbus-S response packet
表1為實(shí)驗(yàn)測(cè)試的“白名單”列表,表2為測(cè)試結(jié)果,數(shù)據(jù)通信數(shù)據(jù)包如圖8所示,圖9顯示了告警日志。由實(shí)驗(yàn)結(jié)果可知“白名單”過濾方法可以有效地實(shí)現(xiàn)非法指令的過濾。
表1 實(shí)驗(yàn)測(cè)試“白名單”列表Tab.1 "White list"of experimental test
表2 “白名單”實(shí)驗(yàn)測(cè)試結(jié)果Tab.2 Results of"white list"test
圖8 數(shù)據(jù)通信數(shù)據(jù)包Fig.8 Data communication packet
圖9 Modbus-S server端告警記錄Fig.9 Alarm record of Modbus-S server
實(shí)驗(yàn)以使用最廣泛的信息摘要算法5(Message digest algorithm 5,MD5)、高級(jí)加密標(biāo)準(zhǔn)(Advanced encryption standard,AES)算法以及非對(duì)稱加密(Rivest-Shamir-Adleman,RSA)數(shù)字簽名算法進(jìn)行分析。通過wireshark抓取通信鏈路的數(shù)據(jù)包,通過計(jì)算響應(yīng)包與請(qǐng)求包的數(shù)據(jù)差值得到如圖10所示的時(shí)間對(duì)比圖。該圖反映了Modbus-S協(xié)議進(jìn)行一次通信所消耗的時(shí)間。通過對(duì)比圖可知Modbus-S的數(shù)據(jù)包傳輸時(shí)間比Modbus TCP協(xié)議增加8ms左右,比文獻(xiàn)[5]增加2ms左右。與提高安全性相比,這種差異可以忽略不計(jì)。
圖10 Modbus-S數(shù)據(jù)包構(gòu)造與解析時(shí)間對(duì)比圖Fig.10 Time comparison chart of Modbus-S data packet construction and parsing
針對(duì)Modbus TCP協(xié)議存在的安全問題,本文通過開發(fā)一對(duì)通信軟件并設(shè)計(jì)安全的通信協(xié)議Modbus-S,實(shí)現(xiàn)了Modbus TPC協(xié)議的安全加固。由于原客戶端通常為計(jì)算機(jī),可直接部署相應(yīng)軟件處理數(shù)據(jù),而服務(wù)器端通常為安全網(wǎng)關(guān),需要借助其他終端部署對(duì)應(yīng)軟件。為降低實(shí)施成本,還需研究相應(yīng)的硬件模塊,這將是下一步需要研究的方向。