朱智燊,凌 捷,林 鵬
廣東工業大學 計算機學院,廣州510006
工業控制系統(ICS)由監控數據采集系統(SCADA)、離散控制系統(DCS)、可編程邏輯控制器(PLC)等多個子系統組成。這類系統通常使用專用的通訊協議[1],應用于與外部網絡隔離的內部生產網絡。ICS 允許使用Modbus、DNP3[2]等網絡協議配置傳感器,收集實時狀態數據,并對各個組件進行監控。ICS 控制中心一般使用串行連接向遠程終端發送純文本命令,接收未經加密的傳感器讀數。同時,出于安全考慮,ICS 均將接口通過物理方式鎖定在指定范圍,以防未經授權的訪問。
隨著低成本網絡設備變得越來越普遍,工業控制系統也逐漸向互聯設備遷移,包括基于IP 的設備、網絡和協議,如Modbus-TCP 允許用戶通過TCP/IP 對ICS 進行遠程訪問[3]。但與此同時也帶來新的安全問題,可能導致通常的網絡攻擊方法在物理隔離的ICS中滲透。
作為廣泛使用的工業控制系統協議之一,Modbus協議本身并沒有提供驗證數據合法性的機制[4],而是通過在工控系統中添加驗證程序或設備來實現。然而,多數工業控制系統都沒有采取相應的安全措施,使Mod‐bus 協議容易遭受數據篡改攻擊。Phan 等人[5]提出對Modbus 協議進行重新設計,但重新設計后ICS 設備改動的成本卻令大部分廠家難以接受。因此,如何保障ICS 的安全成為了當前學術界和產業界共同關注的熱點研究課題。
已有學者提出多個解決Modbus協議數據傳輸安全問題的方法。Hayes[6]提出安全層(Modbus Sec)概念,將流控制傳輸協議(SCTP)和Modbus 協議結合并附加消息驗證碼,生成Modbus 認證方案。雖然SCTP 協議本身對拒絕服務攻擊、中間人攻擊有良好的防御能力,但該認證方案為對稱加密認證結構,密鑰單一,對未授權命令及重放攻擊的抵御能力較弱;文獻[7]研究采用國密SM2 算法對配電網Modbus 報文進行數字簽名,以保證配電網信息的真實性和不可抵賴性,但該方案在加密信息摘要過程中,未加入時間戳等隨機屬性,密鑰不及時更新易遭受重放攻擊;文獻[8]設計了針對Modbus工控網絡主從設備的認證模型、雙重認證算法及算法配置的方案,該方案雖有較好抵御未授權命令、拒絕服務攻擊、中間人攻擊及重放攻擊的能力,但需在ICS 所有設備中分別嵌入加密認證芯片,所有發送的消息都必須經內嵌的安全模塊處理,對于傳統ICS 而言,應用該方案需調整部分系統代碼。
本文提出一種基于隱蔽信道的Modbus-TCP 數據完整性校驗方法,具有以下優點:
(1)利用TCP存儲型隱蔽信道方式,對Modbus工控數據進行校驗,且具有校驗功能的Modbus-TCP 數據包格式與原數據包格式一致,可以抵御數據篡改攻擊。
(2)通過加入TCP報頭序號字段值(Sequence Num‐ber)和確認序號字段值(Acknowledgment Number)的方式生成哈希密文,保證相同的Modbus 工控數據在不同的Modbus-TCP 數據包中生成各異的哈希校驗碼,可以抵御重放攻擊。
(3)應用于傳統ICS 時,校驗設備部署于路由網關,無需調整系統代碼,有利于保障ICS的穩定性。
由于傳統工業控制系統是封閉的,不與其他網絡進行數據交換,所以Modbus-TCP 協議在設計時并沒有過多考慮信息安全與網絡安全等因素,存在下列安全隱患:
(1)缺乏身份驗證:由于協議沒有驗證客戶端與服務器端身份的機制,攻擊者可以冒充雙方發送惡意指令。
(2)功能碼使用缺乏約束:由于協議沒有對使用功能碼的用戶進行限制,缺乏針對不同用戶的訪問控制、用戶分類、用戶權限劃分等機制,導致任何可以與物理設備通信的用戶都能執行所有操作。
(3)數據明文傳輸:Modbus-TCP傳輸的數據報文沒有加密,應用數據單元(ADU)也去除了附加地址和差錯校驗(如圖1 所示),攻擊者可以通過截獲數據包,篡改數據使其變成惡意報文,達到破壞工控系統的目的。

