吳波,云雷,金先濤,劉北水
(工業(yè)和信息化部電子第五研究所,廣東 廣州 510610)
?
工業(yè)監(jiān)控組態(tài)軟件模糊測試方法研究
吳波,云雷,金先濤,劉北水
(工業(yè)和信息化部電子第五研究所,廣東廣州510610)
針對當前工業(yè)監(jiān)控組態(tài)軟件 (以下簡稱監(jiān)控組態(tài)軟件)信息安全保障水平低、信息安全漏洞多、危害大,以及缺乏高效的漏洞檢測方法的問題,提出了一種面向監(jiān)控組態(tài)軟件的漏洞挖掘方法,采用模糊測試技術來檢測監(jiān)控組態(tài)軟件的漏洞。分析了監(jiān)控組態(tài)軟件的特點,設計了針對監(jiān)控組態(tài)軟件的模糊測試框架,并進一步地對模糊測試中測試數(shù)據(jù)的生成方法進行了重點論述。結果表明:該模糊測試框架和測試數(shù)據(jù)的生成方法能夠較好地應用于監(jiān)控組態(tài)軟件的漏洞挖掘工作中。
工業(yè)監(jiān)控組態(tài)軟件;漏洞挖掘;模糊測試;遺傳算法
監(jiān)控組態(tài)軟件是一種可以實現(xiàn)數(shù)據(jù)采集和監(jiān)視控制的工業(yè)專用軟件。它被置于工業(yè)企業(yè)信息系統(tǒng)層次結構中的過程監(jiān)控層,運行在操作站、操作面板等人機界面 (HMI:Human Machine Interface)的監(jiān)控設備中。監(jiān)控組態(tài)軟件在工業(yè)控制系統(tǒng)中應用廣泛,是我國諸多關鍵基礎設施的自動化控制系統(tǒng)的重要組成部分,是實現(xiàn)核設施、電力、石油石化、化工、鋼鐵和冶金等重要工業(yè)系統(tǒng)安全、穩(wěn)定地運行的重要軟件。
傳統(tǒng)的監(jiān)控組態(tài)軟件一般采用專用技術開發(fā),應用環(huán)境相對封閉,考慮信息安全問題不足,安全防護能力薄弱,存在大量的信息安全漏洞。隨著信息和通信技術 (ICT:Information and Communication Techno1ogy)的發(fā)展,以及工業(yè)化和信息化的深度融合,通用IT技術和產(chǎn)品被集成到了監(jiān)控組態(tài)軟件中,并且監(jiān)控組態(tài)軟件與企業(yè)經(jīng)營管理系統(tǒng)甚至互聯(lián)網(wǎng)的連接也變得日益普遍,這在很大程度上提高了生產(chǎn)效率,改進了企業(yè)的管理水平,但同時也引入了大量的信息安全風險[1]。近年來發(fā)生的多起工業(yè)控制系統(tǒng)信息安全事件大多都利用了監(jiān)控組態(tài)軟件中的安全漏洞,例如:2010年的Stuxnet病毒利用了西門子監(jiān)控組態(tài)軟件WinCC中的硬編碼漏洞和DLL加載策略漏洞;2014年的Havex病毒利用了監(jiān)控組態(tài)軟件中OPC Server組件的相關漏洞[2]。
針對軟件中存在的各種安全漏洞的檢測和分析技術一直受到了學術界和產(chǎn)業(yè)界的廣泛關注。目前,軟件安全漏洞的測試分析方法主要有靜態(tài)分析、形式化安全測試、基于模型的安全測試、語法測試、基于故障注入的安全測試和模糊測試等幾種。其中,模糊測試具有可用性好、誤報率低、測試效率高和對目標軟件依賴低等特點,在軟件漏洞挖掘領域被廣泛地使用[3]。但是,由于模糊測試技術具有測試代碼深度有限、測試數(shù)據(jù)不能靈活地調整和測試智能性低等缺點,因而其往往不能滿足監(jiān)控組態(tài)軟件等工業(yè)控制系統(tǒng)組件的測試需求[4]。
本文在分析監(jiān)控組態(tài)軟件的特點的基礎上,提出了基于遺傳算法的監(jiān)控組態(tài)軟件的模糊測試方法。首先,分析了現(xiàn)有的模糊測試技術的流程、關鍵技術和應用特點;然后,分析了監(jiān)控組態(tài)軟件的體系結構和數(shù)據(jù)流等信息安全特性;最后,基于監(jiān)控組態(tài)軟件的信息安全特性,提出了監(jiān)控組態(tài)軟件的模糊測試框架,并將遺傳算法引入到了模糊測試的測試數(shù)據(jù)的生成過程中,以提高測試效率,為工業(yè)監(jiān)控組態(tài)軟件的漏洞挖掘提供支撐。
模糊測試通過構造出能使軟件崩潰的畸形輸入數(shù)據(jù)來發(fā)現(xiàn)系統(tǒng)中存在的缺陷,它使用大量的半有效的數(shù)據(jù)作為軟件輸入,以軟件是否出現(xiàn)異常作為標志來發(fā)現(xiàn)軟件中可能存在的安全漏洞。模糊測試一般包含以下幾個階段:識別目標、識別輸入、生成模糊測試數(shù)據(jù)、執(zhí)行模糊測試數(shù)據(jù)、監(jiān)視異常和分析異??衫眯?,如圖1所示[5]。
圖1 模糊測試的階段
其中,生成模糊測試數(shù)據(jù)是模糊測試中最為關鍵的一個階段。一般來說,按照測試數(shù)據(jù)的生成方式,模糊測試可以分兩類:基于生成的模糊測試和基于變異的模糊測試[6]。然而,當前模糊測試在生成測試數(shù)據(jù)階段依然具有較大的隨機性,從而導致了其在測試針對性、測試代碼覆蓋率和測試代碼深度等方面存在不足。目前,研究人員普遍將人工智能方法引入到了模糊測試的測試數(shù)據(jù)生成階段,通過啟發(fā)式的測試數(shù)據(jù)生成技術來解決這些問題。其中,遺傳算法、混合符號執(zhí)行技術和動態(tài)污點分析技術被廣泛地應用,以指導生成高質量的測試數(shù)據(jù),提高模糊測試的效率[7]。
在測試效率不斷地提升的情況下,模糊測試的發(fā)展呈現(xiàn)多樣化之勢,針對不同對象的模糊測試工具已大量地出現(xiàn),包括:針對文件格式進行模糊測試的Fi1eFuzz、SPIKEfi1e;針對網(wǎng)絡協(xié)議進行模糊測試的SPIKE、Peach;針對Web應用進行模糊測試的WebScarab、Codenomicon HTTP;針對Web瀏覽器使用的ActiveX控件進行模糊測試的COMRaider、AxMan等。每種模糊測試工具都只能針對特定的測試對象,使用特定的模糊測試方法,即使是通用的模糊測試框架,也需要用戶根據(jù)測試目標進行定制開發(fā),現(xiàn)有的模糊測試工具的適用性都十分有限[5,8]。
另外,網(wǎng)絡協(xié)議模糊測試器根據(jù)其部署方式還可以分為普通式和內聯(lián)式兩種。目前絕大多數(shù)模糊測試器均屬于普通式范疇,即將自身作為客戶端,測試對象作為服務器端;內聯(lián)式則采用中間人的方式,將自身部署在服務器和客戶端之間,對截獲的數(shù)據(jù)包進行分析和變異,實時地生成畸形報文,發(fā)送給被測對象,同時接受返回結果,決定下一步的變異策略。內聯(lián)式能夠實現(xiàn)對服務器和客戶端的雙向測試,普通式只能對服務器進行測試[9]。
監(jiān)控組態(tài)軟件是工業(yè)控制系統(tǒng)中必不可少的組件,一般部署在工業(yè)企業(yè)信息系統(tǒng)層次結構中的過程監(jiān)控層,處于“承上啟下”的位置,它使用靈活的組態(tài)方式,可以為用戶提供一種快速地構建實時數(shù)據(jù)采集和監(jiān)視控制功能的能力。目前,國外市場上的監(jiān)控組態(tài)軟件主要有GE的iFIX、Wonderware的 Intouch、Siemens的 WinCC、Citect的 CitectSCADA和NI的Labview,而國內市場上的監(jiān)控組態(tài)軟件則以力控、亞控等為主。監(jiān)控組態(tài)軟件的體系結構一般如圖2所示。
圖2 監(jiān)控組態(tài)軟件的體系結構和數(shù)據(jù)流向
監(jiān)控組態(tài)軟件通過通信驅動程序連接工廠中的現(xiàn)場設備,現(xiàn)場設備包括PLC、I/O設備和DCS服務器等,然后以輪詢的方式讀寫現(xiàn)場設備寄存器中的過程數(shù)據(jù),并將過程數(shù)據(jù)傳輸至內存映像中;內存映像是監(jiān)控組態(tài)軟件中存儲通信驅動程序輪詢記錄的區(qū)域,其通過通信驅動程序刷新存儲的記錄;實時數(shù)據(jù)庫以輪詢或基于例外的方式獲取內存映像中的過程數(shù)據(jù),建立數(shù)據(jù)標簽對過程數(shù)據(jù)進行管理,并為應用模塊提供數(shù)據(jù)源;監(jiān)控組態(tài)軟件應用模塊獲取實時數(shù)據(jù)庫中的數(shù)據(jù),實現(xiàn)監(jiān)視控制、數(shù)據(jù)存檔、生成報表和報警等功能。從現(xiàn)場設備到監(jiān)控組態(tài)軟件的數(shù)據(jù)為雙向流動。由此可知,與現(xiàn)場設備進行通信的驅動程序是監(jiān)控組態(tài)軟件與下位現(xiàn)場設備交互的關鍵接口,而驅動程序的核心是工業(yè)通信協(xié)議的實現(xiàn),因此對其進行安全測試十分必要。
當前,監(jiān)控組態(tài)軟件一般采用C/S和B/S兩種部署方式,客戶端人機界面中的數(shù)據(jù)顯示、趨勢顯示和報警管理等都大量地使用OLE、ActiveX等基于COM(組件對象模型)的組件技術。ActiveX控件是監(jiān)控組態(tài)軟件使用的主要的組件技術,通常用于實現(xiàn)客戶端中動態(tài)信息的處理,它訪問實時數(shù)據(jù)庫,將所需的數(shù)據(jù)取出并在監(jiān)控畫面上顯示,例如:使用數(shù)據(jù)域控件、趨勢圖控件和報表控件分別實現(xiàn)數(shù)據(jù)顯示、圖形顯示和報表顯示。ActiveX控件可以嵌入到C/S客戶端的應用程序中和B/S客戶端的瀏覽器中,實現(xiàn)豐富的過程監(jiān)控功能。因此,ActiveX控件是監(jiān)控組態(tài)軟件與上層操作人員交互的關鍵接口,對其進行安全測試同樣十分必要。
3.1模糊測試框架
監(jiān)控組態(tài)軟件的模糊測試框架如圖3所示。
圖3 監(jiān)控組態(tài)軟件的模糊測試框架
模糊測試要依據(jù)“全面兼顧、突出重點、兼顧效率”的原則,針對整個程序、所有模塊進行,特別是那些需要與外部系統(tǒng)進行數(shù)據(jù)交換 (例如:操作人員的輸入、其他系統(tǒng)或裝置的輸入和來自網(wǎng)絡上的數(shù)據(jù)輸入等)的模塊應該重點測試。模糊測試還需要根據(jù)各種輸入類型來制定針對性高的測試方案,以提高測試的效率。另外,對于工業(yè)控制系統(tǒng),監(jiān)控組態(tài)軟件所在的上位機通常既作為服務端,為操作員站提供監(jiān)視控制功能,又作為客戶端,對作為服務端的現(xiàn)場設備進行數(shù)據(jù)訪問。因此,對于監(jiān)控組態(tài)軟件的模糊測試需要同時覆蓋其服務端功能和客戶端功能[10]。
通過以上分析發(fā)現(xiàn),與現(xiàn)場設備通信使用的工業(yè)網(wǎng)絡協(xié)議、與操作員交互使用的ActiveX控件是監(jiān)控組態(tài)軟件“承上啟下”的兩個重要接口,因此,本文針對監(jiān)控組態(tài)軟件的工業(yè)網(wǎng)絡協(xié)議和ActiveX控件建立了模糊測試框架。另外,為了覆蓋監(jiān)控組態(tài)軟件的服務端功能和客戶端功能,在本模糊測試框架中同時使用普通式和內聯(lián)式兩種模糊測試部署方式。圖3中,上層模糊測試器通過普通部署方式對監(jiān)控組態(tài)軟件的ActiveX控件進行測試;下層模糊測試器以內聯(lián)方式部署在監(jiān)控組態(tài)軟件與現(xiàn)場設備之間,對監(jiān)控組態(tài)軟件發(fā)送的請求數(shù)據(jù)進行轉發(fā),然后對現(xiàn)場設備的響應數(shù)據(jù)進行變異并將其發(fā)送至監(jiān)控組態(tài)軟件,以此來對監(jiān)控組態(tài)軟件的網(wǎng)絡協(xié)議開展測試。模糊測試框架中的模糊測試器既使用主流的開源或商業(yè)模糊測試器,例如:ActiveX模糊測試器COMRaider、通用模糊測試器SPIKE等,又針對監(jiān)控組態(tài)軟件的通信協(xié)議開發(fā)了工業(yè)網(wǎng)絡協(xié)議模糊測試器。開發(fā)的模糊測試器支持Modbus等主流工業(yè)網(wǎng)絡協(xié)議,可以對監(jiān)控組態(tài)軟件發(fā)送的工業(yè)網(wǎng)絡協(xié)議請求進行解析并生成應答數(shù)據(jù),然后依據(jù)模糊測試策略對應答數(shù)據(jù)進行變異并將其發(fā)送至監(jiān)控組態(tài)軟件,開展模糊測試。
3.2測試數(shù)據(jù)的生成方法
生成測試數(shù)據(jù)是模糊測試的關鍵階段,對測試效率的影響巨大。本文將遺傳算法應用到模糊測試數(shù)據(jù)的生成階段,可以實現(xiàn)測試數(shù)據(jù)冗余度的降低和代碼覆蓋率的提高,從而提升模糊測試的效率,基于遺傳算法的模糊測試的原理如圖4所示。首先,模糊測試器獲取監(jiān)控組態(tài)軟件的一組正常輸入,經(jīng)過編碼形成初始測試集;然后,使用調試器監(jiān)控測試數(shù)據(jù)在目標軟件中的執(zhí)行情況,并將代碼覆蓋率等執(zhí)行信息反饋至遺傳算法;最后,遺傳算法依據(jù)反饋信息計算測試數(shù)據(jù)的適應度值,指導測試數(shù)據(jù)進行遺傳操作,形成新一代測試集并執(zhí)行下一輪測試。此過程迭代執(zhí)行,直到達到迭代次數(shù)或得到滿足要求的測試數(shù)據(jù)為止[11]。圖4中,如何設計遺傳算法,以使其適用于測試數(shù)據(jù)的生成是關鍵,具體包括如何將測試數(shù)據(jù)進行編碼、如何進行遺傳操作和如何設計適應度函數(shù)等。
遺傳算法的基本流程如圖5所示。
圖4 基于遺傳算法的模糊測試的原理
圖5 遺傳算法的基本流程
a)編碼
編碼是遺傳算法的第一步,也是遺傳算法的關鍵。遺傳算法的整個進化過程是建立在編碼機制的基礎上的,它把實際問題空間的參數(shù)轉換為遺傳算法空間的基因個體,即測試數(shù)據(jù)在遺傳算法中的表示。針對不同的問題,可以選擇不同的編碼方法,常用的編碼方法有二進制編碼、實數(shù)編碼、格雷碼和海明碼等。
本文在設計編碼方法時,使用反匯編和網(wǎng)絡數(shù)據(jù)包分析技術分析目標軟件的輸入所包含的參數(shù)和基本格式,從而確定編碼中各個基因編碼的位置和長度等信息,保證編碼的有效性。由于二進制編碼在各個遺傳算子中的操作更加容易實現(xiàn),所以本文采用二進制編碼方法進行編碼。對于數(shù)值參數(shù),根據(jù)參數(shù)的取值范圍,確定二進制串的長度;對于字符型參數(shù),使用字符對應的ASCII碼轉換成的二進制串作為編碼。另外,對于輸入包含了多個參數(shù)的情況,采用多參數(shù)級聯(lián)的方法進行編碼,即把編碼后的參數(shù)級聯(lián)成一個染色體,且固定每個參數(shù)的編碼長度和位置。
b)遺傳操作
遺傳操作包括選擇、交叉和變異3個基本遺傳算子。選擇操作的方法有輪盤賭選擇法、隨機遍歷抽樣法、截斷選擇法和錦標賽選擇法等。其中,輪盤賭選擇法是常用的選擇操作方法,它把種群中所有染色體的適應度的總和看作輪盤的一周,每個染色體按其適應度在總和中所占的比例占據(jù)輪盤的一個扇區(qū),適應度大的染色體所占據(jù)的輪盤扇區(qū)大,在選擇操作中被選中的概率高,反之亦然。另外,截斷選擇法是最容易實現(xiàn)的選擇操作方法,它按染色體的適應度進行排序,按截斷閾值 (被選擇個體的百分比)選擇適應度高的染色體。本文采用輪盤賭選擇法,另外使用截斷選擇法實現(xiàn)精英保留策略。
交叉操作和變異操作是為了防止種群進化停滯或退化,保持種群的多樣性,將可變性引入種群中。交叉操作常用的方法有單點交叉、多點交叉、均勻交叉和實值重組等;變異操作常用的方法有基本位變異、均勻變異和高斯變異等。為了避免破壞測試數(shù)據(jù),本文采用單點交叉方法實現(xiàn)交叉操作,即隨機選擇一個交叉點,子代在交叉點之前的部分從一個父代基因中得到,在交叉點之后的部分從另一個父代基因中得到。對于變異操作,本文采用基本位變異方法,即對個體編碼串隨機指定的某一位或某幾位基因執(zhí)行變異運算。
另外,為了能夠對交叉操作和變異操作進行控制,在這兩個算子中分別引入交叉概率Pc和變異概率Pm,Pc和Pm能夠根據(jù)適應度自動地改變。當種群中各個個體的適應度趨于一致或趨于局部最優(yōu)時,Pc和Pm增大;而當種群的適應度比較分散時,Pc和Pm減小。同時,對適應度高于種群平均適應度的個體,對應比較低的Pc和Pm;而對適應度低于種群平均適應度的個體,對應較高的Pc和Pm。
c)適應度函數(shù)
遺傳算法依據(jù)設計的適應度函數(shù)計算個體的適應度值,判斷個體的優(yōu)劣,進而指導算法向哪個方向進行。適應度函數(shù)的設計需要充分地代表遺傳算法的目標,模糊測試中遺傳算法的目標可轉化為生成具有最大多樣性和高代碼覆蓋率的測試數(shù)據(jù)。所以,本文采用測試數(shù)據(jù)的代碼覆蓋率作為遺傳算法的適應度值。首先,使用IDA Pro等逆向工具分析監(jiān)控組態(tài)軟件的關鍵函數(shù)和基本塊的入口,然后使用O11yDbg等調試器關聯(lián)到監(jiān)控組態(tài)軟件,在分析得到的函數(shù)和基本塊入口上設置斷點,通過統(tǒng)計測試數(shù)據(jù)觸發(fā)的斷點數(shù)量來計算其代碼覆蓋率。適應度函數(shù)F的計算公式如下:
式 (1)中:P——測試數(shù)據(jù)觸發(fā)的斷點數(shù)量;
Psum——目標軟件中設置的斷點總數(shù)。
最后,在執(zhí)行模糊測試的過程中,需要根據(jù)實際情況對編碼長度、種群大小和迭代次數(shù)等項目進行調節(jié)。
針對工業(yè)控制系統(tǒng)當前面臨的嚴峻信息安全問題,本文分析探討了監(jiān)控組態(tài)軟件的漏洞挖掘方法,提出了針對監(jiān)控組態(tài)軟件的、基于遺傳算法的模糊測試方法。主要針對監(jiān)控組態(tài)軟件的信息安全特性設計了模糊測試框架,并在分析現(xiàn)有的模糊測試方法的不足的基礎上,引入遺傳算法對測試數(shù)據(jù)的生成進行了優(yōu)化。本文可為監(jiān)控組態(tài)軟件的安全測試和漏洞挖掘提供有力的支撐。但是,對于本文提出的測試方法,只對部分功能進行了實現(xiàn),目前測試工作還需要大量的人工參與,因此,實現(xiàn)自動化的全閉環(huán)模糊測試并對測試過程進行優(yōu)化是本文后續(xù)的工作重點。
[1]彭勇,江常青,謝豐,等.工業(yè)控制系統(tǒng)信息安全研究進展 [J].清華大學學報,2012,52(10):1396-1408.
[2]FARWELL J P,ROHOZINSKI R.Stuxnet and the future of cyber war[J].Surviva1,2011,53(1):23-40.
[3]李舟軍,張俊賢,廖湘科,等.軟件安全漏洞檢測技術[J].計算機學報,2015,38(4):717-723.
[4]SUTTON M,GREENE A,AMINI P.Fuzzing:brute force vu1nerabi1ity discovery[M].Hong Kong:Pearson Education,2007.
[5]MILLER B P,F(xiàn)REDRIKSEN L,SO B.An empirica1 study of the re1iabi1ity of UNIX uti1ities[J].Communications of the Acm,1990,33(12):32-44.
[6]李彤,黃軒,黃睿.模糊測試中測試用例生成方法 [J].計算機系統(tǒng)應用,2015,24(4):139-143.
[7]TRACEY N,CLARK J,MANDER K,et a1.Automated test data generation for exception conditions[J].Software:Practice and Experience,2000,30(1):61-79.
[8]AITEL D.The advantages of b1ock-based protoco1 ana1ysis for security testing[OB/OL].(2011-04-24)[2016-01-07].http://www.immunitysec.con/down1oads/advantagesof-b1ock_based_ana1ysis.pdf.
[9]熊琦,彭勇,伊勝偉,等.工控網(wǎng)絡協(xié)議Fuzzing測試技術研究綜述 [J].小型微型計算機系統(tǒng),2015,36(3):497-502.
[10]EDMONDS J.Security ana1ysis of mu1ti1ayer protoco1s in SCADA networks[D].Tu1sa:University of Tu1sa,2006.
[11]章淑琴.基于遺傳算法的模糊測試技術研究 [D].武漢:華中科技大學,2011.
Research on the Fuzzing Test Method of Industrial Configuration Software
WU Bo,YUN Lei,JIN Xian-tao,LIU Bei-shui
(CEPREI,Guangzhou 510610,China)
As industria1 configuration software(hereinafter referred to as configuration software)has the prob1ems of 1ow information security assurance 1eve1,numerous information security vu1nerabi1ities,great damage and insufficient efficient vu1nerabi1ity detection method at present,a vulnerability mining method for configuration software is proposed,in which fuzzing test technology is adopted to detect the vulnerability of configuration software.The characteristics of configuration software are ana1yzed,and the fuzzing test framework for configuration software is designed.Furthermore,the generation method of the test data in fuzzing test is main1y discussed. The resu1ts show that the fuzzing test framwork and the test data generation method can be we11 app1ied in the vu1nerabi1ity mining work of configuration software.
industria1 configuration software;vu1nerabi1ity mining;fuzzing test;genetic a1gorithm
TP 311.55
A
1672-5468(2016)03-0033-06
10.3969/j.issn.1672-5468.2016.03.007
2015-12-11
2016-01-08
吳波 (1984-),男,陜西咸陽人,工業(yè)和信息化部電子第五研究所信息安全研究中心工程師,博士,主要從事工業(yè)控制系統(tǒng)信息安全研究工作。