工業(yè)控制系統(tǒng)信息安全技術(shù)國(guó)家工程實(shí)驗(yàn)室工業(yè)控制系統(tǒng)安全檢測(cè)中心 李航
從“0”到“1”:我國(guó)自主研發(fā)工控協(xié)議通訊健壯性測(cè)試平臺(tái)
工業(yè)控制系統(tǒng)信息安全技術(shù)國(guó)家工程實(shí)驗(yàn)室工業(yè)控制系統(tǒng)安全檢測(cè)中心 李航
針對(duì)工業(yè)控制系統(tǒng)的信息安全問(wèn)題,工業(yè)控制系統(tǒng)信息安全技術(shù)國(guó)家工程實(shí)驗(yàn)室工業(yè)控制系統(tǒng)安全檢測(cè)中心(“檢測(cè)中心”)提出一個(gè)想法,就是從檢測(cè)入手,涵蓋整個(gè)工控系統(tǒng)的設(shè)計(jì)、研發(fā),到最后的運(yùn)行,進(jìn)行全生命周期的跟蹤,這樣才能保證整個(gè)工業(yè)控制系統(tǒng)最根本的一個(gè)免疫力的提升。面對(duì)工業(yè)控制系統(tǒng)的信息安全問(wèn)題,我們不能僅僅是“病了吃藥”,也要增加其自身的免疫力,提升抵抗力。這也是工業(yè)控制系統(tǒng)安全檢測(cè)中心工作的主要目的。我今天將介紹的是我國(guó)自主研發(fā)的工控協(xié)議通訊健壯性測(cè)試平臺(tái)。
圖1 工業(yè)控制系統(tǒng)架構(gòu)圖
工業(yè)控制系統(tǒng)是由各種自動(dòng)化組件以及對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行采集、監(jiān)測(cè)的過(guò)程控制組件,共同構(gòu)成的確保工業(yè)基礎(chǔ)設(shè)施自動(dòng)化運(yùn)行、過(guò)程控制與監(jiān)控的業(yè)務(wù)流程管控系統(tǒng),如圖1所示。主要由數(shù)據(jù)采集與監(jiān)控系統(tǒng)(SCADA)、分布式控制系統(tǒng)(DCS)、可編程邏輯控制器(PLC)等組成。
工業(yè)控制系統(tǒng)普遍存在于幾乎所有的工業(yè)領(lǐng)域和關(guān)鍵基礎(chǔ)設(shè)施中,包括核設(shè)施、鋼鐵、有色、化工、石油石化、電力、天然氣、先進(jìn)制造、水利樞紐、環(huán)境保護(hù)、鐵路、城市軌道交通、民航、城市供水供氣供熱以及其他與國(guó)計(jì)民生緊密相關(guān)的領(lǐng)域,工業(yè)控制系統(tǒng)已是國(guó)家安全戰(zhàn)略的重要組成部分。
分布式控制系統(tǒng),也稱為分散式控制系統(tǒng),即DCS,是一個(gè)由過(guò)程控制級(jí)和過(guò)程監(jiān)控級(jí)組成的以通信網(wǎng)絡(luò)為紐帶的多級(jí)計(jì)算機(jī)系統(tǒng),綜合了計(jì)算機(jī)(Computer)、通訊(Communication)、顯示(CRT)和控制(Control)等4C技術(shù),其基本思想是分散控制、集中操作、分級(jí)管理、配置靈活、組態(tài)方便。
SCADA(Supervisory Control And Data Acquisition)系統(tǒng),即數(shù)據(jù)采集與監(jiān)視控制系統(tǒng)。SCADA系統(tǒng)是以計(jì)算機(jī)為基礎(chǔ)的DCS與電力自動(dòng)化監(jiān)控系統(tǒng)。它應(yīng)用領(lǐng)域很廣,可以應(yīng)用于電力、冶金、石油、化工、燃?xì)狻㈣F路等領(lǐng)域的數(shù)據(jù)采集與監(jiān)視控制以及過(guò)程控制等諸多領(lǐng)域。
可編程邏輯控制器,即PLC,它采用一類可編程的存儲(chǔ)器,用于其內(nèi)部存儲(chǔ)程序,執(zhí)行邏輯運(yùn)算、順序控制、定時(shí)、計(jì)數(shù)與算術(shù)操作等面向用戶的指令,并通過(guò)數(shù)字或模擬式輸入/輸出控制各種類型的機(jī)械或生產(chǎn)過(guò)程。實(shí)質(zhì)是一種專用于工業(yè)控制的計(jì)算機(jī),其硬件結(jié)構(gòu)基本上與微型計(jì)算機(jī)相同。
工業(yè)控制系統(tǒng)大量應(yīng)用了通訊技術(shù)、信息化技術(shù)、網(wǎng)絡(luò)技術(shù)和控制技術(shù)等,廣泛應(yīng)用在工業(yè)領(lǐng)域的計(jì)算機(jī)系統(tǒng)中。工業(yè)控制系統(tǒng)的本質(zhì)就是計(jì)算機(jī)系統(tǒng)。
PC也好,智能手機(jī)也好,都可以被看作一種小型的計(jì)算機(jī)系統(tǒng)。計(jì)算機(jī)系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)組成,通過(guò)操作系統(tǒng)和應(yīng)用軟件不斷調(diào)用硬件資源進(jìn)行工作,在硬件和軟件之間進(jìn)行通訊。硬件系統(tǒng)是借助電、磁、光、機(jī)械等原理構(gòu)成的各種物理部件的有機(jī)組合,是系統(tǒng)賴以工作的實(shí)體。軟件是各種程序和文件,用于指揮整個(gè)系統(tǒng)按指定要求進(jìn)行工作。
CPU能夠讀懂的代碼就是機(jī)器語(yǔ)言(machine language),即計(jì)算機(jī)可以直接識(shí)別的二進(jìn)制代碼,機(jī)器語(yǔ)言是一種指令集的體系,這種指令集,稱為機(jī)器碼(machine code),是計(jì)算機(jī)的CPU可直接解讀的數(shù)據(jù)。計(jì)算機(jī)直接識(shí)別的二進(jìn)制代碼由兩個(gè)基本字符“0”、“1”組成:(1)從物理角度,通常理解為低電平和高電平;(2)計(jì)算機(jī)直接可以讀懂的就是“0”和“1”有規(guī)律排列的二進(jìn)制代碼。包括計(jì)算機(jī)系統(tǒng)內(nèi)部,也包括計(jì)算機(jī)之間的通訊。
工業(yè)控制系統(tǒng)遵循計(jì)算機(jī)系統(tǒng)指令集的特點(diǎn),即機(jī)器語(yǔ)言,“0”與“1”的排列組合。研究機(jī)器語(yǔ)言或者研究“0”和“1”,它的不斷排列會(huì)不會(huì)是一個(gè)沒(méi)有邊界的研究?實(shí)際上不是的。因?yàn)樵谌魏挝锢項(xiàng)l件下,工業(yè)控制系統(tǒng)的設(shè)備是有限的,工業(yè)控制系統(tǒng)的指令是有限的。從另一個(gè)角度考慮,既然工業(yè)控制系統(tǒng)是個(gè)計(jì)算機(jī)系統(tǒng),如果把它整個(gè)看成一個(gè)大的計(jì)算機(jī),在工業(yè)控制系統(tǒng)設(shè)備與設(shè)備之間的通訊,就可以看成計(jì)算機(jī)之間的指令之間不斷地傳輸、運(yùn)算、控制,統(tǒng)稱為工業(yè)控制系統(tǒng)的協(xié)議。當(dāng)然這種協(xié)議可能包括計(jì)算機(jī)方面的TCP/IP協(xié)議。對(duì)工業(yè)控制系統(tǒng)來(lái)說(shuō),它是一個(gè)最常用的搭建網(wǎng)絡(luò)技術(shù)的平臺(tái),允許監(jiān)控和控制,其內(nèi)部的通訊控制指令集即工業(yè)控制系統(tǒng)協(xié)議,MODBUS IP協(xié)議,也是有限的。為什么要考慮這些?因?yàn)槲覀儼l(fā)現(xiàn),如果硬件CPU有后門(mén),無(wú)線或是脈沖信號(hào)觸發(fā)后門(mén)引起的最終漏洞的原因都是“0”到“1”的變化,一個(gè)脈沖或者一個(gè)持續(xù)的“0”或“1”,永遠(yuǎn)都擺脫不了“0”和“1”這個(gè)排序。因此,研究工業(yè)控制系統(tǒng)最基本的安全問(wèn)題,我個(gè)人認(rèn)為是研究“0”和“1”,即它的協(xié)議。
工業(yè)控制系統(tǒng)協(xié)議出現(xiàn)漏洞的事件比較多。安全事件,從控制器的角度來(lái)說(shuō),可能引起的就是工業(yè)控制協(xié)議的安全問(wèn)題,是不穩(wěn)定的漏洞。因此,檢測(cè)中心提出,研究工控安全問(wèn)題,首先就要從它的協(xié)議入手,從設(shè)計(jì)到研發(fā),一直到整個(gè)運(yùn)行過(guò)程,不斷地去積累,不斷地去測(cè)試它的健壯性,提高控制器本身的一個(gè)抗干擾能力。
在這方面國(guó)外已經(jīng)走得比較靠前了,目前有ISASecure認(rèn)證。它是基于IEC 62443標(biāo)準(zhǔn)系列發(fā)展安全認(rèn)證流程的聯(lián)盟,目前被公認(rèn)是工業(yè)控制系統(tǒng)領(lǐng)域最專業(yè)的安全認(rèn)證流程。ISASecure目前包含嵌入式設(shè)備安全認(rèn)證(EDSA)、系統(tǒng)安全認(rèn)證(SSA)和安全開(kāi)發(fā)生命周期認(rèn)證(SDLA)三個(gè)項(xiàng)目。如圖2所示,不管是EDSA認(rèn)證,還是SSA認(rèn)證,其基礎(chǔ)均是設(shè)備和系統(tǒng)的通信健壯性測(cè)試,在保證該前提下,不斷地評(píng)估上層軟件的安全性、功能的安全性,才能保證整個(gè)系統(tǒng)相對(duì)的安全性。
圖2 嵌入式設(shè)備安全認(rèn)證(EDSA)及系統(tǒng)安全認(rèn)證(SSA)
目前,國(guó)際上已經(jīng)獲得ISASecure認(rèn)證認(rèn)可的通訊穩(wěn)健性(CRT)測(cè)試工具有芬蘭Codenomicon的Defensics,日本FFRI的RavenforICS以及加拿大Wurldtech的Achilles。其中相對(duì)比較有名的是Wurldtech的Achilles,Wurldtech已經(jīng)被GE收購(gòu)。因此,使用國(guó)外測(cè)試工具存在兩個(gè)方面的問(wèn)題:其一,GE公司既生產(chǎn)控制器PLC、相關(guān)的工業(yè)控制系統(tǒng),又去做測(cè)試認(rèn)證,檢測(cè)產(chǎn)品的安全性。其二,所有測(cè)試的最終數(shù)據(jù)必須返回到GE公司進(jìn)行存檔。雖然GE同中國(guó)用戶會(huì)簽訂保密協(xié)議,但是我們所有控制系統(tǒng)的數(shù)據(jù)他們都有掌握,這其實(shí)也是一個(gè)很大的安全問(wèn)題。那我們自己的測(cè)試工具在哪里?
圖3 B/S操作界面
由于我國(guó)對(duì)整個(gè)工業(yè)控制系統(tǒng)的通訊健壯性測(cè)試還是空白,檢測(cè)中心針對(duì)工控安全這個(gè)最基本的問(wèn)題,為了解決這一短擺,自主研發(fā)了工業(yè)控制系統(tǒng)通訊健壯性測(cè)試平臺(tái)。該平臺(tái)是為控制設(shè)備生產(chǎn)商、最終用戶以及類似我們這樣的檢測(cè)單位,定制的一個(gè)測(cè)試設(shè)備,主要是測(cè)試控制器本身網(wǎng)絡(luò)安全的健壯性,能夠幫助用戶發(fā)現(xiàn)工控系統(tǒng)網(wǎng)絡(luò)中已知和未知的漏洞。本測(cè)試平臺(tái)采用B/S模式,運(yùn)用強(qiáng)大的模糊測(cè)試引擎,進(jìn)行包括工業(yè)控制協(xié)議的模糊測(cè)試,以及進(jìn)行整個(gè)工業(yè)控制系統(tǒng)的網(wǎng)絡(luò)壓力測(cè)試等。如圖3所示為B/S操作界面,圖4為測(cè)試工具的硬件平臺(tái)。
圖4 測(cè)試工具的硬件平臺(tái)
圖5 所示為工業(yè)控制系統(tǒng)通訊協(xié)議健壯性測(cè)試平臺(tái)的連接方式。在整個(gè)系統(tǒng)或者是被測(cè)設(shè)備上下位機(jī)之間建立橋接模式。在不進(jìn)行分析,不進(jìn)行攻擊測(cè)試的時(shí)候,它是by pass的,對(duì)被測(cè)設(shè)備沒(méi)有任何的干擾。進(jìn)行測(cè)試時(shí),相對(duì)應(yīng)的引擎會(huì)針對(duì)它的通訊協(xié)議進(jìn)行監(jiān)控,后臺(tái)不斷分析其具體模式。并且平臺(tái)帶有一定的自學(xué)習(xí)能力,能夠?qū)W習(xí)所用的協(xié)議是什么內(nèi)容、什么格式。
圖5 工業(yè)控制系統(tǒng)通訊協(xié)議健壯性測(cè)試平臺(tái)的連接方式
4.1 為什么要采用模糊測(cè)試
模糊測(cè)試(fuzzing)是一類安全性測(cè)試的方法,是一種通過(guò)向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來(lái)發(fā)現(xiàn)漏洞的方法,是一種黑盒測(cè)試的方法。
在模糊測(cè)試中,用隨機(jī)壞數(shù)據(jù)(也稱做 fuzz)攻擊一個(gè)設(shè)備、程序或者系統(tǒng),然后觀察哪里遭到了破壞。模糊測(cè)試的技巧在于它是不符合邏輯的:自動(dòng)模糊測(cè)試不去猜測(cè)哪個(gè)數(shù)據(jù)會(huì)導(dǎo)致破壞(就像人工測(cè)試員那樣),而是將盡可能多的雜亂數(shù)據(jù)投入程序中。由這個(gè)測(cè)試驗(yàn)證過(guò)的失敗模式令人感到震撼,因?yàn)槿魏伟催壿嬎伎嫉娜硕疾粫?huì)想到這種失敗。
工業(yè)控制系統(tǒng)的設(shè)計(jì)人員最大的特點(diǎn)是,所有的研發(fā)都按照自己的設(shè)計(jì)流程來(lái),自己的邏輯該怎么樣就怎么樣,他不會(huì)考慮中間邏輯混亂了、變化了之后會(huì)怎樣。整個(gè)調(diào)試系統(tǒng)也一樣,如果按照自己設(shè)計(jì)的流程,邏輯走得通,這套工控系統(tǒng)就OK。他沒(méi)有專門(mén)考慮整個(gè)邏輯發(fā)生變化,或者是不合邏輯的情況出現(xiàn)時(shí),工控系統(tǒng)到底是什么樣的。為什么采用模糊測(cè)試呢?模糊測(cè)試并沒(méi)有真正意義上的規(guī)則可以遵循,衡量模糊測(cè)試成功與否的唯一標(biāo)準(zhǔn)就是測(cè)試得到的結(jié)果,它不是按照設(shè)計(jì)人員的思維去測(cè)試,它打破了按邏輯出發(fā)的方式,沒(méi)有真正意義上的規(guī)則可以遵循。模糊測(cè)試不是簡(jiǎn)單的枚舉或遍歷,需要預(yù)測(cè)產(chǎn)品中存在哪些類型的錯(cuò)誤,以及哪些輸入能夠引發(fā)這些錯(cuò)誤。所以我們從開(kāi)發(fā)人員的思路來(lái)確定模糊測(cè)試的方法,并且從開(kāi)發(fā)人員容易忽視的角度來(lái)進(jìn)行模糊測(cè)試算法進(jìn)行設(shè)計(jì),讓更多的漏洞提前暴露出來(lái)。
模糊測(cè)試包括六個(gè)步驟:確定測(cè)試目標(biāo)、確定輸入向量、生成模糊測(cè)試數(shù)據(jù)、執(zhí)行模糊測(cè)試數(shù)據(jù)、監(jiān)事異常、判定發(fā)現(xiàn)的漏洞是否可被利用,最終發(fā)現(xiàn)異常,確定漏洞屬于哪個(gè)等級(jí)。主要方法是使用兩個(gè)模糊器,一是基于變異的模糊器,一是基于生成的模糊器,最終形成測(cè)試用例,進(jìn)行測(cè)試來(lái)驗(yàn)證它的控制器是否有相關(guān)的問(wèn)題。
4.2 主要特點(diǎn)和功能
(1)模糊測(cè)試。
· 通過(guò)對(duì)不同協(xié)議的語(yǔ)法測(cè)試來(lái)探測(cè)被測(cè)設(shè)備對(duì)協(xié)議實(shí)現(xiàn)的健壯性;
· 通過(guò)對(duì)被測(cè)設(shè)備進(jìn)行壓力測(cè)試來(lái)測(cè)試其抗壓能力;
· 通過(guò)Fuzzer來(lái)進(jìn)行各個(gè)協(xié)議的模糊測(cè)試。
(2)通過(guò)對(duì)已有的已知協(xié)議進(jìn)行模糊測(cè)試。
· 包括TCP/IP協(xié)議,工業(yè)控制協(xié)議,例如:MODBUS、MMS、GOOSE等;
· 對(duì)以上協(xié)議進(jìn)行構(gòu)造錯(cuò)誤報(bào)文發(fā)送到被測(cè)設(shè)備;
(3)對(duì)未知的私有協(xié)議進(jìn)行模糊測(cè)試。
(4)監(jiān)控功能。
· 監(jiān)控被測(cè)設(shè)備是否能正確處理這些錯(cuò)誤數(shù)據(jù);
· 如果設(shè)備出現(xiàn)問(wèn)題,是否能夠恢復(fù)。
(5)端口掃描。
(6)測(cè)試用例加載:加載可配置參數(shù)的不同測(cè)試用例(根據(jù)協(xié)議分)。
(7)網(wǎng)絡(luò)監(jiān)控:監(jiān)控被測(cè)設(shè)備的網(wǎng)絡(luò)狀態(tài)。
(8)漏洞挖掘:通過(guò)執(zhí)行測(cè)試用例來(lái)進(jìn)行漏洞挖掘。
(9)根源分析與回溯。
(10)事件日志。