文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.07.020
中文引用格式: 李航,董偉,朱廣宇. 基于Fuzzing測試的工業控制協議漏洞挖掘技術研究[J].電子技術應用,2016,42(7):79-82.
英文引用格式: Li Hang,Dong Wei,Zhu Guangyu. Research on industrial control protocol vulnerability mining technology based on Fuzzing test[J].Application of Electronic Technique,2016,42(7):79-82.
0 引言
隨著兩化的深度融合,工業控制系統集成了自動化技術、網絡技術和信息技術,工業企業也由原來的“孤島式”、完全封閉的狀況,向互聯互通方向大力發展。工業企業的信息化建設提高了企業的生產經營效率,也帶來了工業控制系統信息安全的風險。最近幾年,針對工業控制系統的攻擊層出不窮,且攻擊的深度和強度進一步增強,“震網”和“火焰”病毒肆虐,已經說明了工業控制系統信息安全問題的嚴重性。2015年12月,烏克蘭電網被攻破,導致大面積停電;2016年1月,以色列宣稱本國電網遭受了大規模信息安全攻擊等,更是直指工業控制系統的脆弱性。由于工業控制系統大量應用在國家重要基礎設施內,若被惡意攻擊,使得控制系統崩潰,后果將不堪設想。
對于工業企業來說,及時發現信息安全風險,盡早對大量工業企業控制系統進行檢測測試,發現其安全漏洞并及時加固,才可提高其自身的工控信息安全抵抗能力。但是,目前使用的工業控制標準基本參照國際標準,工控產品大部分都是國外品牌,我國政府并沒有強制性的審查制度和認證體系,工控設備廠商不會完全主動對我國工業企業開放,只能采用黑盒技術,從標準協議入手,利用Fuzzing測試手段,挖掘工業控制系統和產品的安全漏洞,做到盡早發現、盡早加固。
1 Fuzzing測試
Fuzzing測試是采用黑盒測試的思想和技術,將一組隨機生成的數據作為程序的輸入,并監視程序的異常狀態,通過記錄導致異常的輸入來進一步回溯程序的缺陷位置。早期的Fuzzing技術僅是應用在軟件測試方面的一種簡單的隨機測試技術,但卻有效地發現了許多程序中的錯誤。
一般情況下,Fuzzing工具包括一個隨機數據生成器,用來產生隨機二進制數據或者字符串,同時,為了協助追蹤錯誤原因和地址,Fuzzing還引入了一些腳本用來加強測試過程的自動化,記錄程序崩潰現場。為了避免產生大量無效的測試數據,參數腳本給出了引擎生成的測試用例中數據的格式、長度等與數據之間的一些關系,如SPIKE、Sulley使用的類C格式的腳本、Peach使用的XML格式的腳本。許多Fuzzing工具的數據生成方式基于變異技術,而樣本文件則是這些工具用來變異測試數據的基準。基于樣本文件產生的測試數據,可以大大提高測試用例的有效性,可以提高測試的代碼覆蓋率,可以減輕測試用例構造的復雜度[1]。圖1為模糊測試階段。
針對工業控制系統標準協議的Fuzzing測試,需要結合工業控制系統的特征,一種比較有效的方式就是對工業控制系統標準協議的格式進行分析,通過對有效字段的有效變換來增加輸入的有效性。這種方式的實現主要是忽略掉協議的固定字段進而減少輸入數據的產生數量,提高測試效率和測試的有效性。其次為了進一步提高數據的生成效率,可以采用多元聯動的方式來生成數據,即:由原來的每次變換只變換一個字段改成每次變換同時變換多個相關的字段。這樣的數據生成器可以產生更加有效的輸入[2]。為了解決隨機產生數據帶來的狀態爆炸等問題,在數據生成器中加入了數據行為和狀態機,這樣的生成方式超越了黑盒測試的限制,介于黑盒測試和白盒測試之間,而狀態機的加入更是提高了數據之間的關聯特性,使得生成測試數據的有效性大大提高。
2 MMS標準
IEC61850標準是電力系統自動化領域唯一的全球通用標準。其中MMS標準協議是基于通用網絡通信平臺的IEC61850標準的8-1指定協議,大量應用在電力系統自動化領域。
MMS標準是為了便于信息處理系統互聯而制定的成套國際標準之一,它作為開放系統互聯OSI的基本參考模型的一個應用層服務元素ASE,列入OSI環境中的應用層之中。
MMS是最大、最復雜的應用層協議標準之一,其目的是定義由MMS提供的各種服務,MMS服務由MMS協議提供。協議采用ISO8649及ISO8822分別定義關聯控制服務元素ACSE和表示層的適用服務。也就是說,MMS作為OSI應用層標準,它需要使用OSI表示層(第六層)向其提供服務[3]。
3 基于Fuzzing測試的漏洞挖掘研究及問題分析
本文研究對象為電力自動化系統自動化設備中的繼電保護設備,該設備是變電站二次電力系統中最重要的一個設備。當電力系統發生故障或異常工況時,可以自動將故障設備從系統中切除,或者發出信號由值班人員消除異常工況根源,以減輕或者避免設備損壞和對相鄰地區供電的影響。
3.1 Fuzzing測試工具架構
Fuzzing測試工具為自主研發,該產品硬件設備為定制化開發,具有6個10/100/1 000 M業務電口、16路數字量輸入接口、2路繼電器輸出接口、1路RJ45 console接口(RS232協議)、1路232/485(DB9)接口。
軟件系統采用B/S結構,功能模塊分為:控制模塊、端口掃描模塊、測試用例生成與加載模塊、Fuzz模塊、Monitor模塊;測試工具還集成了數據行為學習功能的自學習模塊,可根據數據情況自學習數據結構,建立數據分析庫,提高Fuzzing測試算法的效率。Fuzzing測試工具涵蓋Ethernet、ARP、IP、ICMP、IGMP、UDP以及TCP等常用網絡協議的模糊測試,同時還支持Modbus TCP/IP、DNP3.0、EtherNet/IP-CIP、Foudation Fieldbus、IEC104、IEC-61850、MMS、PROFINET以及OPC UA等工控協議。軟件系統的功能模塊圖如圖2所示。
3.2 基于Fuzzing的漏洞挖掘過程
針對繼電保護的測試采用Fuzzing測試技術,利用橋接方式,在被測設備和其上位機系統之間建立物理連接,具有監聽、學習、測試等模式。
按照圖3的連接示意圖將被測設備和測試工具連接在一起,對被測設備進行測試時,首先對被測報文進行監聽(如圖4),分析得出其被測設備與上位機系統通信規約為MMS標準協議。
確定MMS標準協議后,啟動測試程序,選擇ARP、ICMP、TCP等狀態監視器,用來監控被測設備的通信狀態,同時選擇MMS標準協議語法測試模塊。此時被測設備與測試工具通信狀態良好,如圖5監視器連接狀態比對圖所示。
圖5左側說明在測試開始時,ARP、ICMP、TCP等狀態監視器顯示正常,被測設備與測試工具之間通信連接正常。啟動以后,會利用Fuzzing技術進行MMS協議語法測試用例的構造。MMS-TPKT數據語法測試用例中,按照TPKT格式,版本號和保留位為固定字段,長度和數據段進行多種變異,從而生成大量格式正確的隨機數據。在測試過程中,會打開一個TCP連接,發送數據包并嘗試接收數據包,如果不能接收,則關閉該TCP連接,并且打開一個新的TCP連接。如果不能打開一個新的TCP連接,則表示上一條測試數據導致設備發生了異常,并且對該數據的版本號值、保留位以及相關子集的大小等進行分析,得出產生異常的原因。
在啟動測試并持續一段時間后,如圖5右側所示,ARP、ICMP狀態監視器發生丟包,TCP狀態監視器連接中斷,被測設備出現拒絕服務狀態,完全無法工作。
3.3 問題回溯以及結果分析
對被測設備發生的問題進行數據分析,采用回溯方式,同時分析測試報文,如圖6。
MMS協議棧是基于TCP/IP的,作為定義在開放系統互聯模型(OSI)之上的應用層協議,在TCP/IP之上構建MMS通信的映射方式有2種:(1)在TCP/IP與會話層之間采用RFC1006作為MMS的適配層;(2)在MMS與TCP/IP之間直接映射。
當把ISO/OSI應用移植到TCP/IP環境中時,可采用2種方式:(1)移植每一個單獨的應用,在TCP上開發本地協議;(2)通過TCP/IP提供的ISO/OSI的傳輸服務,此方法為所有的基于傳輸服務的應用提供通用方案。
ISO8073傳輸協議在對等層間以非連續的單元傳輸信息,這些單元叫作傳輸協議數據單元(TPDU),為了在TCP上實現TS服務,需要將TPDU封裝入一個非連續的報文單元——TPKT。
由于TCP報文字節流是沒有邊界的,為了達到NS服務的要求,要通過一種機制實現TPDU的定界,TPKT恰好實現了這種封裝。
TPKT包含報文頭、TPDU兩部分。通過TCP實現NS服務要實現報文的封裝和拆分,以向上層提供非連續的報文而非字節流。TPKT的具體格式如表1。
分析得出,MMS標準利用了TPKT協議,而TPKT(transport services on top of the TCP)協議是應用層數據傳輸協議,它處于TCP協議之上,用來傳輸應用層數據負載,而在電力設備中,基于MMS協議的數據用來傳輸通信的負載數據,或者承載更高層的協議。
利用問題報文并結合MMS協議進行分析,發現如下問題:
(1)在TCP流上進行傳輸的數據是沒有界限的,而TPKT提供了報文分界,于是當發送的報文的TPKT的length字段超過了設備緩存的長度,length字段設置為50 000,實際測試用例累計達到50 004,就可能造成設備內存溢出進而造成設備宕機,拒絕服務。
(2)在測試用例中組裝了正確的協議頭,但是協議負載部分填充了不符合MMS協議規約的數據,如果設備對這種報文的處理存在缺陷,可能導致協議棧崩潰,出現拒絕服務。
在回溯過程中,如果回溯的區間過短,那么Fuzzing測試工具監視器不會出現問題,只有回溯的區間達到某一個臨界值后問題才會重現漏洞。由此可見,漏洞的出現和數據的積累有著直接的相關性。
4 結束語
本文介紹了Fuzzing測試技術的基本情況,分析了MMS標準協議的結構和工作特點,利用自主研發的Fuzzing測試工具,完成了針對電力設備的漏洞挖掘及分析工作,有效證明了基于Fuzzing測試技術的工業控制協議漏洞挖掘技術的可行性。同時對于工業控制系統及設備來說,被惡意攻擊后拒絕服務,會給工業企業正常生產帶來非常大的影響。可以利用這項研究,與工業企業、工控系統及設備生產制造商合作,開展相關測試的研究并形成測試規范和標準,在系統以及設備上線前、運行調試中、后期維護中進行測試工作,發現系統本身的漏洞,及時進行補丁升級或者實施有效防護措施,有效提升工業控制系統的信息安全性。
參考文獻
[1] Michael Sutton,Adam Greene,Pedram Amini.模糊測試-強制發掘安全漏洞的利器[M].段念,趙勇,譯.北京:電子工業出版社,2013.
[2] 張寶峰,張翀斌,許源.基于模糊測試的網絡協議漏洞挖掘[J].清華大學學報:自然科學版,2009,49(S):14-15.
[3] ISO 9506-1,ISO 9506-2,ISO/IEC 8802-3.Communication networks and systems in substations Part8-1:Specific Communication Service Mapping(SCSM)——Mappings to MMS[S].2011.