圖1 Modbus-TCP協議格式
攻擊者利用某些協議存在的數據完整性漏洞,通過篡改主站端發送的請求數據包,發起對工控設備的攻擊,如Stuxnet 惡意病毒造成的設備破壞事件。文獻[9]描述了這種攻擊方式,攻擊者通過捕獲工控系統物理傳感器的狀態數據,讀取計算工控系統對控制輸入的響應信息等,將控制輸入調整為非正常值,同時修改傳感器讀數以匹配所請求的控制輸入及操作狀態。文獻[10]提出一種攻擊方法,通過比較系統在正常操作時和受到攻擊時的通信數據,將它們之間的誤差在允許范圍內最大化,利用數據完整性攻擊隱蔽地實現對工控系統的物理破壞。
重放攻擊是一種特殊的完整性攻擊[11]。在進行攻擊時,攻擊者通過捕獲控制數據包,然后在正常延遲的時間內重新傳輸它們。由于分組的CRC 校驗碼仍有效,從站端在接收到這些重放的數據包后,會將它們作為合法輸入并嘗試對物理設備進行更改,以匹配惡意控制輸入。
中間人攻擊(MITM)是一種易于執行的攻擊,且主站端或從站端都不易覺察。攻擊者攔截來自主站端請求讀取寄存器命令的數據包,并將存儲器范圍內的請求值更改到不同的寄存器位置。在快速計算篡改后的數據包校驗和之后,攻擊者就可將數據包通過交換機發送到從站。當數據包到達從站端時,設備會從錯誤的內存位置讀取修改后的寄存器值,并將結果封裝在數據包通過網絡系統發回。當響應數據包到達主站端時,Mod‐bus-TCP 協議沒有機制可以檢測出原始請求已被惡意修改[12]。中間人攻擊過程如圖2所示。

圖2 中間人攻擊示意
本文提出的Modbus-TCP 隱蔽信道數據的完整性校驗方法,采用存儲型隱蔽信道方式提供安全認證,可保證Modbus-TCP 數據包在傳輸過程中不被篡改。進行這種數據完整性校驗時,需在發送端內網接入哈希計算主機PC1 和接收端內網接入哈希校驗主機PC2。校驗步驟如下:
(1)PC1利用MITM攔截Modbus-TCP數據包pi。
(2)PC1 解析pi并獲得其TCP 報頭序號si和確認序號ai。
(3)PC1解析pi并獲得其Modbus數據域di。
(4)PC1 生成N 位(N <16)校驗碼δi=Hash(t),其中t=si+ai+di。

(6)PC1將修改后的pi進行轉發。
(7)PC2攔截pi。
(8)PC2解析pi獲得si、ai、di與wi。
該方法優點在于只需要在內網中添加兩臺計算設備,無需修改原工控系統的程序代碼即可完成校驗工作,且校驗過程具有一定的隱蔽性。網絡拓撲如圖3所示。

圖3 Modbus-TCP隱蔽信道數據完整性校驗
本文利用Ettercap 和Scapy 輔助工具,通過隱蔽信道,對Modbus-TCP數據包實現哈希校驗。其中Ettercap用于捕獲主站與從站之間的數據流,Scapy 則實現對數據包的修改及轉發。具體步驟如下:
(1)在主站(上位機)和從站(PLC、RTU)之間分別接入一臺PC 機,PC 機上安裝配置Ettercap,使主站與從站之間傳輸的Modbus-TCP數據包能被監聽。
(2)使用Scapy 對監聽的Modbus-TCP 數據包進行修改并轉發。其中:
發送側修改數據包邏輯如下:
1.設定監聽TCP協議并且源端口為502的數據包。
2.for所有數據包do:
3.按照TCP協議格式解析數據包;
4.if 數據包源IP與目的IP為目標IP:
5. δi=Hash(t);
6. TCP報頭window字段后N位=δi;
7. 重新計算TCP報頭校驗和chksum字段;
8. 轉發數據包;
接收側校驗數據包邏輯如下:
1.設定監聽TCP協議并且源端口為502的數據包;
2.for所有數據包do:
3.按照TCP協議格式解析數據包;
4.if 數據包源IP與目的IP為目標IP:
8. 轉發數據包;
9. else:
10. 丟棄數據包并產生告警信息;
本文實例中選擇SHA-1 哈希算法,生成12 位哈希校驗碼,具體計算過程如下:
(1)將TCP 報頭序號(32 位)、確認序號(32 位)和Modbus-TCP 數據域的全部數據(約100~1 000 位)相加組合,轉換為二進制數據,采用SHA-1 哈希算法生成160位的二進制數(a1,a2,… ,a160)。
(2)將上述生成的160 位(a1,a2,… ,a160)二進制數,每隔14位(160/12)取1個值,組成新的12位哈希校驗碼。

