文/阮偉 黃光平 陳亮 楊柳
隨著工業控制系統信息技術與功能需求的發展,工控系統與互聯網的聯系越來越緊密,形成了一個開放式的網絡環境,由于傳統工業控制系統是基于物理隔離的,主要關注系統的功能安全,缺乏對網絡信息安全的考慮,沒有專門的安全防御措施。近年來,針對工業控制系統的各種攻擊事件層出不窮,比如震網病毒,毒區病毒,以及烏克蘭電網等事件,攻擊者通過各種手段發起攻擊,使工業控制系統崩潰,給工業生產造成了難以估量的損失。因此對工控協議進行安全性分析成為了系統安全防御的重要手段。
根據分析對象的不同,現有的對協議逆向分析的方法主要分為兩類,報文序列分析和指令執行序列分析。報文序列分析的方法具有簡單,平臺無關,能夠推測出協議語法結構的劃分等優點,但是很難實現協議數據字段語義屬性的識別,典型的有PI 項目;指令執行序列分析的方法能夠獲得協議數據的語義信息,但是其分析過程依賴于協議實體的運行環境,難以實現跨平臺的移植,典型的有Polyglot。
工業控制系統通信協議不同于傳統網絡協議,工控系統的通信協議是一種有狀態的協議,對有狀態的通信協議進行解析必須基于協議自身相關的報文序列,解析時需要對協議的每一個狀態和字段進行解析。盡管現有許多針對未知協議為分析對象的協議逆向方案,然而由于不同協議之間,報文的結構、取值都存在較大差異,無法保證逆向結果的正確性,并且現有的協議解析方法準確率較低。因此,對工控協議進行解析必須基于人工輔助方式的協議逆向分析方法。
本文提出的協議逆向方案主要有以下步驟:
(1)收集工業控制系統中的網絡流量;
(2)對網絡流量進行篩選,找到需要的數據包;
(3)利用一定的先驗知識,對具有相似結構的數據包進行對比,重點比對位置相同,但數值不同的地方,推斷出該位置上字段的含義。
本文研究對象為工業控制系統專用協議,該協議采用TCP/IP 體系結構,存于應用層中。協議通過應用層,傳輸層、網絡層、數據鏈路層層層封裝進行傳輸。對協議進行解析時,需要對其層層解封裝。
對該工控協議進行解析時,數據鏈路層,網絡層、傳輸層使用的協議都是已知的,因此主要是對封裝在應用層的工控協議進行解析,該工控協議位于報文的尾部,如圖1藍色部分所示。
采集的流量中主要包含點對點和組播兩種類型的數據包。本文主要通過研究點對點的數據包,對工控協議進行分析。操作員在工作站執行命令前啟動wireshark 抓包軟件,命令執行完畢后關閉wireshark 軟件,抓取工業網絡流量。抓取的流量當中含有眾多亂序,重傳、以及不需要的數據包,對工控協議進行分析前需要剔除此類數據包,找到執行命令對應的數據包。方法如圖2所示,首先對數據包進行分類,根據執行命令的發送方和接收方的源目的地址進行第一次篩選,區分出擁有正確源目的地址的數據包;再根據發出指令的唯一性進行第二次篩選,找到指令對應的數據包。

表1:協議格式

圖2:指令數據包提取

圖3:繼電器閉合

圖4:繼電器斷開
由于同一種協議往往具有相同的格式,而相同格式的報文往往具有相似性,因此可將具有相似性的數據包匯集在一起進行分析對比,以推斷它們所遵照的報文格式和所代表的語義字段。
在操作員執行某一操作前后,同時啟動wireshark 抓包軟件抓取數據包。通過分析比對操作員執行操作前后所抓到的數據包,排除數值與位置相同的部分,重點比對同一位置發生變化的部分,利用先驗知識,和加上一定的手段對協議進行解析,比如浮點數據轉換,整型數據轉換、十六進制轉換成ASCII 碼等,解析出發生變化字段的含義。
使用組態軟件組態出一個控制繼電器的工程,操作員在點擊控制繼電器閉合時抓取一次數據包,在點擊控制繼電器斷開時抓取一次數據包。已知,抓包使用的是控制網A,工作的控制器地址為168.20.1.2,操作站的地址為168.20.1.131,因此使用wireshark 對數據包進行篩選找到源地址為操作站地址,目的地址為工作的控制器地址的數據包。此時篩選出的數據包眾多,再根據指令的唯一性找出對應的數據包。使用該方法找出兩次下發指令所對應的數據包,分析比對兩次發生變化的地方,兩次抓到的數據包為圖3,圖4所示,紅色框標出的是兩張圖中不同的地方。
對比發現有兩處位置的數值發生了改變,在第一處由d4 變為了d5,第二處由00 變為01。此時難以分析出控制繼電器閉合斷開的位置是哪處。繼續重復執行該指令進行抓包,由結果發現,處于第一處不同位置上的d5 還會繼續遞增,而處于第二處不同位置上的00 與01 繼續交替出現。因此可以分析出第一處不同是一種遞增關系,第二處不同代表繼電器的狀態。01 控制繼電器閉合,00 控制繼電器斷開。
不斷的按照上述方法進行實驗后,解析出的協議格式如表1所示。
綜上,基于人工輔助逆向解析協議的方法,對于工控協議有著非常好的解析效果。單字節或多字節的數據都可通過指令推斷或數據轉換解析出其具體含義。表明按照此方法可依次有效地解析出該工控系統中私有通信協議的格式和語義信息。
本文通過人工輔助逆向協議解析的方法對私有的工控協議進行深度解析,其準確率很高,能夠有效的通過協議解析幫助發現各種操作行為的安全問題,提高工控系統安全性。本文當前只對點對點的數據包解析方法進行了嘗試,組播的數據包解析方法還待研究。