文獻(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)險。最近幾年,,針對工業(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è)來說,及時發(fā)現(xiàn)信息安全風(fēng)險,,盡早對大量工業(yè)企業(yè)控制系統(tǒng)進(jìn)行檢測測試,,發(fā)現(xiàn)其安全漏洞并及時加固,才可提高其自身的工控信息安全抵抗能力,。但是,,目前使用的工業(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)了許多程序中的錯誤。
一般情況下,,F(xiàn)uzzing工具包括一個隨機(jī)數(shù)據(jù)生成器,,用來產(chǎn)生隨機(jī)二進(jìn)制數(shù)據(jù)或者字符串,同時,,為了協(xié)助追蹤錯誤原因和地址,,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),。基于樣本文件產(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)行分析,,通過對有效字段的有效變換來增加輸入的有效性。這種方式的實現(xiàn)主要是忽略掉協(xié)議的固定字段進(jìn)而減少輸入數(shù)據(jù)的產(chǎn)生數(shù)量,,提高測試效率和測試的有效性,。其次為了進(jìn)一步提高數(shù)據(jù)的生成效率,可以采用多元聯(lián)動的方式來生成數(shù)據(jù),,即:由原來的每次變換只變換一個字段改成每次變換同時變換多個相關(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的基本參考模型的一個應(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)中最重要的一個設(shè)備,。當(dāng)電力系統(tǒng)發(fā)生故障或異常工況時,,可以自動將故障設(shè)備從系統(tǒng)中切除,或者發(fā)出信號由值班人員消除異常工況根源,,以減輕或者避免設(shè)備損壞和對相鄰地區(qū)供電的影響,。
3.1 Fuzzing測試工具架構(gòu)
Fuzzing測試工具為自主研發(fā),該產(chǎn)品硬件設(shè)備為定制化開發(fā),,具有6個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é)議的模糊測試,,同時還支持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)行測試時,,首先對被測報文進(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),,同時選擇MMS標(biāo)準(zhǔn)協(xié)議語法測試模塊,。此時被測設(shè)備與測試工具通信狀態(tài)良好,如圖5監(jiān)視器連接狀態(tài)比對圖所示,。
圖5左側(cè)說明在測試開始時,,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ù),。在測試過程中,,會打開一個TCP連接,發(fā)送數(shù)據(jù)包并嘗試接收數(shù)據(jù)包,,如果不能接收,則關(guān)閉該TCP連接,,并且打開一個新的TCP連接,。如果不能打開一個新的TCP連接,,則表示上一條測試數(shù)據(jù)導(dǎo)致設(shè)備發(fā)生了異常,并且對該數(shù)據(jù)的版本號值,、保留位以及相關(guān)子集的大小等進(jìn)行分析,,得出產(chǎn)生異常的原因。
在啟動測試并持續(xù)一段時間后,,如圖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ù)分析,,采用回溯方式,同時分析測試報文,,如圖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)境中時,,可采用2種方式:(1)移植每一個單獨(dú)的應(yīng)用,,在TCP上開發(fā)本地協(xié)議;(2)通過TCP/IP提供的ISO/OSI的傳輸服務(wù),,此方法為所有的基于傳輸服務(wù)的應(yīng)用提供通用方案,。
ISO8073傳輸協(xié)議在對等層間以非連續(xù)的單元傳輸信息,這些單元叫作傳輸協(xié)議數(shù)據(jù)單元(TPDU),,為了在TCP上實現(xiàn)TS服務(wù),,需要將TPDU封裝入一個非連續(xù)的報文單元——TPKT。
由于TCP報文字節(jié)流是沒有邊界的,,為了達(dá)到NS服務(wù)的要求,,要通過一種機(jī)制實現(xiàn)TPDU的定界,TPKT恰好實現(xiàn)了這種封裝,。
TPKT包含報文頭,、TPDU兩部分。通過TCP實現(xiàn)NS服務(wù)要實現(xiàn)報文的封裝和拆分,,以向上層提供非連續(xù)的報文而非字節(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é)議,。
利用問題報文并結(jié)合MMS協(xié)議進(jìn)行分析,,發(fā)現(xiàn)如下問題:
(1)在TCP流上進(jìn)行傳輸?shù)臄?shù)據(jù)是沒有界限的,而TPKT提供了報文分界,,于是當(dāng)發(fā)送的報文的TPKT的length字段超過了設(shè)備緩存的長度,,length字段設(shè)置為50 000,實際測試用例累計達(dá)到50 004,,就可能造成設(shè)備內(nèi)存溢出進(jìn)而造成設(shè)備宕機(jī),,拒絕服務(wù)。
(2)在測試用例中組裝了正確的協(xié)議頭,,但是協(xié)議負(fù)載部分填充了不符合MMS協(xié)議規(guī)約的數(shù)據(jù),,如果設(shè)備對這種報文的處理存在缺陷,可能導(dǎo)致協(xié)議棧崩潰,,出現(xiàn)拒絕服務(wù),。
在回溯過程中,如果回溯的區(qū)間過短,,那么Fuzzing測試工具監(jiān)視器不會出現(xiàn)問題,,只有回溯的區(qū)間達(dá)到某一個臨界值后問題才會重現(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ù)的可行性,。同時對于工業(yè)控制系統(tǒng)及設(shè)備來說,,被惡意攻擊后拒絕服務(wù),會給工業(yè)企業(yè)正常生產(chǎn)帶來非常大的影響,??梢岳眠@項研究,與工業(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)本身的漏洞,,及時進(jìn)行補(bǔ)丁升級或者實施有效防護(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é)報:自然科學(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.