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