TCP和IP報頭提供了可以秘密發送信息的字段,圖4為TCP協議的報文格式。
一個選擇方案是使用6 位保留字段存儲生成的哈希校驗碼,不占用TCP協議中的其他字段。但多數工業防火墻會對TCP數據包的報頭進行檢查,若發現保留字段的值存在異常,則可能丟棄該數據包并產生告警。由于系統正常運行時Modbus-TCP 數據包的window 值變化較少,所以本文采用16 位的window 字段作為隱蔽信道。

圖4 TCP報文格式
TCP 的window 字段的值是隨系統動態變化,有兩種估算規則:
(1)2倍的帶寬時延乘積,帶寬取最差時的連接帶寬:
wi=2×bandwidth×delay
(2)采用ping計算網絡的環回時延(RTT):
wi=bandwidth×RTT
獲得正常狀態的window 字段估算值后,計算其二進制所占位數,保留高2 位原始值,剩余的低位用于存儲哈希校驗碼。存儲情況如圖5所示。

圖5 window字段值修改過程
在本文方法中,采用保留window 有效位高2 位方式存儲哈希校驗碼,window 字段值的變化約為四分之一;若僅保留有效位高1 位,則window 字段值的變化約為二分之一,有可能導致window 字段有效位被哈希校驗碼完全覆蓋,影響系統的正常運作。
例如window 字段正常狀態最優值為8 192(二進制0010000000000000,有效位14 位),如僅保留高一位,系統運行時若window 字段值長期保持在8 191(二進制0001111111111111,有效位13位)或略微下降,則13位哈希碼完全填充window 字段有效位,使其與未加入哈希校驗碼之前的值具有較大差異(最差情況13 位校驗碼為0000000000000,填充后window 值為0),結果上位機與下位機均會誤判網絡為阻塞狀態而停止發送/接收數據包,導致系統出現異常。
本文設計的實驗環境是利用4 臺工控機搭建基于以太網的模擬工控系統。如圖6 所示,4 臺工控機采用性能相同的PC 機,主要參數包括:4 GB 內存,CPU 主頻最高至3.70 GHz 的i7-6700 處理器,網口采用自適應的百兆以太網卡,網絡采用與互聯網隔離的百兆以太網。

圖6 測試平臺
其中一臺工控機PC1模擬主站,一臺工控機PC2模擬從站,使用ModbusPoll 模擬Modbus-TCP 通信;兩臺工控機PC3、PC4 模擬實現哈希計算和哈希校驗功能的設備。
分別測試基于MD5、SHA-1、SM3 哈希方法的計算耗時、window 值在不同長度Modbus-TCP 數據包的變化、Modbus 數據包傳輸的請求-響應時延、系統通信帶寬占用等四類數據。Modbus 報文長度選用83 Byte,從站寄存器存儲10 個值,輪詢周期1 000 ms,采集時長為60 min。測試結果如表1~表5。

表1 不同哈希算法的計算耗時ms

表2 Modbus-TCP數據包相關數據表

表3 數據傳輸請求-響應平均時延 ms

表4 原始系統通信帶寬 KB

