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