劉林彬,苗泉強,李俊娥
(1. 空天信息安全與可信計算教育部重點實驗室(武漢大學 國家網絡安全學院),湖北 武漢 430072;2. 光電對抗測試評估技術重點實驗室,河南 洛陽 471000)
電網形態(tài)正在向以新能源為主體的新型電力系統(tǒng)演進。新能源大規(guī)模并網、億萬級智能化終端設備大量接入,使系統(tǒng)對通信技術的依賴程度日趨增強,廣泛分布的新能源場站也為攻擊者入侵電力系統(tǒng)提供了更多途徑。新型電力系統(tǒng)以數據為核心生產要素,實現(xiàn)源網荷儲各環(huán)節(jié)數據融合,其中發(fā)電側要達到“全面可觀、精確可測、高度可控”的目標。光伏、儲能等分布式能源系統(tǒng)和風電場等新能源場站依據IEC 61850系列標準建設站內監(jiān)控系統(tǒng)[1-3],實現(xiàn)大量終端設備的狀態(tài)監(jiān)測、遙控和數據測量。
IEC 61850標準使不同廠家的智能電子設備(intelligent electric device,IED)之間實現(xiàn)互相操作和信息共享,其中面向通用對象變電站事件(generic object-oriented substation event,GOOSE)協(xié)議主要用于間隔層和過程層多個IED間實時信息的可靠傳遞,包括開關位置、跳合閘命令、告警信息、間隔互鎖等[4]。由于使用組播通信且沒有加密、認證等安全措施,攻擊者可以輕易篡改或偽造GOOSE報文,使IED誤動、拒動或拒絕服務,對繼電保護、間隔層邏輯互鎖等環(huán)節(jié)造成嚴重安全威脅[5-8]。在智能變電站實驗室環(huán)境下的實際測試也顯示,畸形報文攻擊很容易造成嵌入式終端拒絕服務。目前DL/T 860.10—2006等一致性測試標準主要檢測IED是否符合通信標準,而沒有測試IED對畸形報文的處理能力[9]。因此研究終端上線前的安全性測試方法,挖掘其GOOSE協(xié)議解析程序可能存在的漏洞,對于新能源場站的安全運行是十分必要的。
模糊測試是一種基于缺陷注入的自動化漏洞挖掘技術[10],通過構造畸形的輸入數據使得被測目標發(fā)生異常,從而發(fā)現(xiàn)被測試目標存在的安全問題。針對傳統(tǒng)網絡協(xié)議的模糊測試研究目前已經比較成熟,出現(xiàn)了Peach、Sulley和Spike等成熟的模糊測試框架。然而,由于工控協(xié)議種類繁多,不同廠商對協(xié)議有不同的實現(xiàn)方式[11],且工控設備多為嵌入式終端,計算和存儲能力較弱,傳統(tǒng)網絡協(xié)議的模糊測試方法無法直接適用于工控協(xié)議。
針對工控協(xié)議的模糊測試研究也取得了一定的成果。Wurldtech公司提出BlackPeer框架支持對 Modbus TCP協(xié)議棧的模糊測試[12],ProFuzz專門針對Profinet協(xié)議族進行測試[13],Devarajan在Sulley基礎上實現(xiàn)了對間控制中心通信協(xié)議(intercontrol center communications protocol,ICCP)、Modbus、分布式網絡協(xié)議 3(distributed network protocol 3,DNP3)等工控協(xié)議的模糊測試[14],文獻[15-17]基于Peach實現(xiàn)了Modbus TCP和S7協(xié)議模糊測試系統(tǒng),文獻[18]考慮工控協(xié)議字段依賴性特點提出一種跨字段的制造報文規(guī)范(manufacturing message specification,MMS)協(xié)議模糊測試方法,文獻[19-20]分別提出了針對工控系統(tǒng)和工控協(xié)議的通用漏洞挖掘框架。同時,國內外也出現(xiàn)了一些商用平臺支持工控協(xié)議的模糊測試。國內,威努特公司自研的工控漏洞挖掘平臺[21]可對Modbus、IEC 104、IEC 61850等工控協(xié)議進行模糊測試。國外,美國Mu Dynamic公司開發(fā)的測試組件Mu[22]支持 Modbus TCP、DNP3和 IEC 61850等常見工控協(xié)議。然而,上述研究成果部分基于現(xiàn)有模糊測試框架進行改進,缺乏對工控協(xié)議的針對性設計,或是未充分考慮嵌入式終端計算和存儲能力的限制;此外,上述研究中的模糊測試異常監(jiān)測方法大多需要傳輸控制協(xié)議/網際協(xié)議(TCP/IP)的支持,無法適用于GOOSE和采樣值(sampled value,SV)這類不使用TCP/IP的工控協(xié)議。目前針對GOOSE協(xié)議的模糊測試研究較少,威努特的工控漏洞挖掘平臺雖然支持GOOSE協(xié)議的測試,但僅針對協(xié)議的范式語法,測試深度不夠,挖掘的漏洞類型也相對有限。
因此,本文基于模糊測試提出GOOSE協(xié)議解析漏洞挖掘方法,在對GOOSE報文格式進行深入解析的基礎上,給出基于報文字段類型、ASN.1編碼方式和比特翻轉的報文變異策略,以及針對嵌入式終端和GOOSE協(xié)議傳輸機制的異常監(jiān)測方法,并在智能變電站實驗室環(huán)境中進行了測試,驗證了本文所提方法的有效性,并提出相應的防范建議。
模糊測試的測試用例產生方式可以分為生成和變異兩大類。本文采用變異方式構造測試用例,通過捕獲網絡中正常通信的GOOSE報文,根據變異策略修改報文中的數據值, 來構造測試用例。
與其他大多數工控協(xié)議相比,GOOSE協(xié)議的特殊之處在于,GOOSE報文直接封裝到以太網介質訪問控制(medium access control,MAC)幀中傳輸,沒有使用TCP/IP協(xié)議。GOOSE報文的封裝方式如圖1所示,其中應用協(xié)議數據單元(application protocol data unit,APDU)包括可視化字符串類型、32位無符號整型、復合類型和其他類型字段。
圖1 GOOSE報文的封裝方式Fig. 1 GOOSE message encapsulation mode
GOOSE報文的APDU使用ASN.1編碼。ASN.1中基本編碼規(guī)則的格式是標識-長度-值(tag-lengthvalue,TLV)三元組[23],其中Tag、Length和Value都是8位組,Value可根據需要再次構造為一個三元組,Value的類型在Tag中標識,Value包含的8位組個數在Length中定義。APDU域中各個字段的TLV格式詳見圖1,每個字段都有一個固定的Tag。
基于變異的測試用例構造方法,通?;谡5妮斎霐祿ㄈ缇W絡數據包),依據一定的漏洞知識來變異其中的部分數據來構造測試用例。本文分別基于GOOSE報文字段類型、ASN.1編碼方式和比特翻轉設計變異策略。
1.2.1 基于 GOOSE 報文字段類型的變異策略
為了不破壞以太網幀的基本結構,確保報文在以太網中正常傳輸,報文變異主要在APDU域內。根據傳統(tǒng)網絡協(xié)議中常見的漏洞類型(緩存區(qū)溢出漏洞、整數漏洞和格式化字符串漏洞等)和GOOSE報文的特點,本文提出的基于GOOSE報文字段類型的變異策略包括數值變異策略、字符串變異策略和allData字段變異策略。
(1)數值變異策略。數值變異策略針對整數漏洞,具體包括整數溢出、符號錯誤和截斷錯誤。利用整數漏洞,攻擊者可以實施諸如拒絕服務等攻擊行為。對于報文中的整型字段,重點用整數邊界值對其進行變異,另外考慮到變異的隨機性,隨機數也應作為變異選項。數值變異策略如表1所示。
表1 數值變異策略Table 1 Numerical mutation strategy
(2)字符串變異策略。對于字符串類型字段,本文采用了幾種常見且容易觸發(fā)漏洞的變異方式,其中超長字符串容易觸發(fā)堆溢出漏洞,插入特殊字符容易使終端在解析非預期字符時出現(xiàn)異常,包含格式化字符串的輸入可能會導致應用進程崩潰。另外,在單一GOOSE報文中,只使用了一種G O O S E服務,報文中的G o I D、gocbRef、dataSet等字段值在變電站配置描述文件(substation configuration description,SCD)中定義,該文件描述了所有IED的通信參數配置信息。因此,必須對在SCD文件中定義了而未在當前報文字段中使用的正常值進行測試。字符串變異策略如表2所示。
表2 字符串變異策略Table 2 String mutation strategy
(3)allData字段變異策略。allData字段是GOOSE協(xié)議中定義的復合數據類型字段,數據集中數據成員類型可以是整形、字符串和布爾量等,并且可以嵌套復合數據,數據集成員的個數在numDatSetEntries字段中表示。正常情況下,allData字段的嵌套層數是有限的,構造多層嵌套的allData數據集成員,可以測試終端的解析能力。另外,刪除或增加一定數量的數據集成員,使成員個數與numDatSetEntries值不一致,將可能導致終端錯誤解析allData字段以外的其他數據或者丟失部分數據集成員,引起解析異常。allData字段變異策略如表3所示。
表3 allData字段變異策略Table 3 Mutation strategy of allData field
1.2.2 基于 ASN.1編碼方式的變異策略
ASN.1編碼方式使得應用層的數據具有統(tǒng)一的表示方法,基于ASN.1編碼方式的變異策略,可以測試終端能否處理非正常編碼數據。Tag值變異,可能導致解析字段值的時候按照錯誤的類型進行解析,而Length值變異,使得在解析字段值的時候,可能將下一個TLV的部分數據作為本字段的數據進行解析,或者只解析部分Value數據?;贏SN.1編碼的變異策略如表4所示。
表4 基于ASN.1編碼方式的變異策略Table 4 Mutation strategy based on ASN.1 encoding
1.2.3 基于比特翻轉的變異策略
比特翻轉是指數據中的一個或多個比特發(fā)生位翻轉如1變?yōu)?或0變?yōu)?,這種現(xiàn)象在中央處理器(CPU)工作不穩(wěn)定或者通信信道受到干擾的情況下容易發(fā)生。發(fā)生比特翻轉后的數據,具有觸發(fā)未知漏洞的可能性?;诒忍胤D的變異策略如表5所示,每個變異規(guī)則按“bitflip 翻轉量/步長”的形式表示。
表5 基于比特翻轉的變異策略Table 5 Mutation strategy based on bit flip
GOOSE測試用例利用1.2節(jié)提出的變異策略對解析后的GOOSE報文字段進行變異后產生。本文設計了單字段變異和多字段組合變異2種方法來構造GOOSE測試用例。
(2)多字段組合變異。根據GOOSE協(xié)議規(guī)約中字段間的關聯(lián)關系確定多字段組合方式,如GOOSE接收機制中接收GOOSE報文后,關聯(lián)檢查goID、gocbRef、dataSet和confRev等參數是否匹配,根據stNum和sqNum關聯(lián)比較,判斷接收的報文是重傳報文還是變位報文;版本配置號字段confRev表示數據集引用名字段dataSet配置改變次數;當dataSet字段為NULL時,ndsCom字段值應為TRUE,表示此控制塊需要進一步配置。基于此可確定的多字段組合至少包括(goID,gocbRef,dataSet,confRev)(stNum,sqNum)(confRev,dataSet)和(dataSet,ndsCom)。
多字段組合變異在單字段變異之后進行,首先排除單字段變異導致目標設備異常帶來的影響。因此,在多字段組合變異之前,使用集合記錄所有引起目標設備異常的測試用例所采用的變異操作。每個多字段組合包含個 字段,對于字段,其單字段變異所使用的變異操作集合為。在多字段組合變異中,可使用的變異操作集合為多字段組合的變異操作集合為,對每個多字段組合,逐一使用組合變異操作進行變異,每次組合變異產生一個測試用例。
傳統(tǒng)網絡協(xié)議模糊測試中常用的異常檢測手段主要有基于返回信息的異常分析、第三方調試器監(jiān)控和日志記錄跟蹤3種方法[11]。但由于GOOSE協(xié)議是訂閱發(fā)布式,非請求應答式,故不會有返回信息。另外,在電網嵌入式終端上安裝第三方調試程序并不可行,且由于計算和存儲等能力受限,難以對嵌入式終端的異常狀態(tài)進行日志記錄與審計。為此,本文提出基于GOOSE心跳報文和系統(tǒng)運行信息的異常監(jiān)測方法,利用GOOSE協(xié)議的傳輸機制和終端在運行過程中的可觀測的狀態(tài)信息進行異常監(jiān)測,而無須在終端上安裝額外的監(jiān)測程序。
GOOSE協(xié)議使用一種時間逐漸加長的重傳機制來保證通信可靠性。報文發(fā)送過程中變位報文和心跳報文結合,傳輸機制如圖2所示。當新的事件發(fā)生,先發(fā)送第一幀報文,再發(fā)送兩次重傳報文,此時的最短重傳時間為T1,隨后重傳時間T2、T3逐漸加長,分別以T2和T3的間隔重傳一次報文,最后重傳時間增至最大值T0,傳輸達到穩(wěn)態(tài)。穩(wěn)態(tài)情況下持續(xù)重傳報文,直到新事件發(fā)生。GOOSE告警機制規(guī)定:在2倍允許生存時間內(一般為4T0)沒有收到下一幀重傳報文,則判斷通信中斷。在實際的智能變電站中T0通常取3 s或5 s,根據此機制,當4T0時間內沒有接收到被測終端的心跳報文時,則判斷被測終端發(fā)生異常導致通信中斷。
圖2 GOOSE傳輸機制Fig. 2 GOOSE transmission mechanism
基于心跳報文的異常監(jiān)測方法適用于被測終端發(fā)生如宕機等嚴重異?,F(xiàn)象。實際中,還存在其他異?,F(xiàn)象,如通信模塊異常、進程中斷等,這些情況下終端的心跳報文依然正常,此時則需要依據下列系統(tǒng)運行信息進行輔助監(jiān)測。
(1)數據采集與監(jiān)控系統(tǒng)(supervisory control and data acquisition,SCADA)后臺告警信息。位于智能變電站站控層的SCADA系統(tǒng)對現(xiàn)場的運行設備進行監(jiān)視和控制,并提供各類信號報警功能。
(2)設備操作面板告警信息。智能變電站中測控裝置等設備通常配置了一塊操作面板,提供設備操作、設備狀態(tài)信息查看和異常告警等功能。
(3)設備指示燈告警。變電站所有設備都具有“運行”和“告警”等指示燈,可用于異常判斷。
GOOSE協(xié)議解析漏洞挖掘系統(tǒng)架構如圖3所示,包含的主要功能模塊如下。
圖3 GOOSE協(xié)議解析漏洞挖掘系統(tǒng)架構Fig. 3 Architecture of GOOSE protocol parsing vulnerabilities mining system
(1)報文捕獲模塊:捕獲過程層網絡中被測終端接收的GOOSE報文,以.pcap格式存儲,作為報文樣本構造模塊的輸入。
(2)報文樣本構造模塊:解析存儲的GOOSE報文字段值,根據GOOSE協(xié)議規(guī)范構造報文樣本。
(3)報文變異模塊:包含3個變異器,每個變異器都有對外接口,以供測試用例構造模塊調用。
(4)測試用例構造模塊:利用報文變異模塊提供的接口對報文樣本進行單字段和多字段變異,構造測試用例集合,以1 s的間隔發(fā)送至被測終端,同時維護一個暫存已發(fā)送測試用例的報文隊列。
(5)異常監(jiān)測模塊:結合心跳報文和系統(tǒng)運行信息監(jiān)測被測終端異常情況,若模塊監(jiān)測到心跳報文異常,自動存儲引起異常的測試用例,若終端面板或者監(jiān)控后臺顯示異常,則需手動存儲。存儲引起異常的測試用例之前,以10 s的間隔重新發(fā)送隊列中的報文,若被測終端再次發(fā)生異常,則準確定位到引起異常的測試用例。
使用本文所提出的GOOSE協(xié)議解析漏洞挖掘方法進行實驗測試的流程如圖4所示。
圖4 測試流程Fig. 4 Flowchart of test
(1)測試準備階段,分析SCD文件,確定被測終端發(fā)布和訂閱的GOOSE服務,將被測終端訂閱的GOOSE報文作為樣本報文,發(fā)布的GOOSE報文作為心跳報文,利用網絡捕包工具分析樣本報文的組播MAC地址和心跳報文的源MAC地址。
(2)測試執(zhí)行階段,使用本文設計的模糊測試系統(tǒng)根據步驟(1)中記錄的樣本報文組播MAC地址捕獲樣本報文,執(zhí)行模糊測試,系統(tǒng)自動完成樣本報文的解析和變異,構造測試用例發(fā)送至待測終端,系統(tǒng)自身維護一個30個報文的序列,利用第2節(jié)所提出的異常監(jiān)測方法監(jiān)測被測終端的運行情況。
(3)異常處理階段,若發(fā)現(xiàn)被測終端出現(xiàn)異常,則重新發(fā)送當前已發(fā)送報文序列,觀測設備是否再次發(fā)生異常,并記錄再次引起異常的測試用例,以便進行詳細分析。
為驗證本文所提出模糊測試方法能否有效挖掘電網嵌入式終端在解析GOOSE協(xié)議時存在的漏洞,及系統(tǒng)架構與測試流程的合理性,本文實現(xiàn)了圖3所示模糊測試系統(tǒng),并按照3.2節(jié)的測試流程,在依據IEC 61850“三層兩網”結構建設的智能變電站實驗室環(huán)境中進行了測試。如圖5所示的實驗拓撲結構中,監(jiān)控主機運行SCADA系統(tǒng),可監(jiān)控各個設備的運行狀態(tài),并向間隔層測控裝置下發(fā)MMS控制命令報文控制刀閘動作。位于間隔層的測控裝置接收MMS控制命令報文,并向過程層智能終端發(fā)送GOOSE控制命令。位于過程層的智能終端執(zhí)行控制命令,直接控制刀閘,并向測控裝置上送刀閘的狀態(tài)信息。模糊測試主機通過光電轉換器接入過程層交換機的鏡像端口。本實驗選擇測控裝置和智能終端作為模糊測試目標,它們代表了GOOSE通信中兩類最重要的終端。
圖5 實驗系統(tǒng)拓撲Fig. 5 Topology of experiment system
經過查詢SCD文件,該測控裝置和智能終端之間GOOSE服務的“發(fā)布-訂閱”關系如圖6所示。其中,智能終端訂閱了測控裝置發(fā)布的GOOSE 0 x1053服務,測控裝置訂閱了智能終端發(fā)布的 GOOSE 0 x104 E 服務。
圖6 智能終端和測控裝置“發(fā)布-訂閱”關系Fig. 6“Publish-subscribe” diagram of intelligent terminal and measurement and control equipment
對測控裝置和智能終端的測試結果如表6所示,本次測試共發(fā)送GOOSE測試用例18895個,每種類型變異策略所對應的測試用例數量統(tǒng)計如表7所示,測試共耗時將近6 h。
表6 測控裝置和智能終端的模糊測試結果Table 6 Fuzzing results of measurement and control equipment and intelligent terminal
表7 測試用例數量Table 7 The number of test cases
(1)測控裝置測試結果。對測控裝置進行模糊測試時,觀察到監(jiān)控后臺和測控裝置操作面板上出現(xiàn)“GOOSE網中斷”告警,如圖7和圖8所示。此時,監(jiān)控后臺下發(fā)刀閘開合指令后顯示“執(zhí)行失敗”,但刀閘狀態(tài)已發(fā)生預期變化。若手動開合刀閘,不能在監(jiān)控后臺觀測到刀閘狀態(tài)變化。測控裝置重啟后,功能恢復正常。
圖7 監(jiān)控后臺“GOOSE網中斷”告警信號Fig. 7“GOOSE network interruption” alarm signals of the monitoring system
圖8 操作面板“GOOSE網中斷”告警信號Fig. 8“GOOSE network interruption” alarm signals of operation panel
(2)智能終端測試結果。對智能終端進行模糊測試時,觀察到監(jiān)控后臺出現(xiàn)“GOOSE網中斷”告警,如圖7所示,智能終端面板上“運行燈”滅,“告警燈”亮,其他指示燈均顯示異常,如圖9所示。此時,監(jiān)控后臺下發(fā)刀閘開合指令后顯示“執(zhí)行失敗”,刀閘狀態(tài)未發(fā)生預期變化。若手動進行刀閘開合,可以在監(jiān)控后臺觀測到刀閘狀態(tài)變化。智能終端重啟后,功能恢復正常。
圖9 智能終端指示燈異常Fig. 9 Abnormal indicator light of intelligent terminal
分析測試結果之前,需要了解變電站綜合自動化系統(tǒng)中的遙控功能,一次遙控操作如圖10所示。
圖10 遙控流程Fig. 10 Flowchart of remote control
4.3.1 測控裝置測試結果分析
本文對測控裝置進行模糊測試時使用的樣本報文為 GOOSE 0 x104 E,此報文由智能終端發(fā)送給測控裝置,用于上送刀閘變位信息。經調研,該測控裝置采用模塊化設計,此業(yè)務報文由智能開入模塊接收并處理?;螆笪膶е轮悄荛_入模塊發(fā)生異常,使得測控裝置不能正確接收智能終端上送的刀閘變位信息,而監(jiān)控后臺此時接收到的仍然是遙控命令執(zhí)行前的狀態(tài)信息,因此在將變位信息與遙控命令作對比時判斷為“執(zhí)行失敗”。但由于測控裝置的其他功能模塊工作正常,監(jiān)控后臺下發(fā)的遙控執(zhí)行命令被正常處理,刀閘狀態(tài)發(fā)生變化。實際運行中,若測控裝置受到此類畸形報文攻擊,監(jiān)控后臺將不能正常觀測一次設備的正確狀態(tài),影響運維人員的判斷和操作,并且此故障狀態(tài)僅能通過重啟測控裝置解除,可能造成更大的損失。
圖11 a)為本次測試使用的樣本報文中all-Data數據集字段,包含24個數據,數據類型包括bit-string(位串)和utc-time(UTC時間)。在本次測試中,發(fā)現(xiàn)引起測控裝置異常的畸形報文總共有3個,分別由allData數據集中第17、21、23個數據變異而來,均為bi-string類型。圖11 b)為樣本報文的allData數據集字段第23個數據發(fā)生變異得到的畸形報文。具體為該數據第一個字節(jié)的最低一位比特發(fā)生翻轉,由原本的“x84”變異為“x85”。在GOOSE協(xié)議規(guī)范中,allData數據集中的數據使用ASN.1編碼為TLV的格式,發(fā)生變異的字節(jié)“x84”為bit-string類型字段的標識,而變異后的“x85”為integer類型(整型)字段的標識。測控裝置的智能開入模塊在處理此畸形報文時將原本的bit-string類型的數據解析為integer類型,而模塊內缺乏相應的異常數據處理機制,因此發(fā)生異常。
圖11 測控裝置模糊測試的GOOSE報文的allData字段Fig. 11 AllData field of GOOSE message used for fuzzing of measurement and control equipment
4.3.2 智能終端測試結果分析
本文對智能終端進行模糊測試時使用的樣本報文為 GOOSE 0 x1 053,次報文由測控裝置發(fā)送給智能終端,攜帶遙控執(zhí)行命令。經調研,該智能終端同樣使用模塊化設計,此業(yè)務報文由開出模塊接收并處理?;螆笪膶е麻_出模塊發(fā)生異常后,智能終端不能正確處理測控裝置下發(fā)的遙控執(zhí)行命令,因此刀閘狀態(tài)未發(fā)生預期變化。此時,刀閘狀態(tài)和遙控命令的預期狀態(tài)不一致,監(jiān)控后臺判斷為“執(zhí)行失敗”。但由于智能終端的其他模塊工作正常,手動改變刀閘狀態(tài)后,刀閘狀態(tài)信息可以正常上送,監(jiān)控后臺可以觀測到刀閘狀態(tài)變化。實際運行中,若智能終端受到此類畸形報文攻擊,一次設備將不能執(zhí)行監(jiān)控后臺的控制命令,且此故障狀態(tài)僅能通過重啟智能終端解除,可能造成更大的損失。
圖12為對智能終端進行模糊測試時使用的樣本報文,該報文為測控裝置向智能終端發(fā)送的攜帶遙控執(zhí)行命令的GOOSE報文。引起智能終端異常的畸形報文由goID字段變異產生,畸形報文如圖13所示。具體變異為goID字段第2個字節(jié)的最高兩位比特同時發(fā)生翻轉,由原本的“x17”變異為“xd7”。在GOOSE協(xié)議規(guī)范中,報文的每個字段經ASN.1編碼為TLV的格式,發(fā)生變異的字節(jié)為g o I D字段T L V的Length部分,該字節(jié)代表goID字段內容的字節(jié)數。智能終端的開出模塊在解析此畸形報文的goID字段時,按照錯誤的長度“xd7”進行解析,即將goID字段的后續(xù)字段解析為goID字段的內容,解析發(fā)生錯誤導致智能終端發(fā)生異常。
圖12 智能終端模糊測試使用的GOOSE樣本報文Fig. 12 GOOSE sample message used for fuzzing of intelligent terminal
圖13 引起智能終端異常的GOOSE測試用例Fig. 13 GOOSE test case causing abnormality of intelligent terminal
防范上述畸形報文攻擊可從終端生產廠家和系統(tǒng)運維2個方面著手。
對終端生產廠家來說,應加強出廠前安全測試并做好漏洞修補,特別是對業(yè)務相關的模塊進行改進。一方面,需嚴格按照IEC 61850一致性測試標準,對接收GOOSE報文中stNum和sqNum進行檢查,并結合SCD文件中對通信業(yè)務的定義,檢查接收報文的各個字段是否符合SCD文件中的配置,確保終端能直接丟棄不符合規(guī)范的報文。另一方面,利用本文提出的畸形報文構造方法對終端進行否定測試,對發(fā)現(xiàn)的問題通過改進程序予以解決,保證終端在解析畸形報文時具有錯誤處理措施,以彌補一致性測試缺少對數值越界、格式化字符串、編碼異常和比特翻轉等類型畸形數據測試的缺陷。
對系統(tǒng)運維單位來說,可在系統(tǒng)中部署額外的報文檢測裝置進行畸形報文檢測和過濾。智能變電站中,一個通信環(huán)境中的電力業(yè)務往往是固定的,檢測裝置可通過學習當前環(huán)境中的通信報文,記錄報文中的參數和報文攜帶的數據量、數據類型等特征,實現(xiàn)對畸形報文的判別和過濾。
深入挖掘電網嵌入式終端可能存在的安全漏洞,分析漏洞產生的原因,及時提出整改建議,既可以幫助廠家在終端上線前進行漏洞修補,也可以指導新能源場站安全防護措施的部署。
本文針對現(xiàn)有工控協(xié)議模糊測試方法無法適用于GOOSE協(xié)議和未考慮到嵌入式終端系統(tǒng)特點的問題,提出了基于模糊測試的GOOSE協(xié)議解析漏洞挖掘方法。通過深入分析GOOSE協(xié)議格式、字段類型和編碼方法,提出了3種變異策略,能較為全面地發(fā)現(xiàn)GOOSE協(xié)議解析過程中可能存在的漏洞;考慮電網嵌入式終端計算和存儲能力的限制,提出了兩種異常監(jiān)測方法,可從多個角度對模糊測試過程中嵌入式終端發(fā)生的異常情況進行監(jiān)測;為了便于本文方法的實施,論文給出了系統(tǒng)架構和測試流程;在智能變電站實驗室環(huán)境中,對某廠家智能終端和測控裝置進行了實驗測試,成功發(fā)現(xiàn)2個未公開安全漏洞,驗證了本方法的有效性。
本文方法可用于新能源場站和智能變電站嵌入式終端的GOOSE協(xié)議解析漏洞挖掘,對標準(IEC 61850)中的MMS協(xié)議和SV協(xié)議漏洞挖掘也具有參考意義;實驗測試發(fā)現(xiàn)的2個GOOSE協(xié)議解析漏洞及其防范建議,可直接作為終端整改和運行防護的依據。后續(xù)將對更多類型的終端進行測試,提出具有針對性的安全防護方案,以保障新能源場站和智能變電站的安全運行,滿足新型電力系統(tǒng)對發(fā)電側數據的“可觀、可測、可控”需求。