表5 采用隱蔽信道校驗系統通信帶寬KB
從表1 可知,在實驗環境下,SHA-1 算法耗時較MD5 增加不超過5%,SM3 算法耗時較其他兩種算法增加超100%。雖然SM3 抗攻擊能力較MD5、SHA-1 強,但因算法更為復雜,加密速度明顯不如后者。此外,由于SHA-1 摘要較MD5 摘要長32 bit,MD5 是264 數量級操作,SHA-1 是280 數量級操作,因此SHA-1 抗強行攻擊能力更大[13]。綜合安全性和計算效率考慮,本研究實例選用SHA-1哈希算法生成校驗碼。
從表2可知,根據系統從站(RTU、PLC)寄存器值個數,可得知Modbus-TCP 數據包的報文長度以及在該報文長度下保持系統正常運作的window 字段最小值,從而計算出對應二進制值的位數,再加入預留高出的兩位,則為該報文長度下進行哈希校驗所需占用window值的最少位數。
從表3 可知,原始系統Modbus-TCP 數據通信請求-響應平均時間為9.860 ms;若僅在從站側增加哈希主機后,請求-響應時延為21.823 ms;如同時在主站側、從站側增加哈希校驗主機和哈希運算主機后,則請求-響應時延為28.687 ms。王洪斌等[14]證明了ICS 系統主站與從站穩定通信的時延不超過160 ms,Jestratjew[15]也指出ICS 系統通信超時值的設定不應少于1 000 ms,才能保證系統正常運行。因此,本研究方法取得的技術參數結果符合工控網絡的環境要求。
從表4和表5可知,在原始系統中,Router1上傳平均速率0.340 5 KB/s,下載平均速率0.148 2 KB/s,Router2上傳平均速率0.080 6 KB/s,下載平均速率0.130 9 KB/s;在隱蔽信道校驗系統中,Router1上傳平均速率0.582 9 KB/s,下載平均速率0.203 9 KB/s,Router2上傳平均速率0.181 6 KB/s,下載平均速率0.281 8 KB/s。實驗結果表明,采用隱蔽信道校驗對通信帶寬的消耗較原始系統增加71%~125%,這是由于全部Modbus-TCP流量均需轉發至哈希計算及哈希校驗主機所致。然而,原始系統所占用的通信帶寬遠低于網絡帶寬上限[16],所以該方法符合物理隔離的百兆工控以太網帶寬的性能要求。
迄今為止,未經授權命令、拒絕服務攻擊、中間人攻擊和重放攻擊是針對ICS 最常見的攻擊方式。以下就本數據校驗方法如何抵御這四種攻擊作出理論分析。
(1)未經授權命令
攻擊者偽裝成主設備向從設備發送未經授權的請求數據包,當數據包到達哈希校驗主機PC2 時,PC2 會對TCP 報頭的window 值進行校驗。由于攻擊者未將哈希校驗值寫入其中,PC2 能識別出未經授權的請求數據包。
(2)拒絕服務攻擊
攻擊者需向從設備發送大量無用信息。當PC2 在接收攻擊者發送的第一個數據包時,因無法通過哈希校驗,數據包就被丟棄并產生告警。同時PC2也會中斷系統與攻擊者的通信,因此不會占用消耗設備的運算及存儲資源,從而保證設備正常運作。
(3)中間人攻擊
攻擊者即使截獲了主從設備之間的數據包,成功修改ADU 內容。但由于采用本研究方法的數據包與正常數據包在格式上完全相同,僅校驗的window 值不同,且攻擊者不易察覺,所以PC2也能及時識別被篡改的通信數據包。
(4)重放攻擊
重放攻擊和中間人攻擊有相似之處,都是將截獲的消息再發送至從設備,唯一不同的是重放攻擊不改變消息內容。如前所述,主從設備間消息發送與接收,哈希校驗碼均會根據TCP 序號與確認號進行變換。若攻擊者僅重放Modbus-TCP 數據域,則數據包無法通過PC2哈希校驗。根據TCP通信機制,初始序列號會隨時間而變化,若攻擊者在安全時間限制外重放整個Modbus-TCP數據包,會導致主從設備由于序號與確認號無法對應而通信失敗。
本文提出的Modbus-TCP 隱蔽信道數據完整性校驗方法,既有良好的安全性能,也不必調整ICS 系統代碼,只需部署少量PC 機于路由網關即可。在保證ICS正常運作的同時,有效抵御拒絕服務攻擊、中間人攻擊及重放攻擊等網絡攻擊。本文方法與其他方法的安全性比較如表6所示。

表6 安全性比較
工業控制系統是國家關鍵信息基礎設施的重要組成部分,而其自身的脆弱性又導致這些重要的信息系統容易受到惡意攻擊。本文提出一種基于隱蔽信道的Modbus-TCP 數據傳輸完整性校驗方法,采用TCP 存儲型隱蔽信道方式,對Modbus 數據實現哈希校驗。仿真實驗和安全性分析表明,該方法能有效抵御拒絕服務攻擊、中間人攻擊、重放攻擊等網絡攻擊,明顯提高工控系統的安全防范能力。