趙國(guó)新 ,丁若凡,游建舟,呂世超,彭 鋒,李 菲,孫利民
(1.北京石油化工學(xué)院信息工程學(xué)院,北京 102617;2.北京化工大學(xué)信息科學(xué)與技術(shù)學(xué)院,北京 100020;3.中國(guó)科學(xué)院信息工程研究所,北京 100089)
隨著“中國(guó)制造2025”的推進(jìn),傳統(tǒng)工業(yè)開(kāi)始了信息化、數(shù)字化、智能化的產(chǎn)業(yè)升級(jí)。與此同時(shí),隨著大量工業(yè)設(shè)備不可避免地接入互聯(lián)網(wǎng),工業(yè)控制系統(tǒng)信息安全也面臨著日益嚴(yán)重的挑戰(zhàn)和威脅[1]。自2010 年震網(wǎng)事件以來(lái),工控信息安全問(wèn)題一直備受?chē)?guó)內(nèi)外各界關(guān)注。從國(guó)家互聯(lián)網(wǎng)應(yīng)急中心[2]發(fā)布的《2017 年中國(guó)互聯(lián)網(wǎng)網(wǎng)絡(luò)安全報(bào)告》可知,世界各國(guó)越來(lái)越重視工控網(wǎng)絡(luò)信息安全。基于工控安全領(lǐng)域相關(guān)研究[3-4]表明,為了應(yīng)對(duì)互聯(lián)網(wǎng)中潛在的威脅,僅僅依靠被動(dòng)防御是不夠的,應(yīng)用蜜罐技術(shù)進(jìn)行主動(dòng)防御是工控安全防護(hù)領(lǐng)域的殺手锏[5-6]。
蜜罐技術(shù)是一種安全威脅的主動(dòng)檢測(cè)技術(shù),它通過(guò)設(shè)置誘餌性質(zhì)的虛擬系統(tǒng)來(lái)吸引攻擊者入侵并對(duì)其進(jìn)行攻擊捕獲。蜜罐技術(shù)在近十幾年內(nèi)呈現(xiàn)交互能力由低到高、兼容功能由少到多的趨勢(shì)。事實(shí)上,蜜罐的分類(lèi)方式最常用的是按照其與外界的交互能力分為低、中、高交互蜜罐,其區(qū)別在于提供交互的空間是否覆蓋完整的操作系統(tǒng)。
由于工控系統(tǒng)的設(shè)計(jì)封閉性和架構(gòu)特殊性,上述以通用服務(wù)器為對(duì)象的分類(lèi)標(biāo)準(zhǔn)難以評(píng)估工控的過(guò)程控制特性。因此,本文從架構(gòu)特點(diǎn)出發(fā),劃分了工控設(shè)備的交互層次,提出一種新的工控蜜罐分類(lèi)方法。低交互工控蜜罐具備網(wǎng)絡(luò)層的基礎(chǔ)協(xié)議棧的通信能力。中交互工控蜜罐具備操作系統(tǒng)層指令模擬能力,如開(kāi)機(jī)關(guān)機(jī)、代碼上傳/下載等。高交互工控蜜罐具備生產(chǎn)現(xiàn)場(chǎng)業(yè)務(wù)過(guò)程控制的仿真能力。
基于上述分類(lèi)標(biāo)準(zhǔn),本文設(shè)計(jì)并實(shí)驗(yàn)驗(yàn)證了一種可編程邏輯控制器(Programmable Logic Controller,PLC)蜜罐框架,主要工作如下:
1)設(shè)計(jì)了基于工控業(yè)務(wù)仿真的PLC 蜜罐系統(tǒng)框架,由工控業(yè)務(wù)模塊、數(shù)據(jù)轉(zhuǎn)存模塊和信息服務(wù)模塊三部分組成。
2)提出了工控私有協(xié)議的解析與模擬方法,實(shí)現(xiàn)了S7comm 私有功能拓展。通過(guò)與西門(mén)子S7-300 PLC 設(shè)備的交互實(shí)驗(yàn)結(jié)果,新增了11種S7comm私有功能。
3)提出了Simulink 的工控業(yè)務(wù)實(shí)時(shí)仿真方法,其提供的仿真數(shù)據(jù)與S7comm 私有功能相互協(xié)同,有效實(shí)現(xiàn)控制指令的執(zhí)行與響應(yīng)。在交互層次上貫穿了信息域和物理域,大大增強(qiáng)蜜罐的業(yè)務(wù)真實(shí)度和可靠性。
國(guó)內(nèi)外各信息安全領(lǐng)域的研究者一直致力于蜜罐技術(shù)的發(fā)展。2004 年Cisco 公司以honeyd[7]為基礎(chǔ)首先實(shí)現(xiàn)了具有Modbus 服務(wù)的工控蜜罐系統(tǒng)[8]。2011 年Tamminen[9]提出的Kippo 是一款基于Python 并支持多操作系統(tǒng)的蜜罐工具。2013 年Glastopf 蜜網(wǎng)項(xiàng)目[10]發(fā)布了首個(gè)開(kāi)源工控蜜罐框架Conpot,使用Python 編寫(xiě),主要實(shí)現(xiàn)了對(duì)Modbus、S7comm、簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(Simple Network Management Protocol,SNMP)、超文本傳輸協(xié)議(HyperText Transfer Protocol,HTTP)等多種工控協(xié)議和互聯(lián)網(wǎng)協(xié)議的仿真。2014 年Buza 等[11]實(shí)現(xiàn)的CryPLH以S7comm服務(wù)為基礎(chǔ),擴(kuò)展實(shí)現(xiàn)了SNMP、HTTP服務(wù),增強(qiáng)了蜜罐的交互性。2015年實(shí)現(xiàn)的Cowrie[12]是Kippo的繼承者,擴(kuò)展了對(duì)安全拷貝協(xié)議(Secure Copy Protocol,SCP)、安全外殼協(xié)議(Secure SHell,SSH)文件傳輸協(xié)議(SSH File Transfer Protocol,SFTP)和Telnet 協(xié)議的支持。2016 年Lau等[13]提出的XPOT實(shí)現(xiàn)了對(duì)Nmap等系統(tǒng)指紋識(shí)別工具的欺騙,作者指出如果能結(jié)合工業(yè)過(guò)程模擬,會(huì)進(jìn)一步提升蜜罐的交互性。同年Litchfield 等[14]提出了HoneyPhy,該框架考慮了信息物理系統(tǒng)(Cyber-Physical System,CPS)過(guò)程和設(shè)備的行為,進(jìn)行了簡(jiǎn)單的理論驗(yàn)證和實(shí)驗(yàn)。2017 年Kyung 等[15]提出一種基于軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN)的蜜網(wǎng)系統(tǒng)HoneyProxy,支持低高交互蜜罐動(dòng)態(tài)轉(zhuǎn)換。而國(guó)內(nèi)對(duì)蜜罐技術(shù)的研究起步較晚,北京大學(xué)計(jì)算機(jī)研究所“狩獵女神”項(xiàng)目組于2004 年開(kāi)始捕獲并深入分析攻擊案例。近年來(lái),中國(guó)科學(xué)院信息工程研究所研究并實(shí)現(xiàn)了針對(duì)電力系統(tǒng)的IEC104 規(guī)約蜜罐、人機(jī)接口(Human Machine Interface,HMI)電力調(diào)度系統(tǒng)蜜罐等與行業(yè)緊密結(jié)合的蜜罐。
從工控特有的分類(lèi)看,上述工控蜜罐主要在信息域交互方面進(jìn)行拓展和開(kāi)發(fā),或僅實(shí)現(xiàn)了理論設(shè)計(jì),未實(shí)現(xiàn)有效的實(shí)驗(yàn)驗(yàn)證和應(yīng)用部署。因此,現(xiàn)有工控蜜罐工作應(yīng)當(dāng)被歸類(lèi)為中交互工控蜜罐,主要缺乏物理域交互能力。
針對(duì)現(xiàn)有工控蜜罐存在無(wú)法與攻擊者交互,或者有交互但數(shù)據(jù)、系統(tǒng)可信度低的問(wèn)題,本文基于工控業(yè)務(wù)仿真的固有特征,設(shè)計(jì)了一種高交互PLC蜜罐系統(tǒng)架構(gòu),為蜜罐通信提供真實(shí)的實(shí)時(shí)生產(chǎn)數(shù)據(jù)和生產(chǎn)環(huán)境來(lái)欺騙攻擊者,從而在全新領(lǐng)域?qū)崿F(xiàn)了蜜罐的交互能力突破。
如圖1 所示,本文設(shè)計(jì)的高交互PLC 蜜罐總體架構(gòu)分為信息服務(wù)仿真模塊、過(guò)程控制仿真模塊和數(shù)據(jù)轉(zhuǎn)存模塊3 個(gè)部分,數(shù)據(jù)流動(dòng)分為服務(wù)仿真循環(huán)和過(guò)程仿真循環(huán)兩條路線。
信息服務(wù)仿真模塊通過(guò)部署Conpot 蜜罐來(lái)仿真西門(mén)子S7-300PLC 設(shè)備,使用Conpot 內(nèi)置的S7comm 服務(wù)器與外界進(jìn)行交互,并以此為基礎(chǔ)開(kāi)發(fā)實(shí)現(xiàn)了多種S7comm 私有服務(wù)的仿真。S7comm 私有服務(wù)仿真能夠根據(jù)攻擊者的請(qǐng)求,調(diào)用相應(yīng)函數(shù),通過(guò)讀取數(shù)據(jù)轉(zhuǎn)存模塊中實(shí)時(shí)生產(chǎn)數(shù)據(jù)庫(kù)里的數(shù)據(jù)并組入響應(yīng)數(shù)據(jù)包,或者將攻擊者提供的控制指令寫(xiě)入實(shí)時(shí)控制數(shù)據(jù)庫(kù),以滿足交互需求。本模塊與數(shù)據(jù)轉(zhuǎn)存模塊之間的數(shù)據(jù)流通構(gòu)成了服務(wù)仿真循環(huán)。
過(guò)程控制仿真模塊對(duì)燃?xì)夤芫W(wǎng)過(guò)程進(jìn)行了仿真建模。通過(guò)在Simulink 中運(yùn)行該仿真模型,系統(tǒng)能夠生成實(shí)時(shí)生產(chǎn)數(shù)據(jù),并通過(guò)仿真?zhèn)鞲衅鲗?shí)時(shí)輸出,最終寫(xiě)入到數(shù)據(jù)轉(zhuǎn)存模塊的實(shí)時(shí)生產(chǎn)數(shù)據(jù)庫(kù)中;同時(shí)該系統(tǒng)具備仿真的閥門(mén)輸入接口,會(huì)接收實(shí)時(shí)控制數(shù)據(jù)庫(kù)實(shí)時(shí)發(fā)送的數(shù)據(jù)作為系統(tǒng)的控制信號(hào)。本模塊與數(shù)據(jù)轉(zhuǎn)存模塊的數(shù)據(jù)流通構(gòu)成了過(guò)程仿真循環(huán)。
數(shù)據(jù)轉(zhuǎn)存模塊是上述兩個(gè)模塊的交互中轉(zhuǎn)站,也是兩個(gè)數(shù)據(jù)仿真循環(huán)的核心。數(shù)據(jù)轉(zhuǎn)存模塊中建立了兩個(gè)不同的數(shù)據(jù)庫(kù),分別為實(shí)時(shí)生產(chǎn)數(shù)據(jù)庫(kù)和實(shí)時(shí)控制數(shù)據(jù)庫(kù),使用腳本程序來(lái)實(shí)現(xiàn)一系列讀取、存儲(chǔ)和發(fā)送的功能。通過(guò)這里的數(shù)據(jù)存儲(chǔ)、流通,信息服務(wù)仿真模塊能夠讀取到過(guò)程控制仿真模塊的實(shí)時(shí)生產(chǎn)數(shù)據(jù),過(guò)程控制仿真模塊也能夠根據(jù)信息服務(wù)仿真模塊下達(dá)的實(shí)時(shí)指令改變生產(chǎn)狀態(tài),以此實(shí)現(xiàn)了控制過(guò)程仿真運(yùn)行狀況的閉環(huán)邏輯。
S7comm 協(xié)議是西門(mén)子S7 系列PLC 內(nèi)部集成的一種私有不公開(kāi)協(xié)議,屬于傳輸控制協(xié)議/網(wǎng)際協(xié)議(Transmission Control Protocol/Internet Protocol,TCP/IP)協(xié)議族的一種。它運(yùn)行在應(yīng)用層中,經(jīng)過(guò)特殊優(yōu)化,用于西門(mén)子設(shè)備之間或者與外界進(jìn)行通信。S7comm 協(xié)議常用的通信方式是基于以太網(wǎng)的客戶端/服務(wù)端模式:PLC 設(shè)備作為服務(wù)端,接收外界訪問(wèn)請(qǐng)求數(shù)據(jù)包并執(zhí)行相應(yīng)服務(wù),返回響應(yīng)數(shù)據(jù)包;外界訪問(wèn)者作為客戶端,與PLC進(jìn)行通信,發(fā)送請(qǐng)求數(shù)據(jù)包并接收響應(yīng)數(shù)據(jù)包。本文針對(duì)Conpot 的S7comm 服務(wù)器進(jìn)行了深度開(kāi)發(fā),從協(xié)議仿真的角度開(kāi)發(fā)實(shí)現(xiàn)了更多S7comm 私有服務(wù)功能,從而符合本文設(shè)計(jì)的PLC蜜罐系統(tǒng)的需求。
3.1.1 S7私有協(xié)議的解析和模擬
S7comm 協(xié)議不同設(shè)備間使用S7 數(shù)據(jù)包進(jìn)行通信。如圖2 所示,S7 數(shù)據(jù)包使用了多種協(xié)議進(jìn)行協(xié)議數(shù)據(jù)單元(Protocol Data Unit,PDU)封裝,S7 數(shù)據(jù)在經(jīng)過(guò)面向連接的傳輸協(xié)議(Connection-Oriented Transport Protocol,COTP)協(xié)議和應(yīng)用程數(shù)據(jù)傳輸協(xié)議(ISO transport services on top of the TCP,TPKT)協(xié)議打包后,由TCP/IP協(xié)議進(jìn)行連接和輸送。
圖2 S7comm協(xié)議包頭格式Fig.2 S7comm protocol packet header format
如圖3 所示,S7comm 協(xié)議服務(wù)端和客戶端之間的通信流程分為三次握手。第一次握手是經(jīng)過(guò)客戶端和服務(wù)端COTP請(qǐng)求與應(yīng)答,建立基于國(guó)際標(biāo)準(zhǔn)化組織傳輸協(xié)議(International Organization for Standardization_Transport Protocols,ISO_TP)的連接;第二次握手進(jìn)行S7 通信設(shè)置,建立S7comm 連接;第三次握手進(jìn)行S7comm 服務(wù)的應(yīng)答交互,最終服務(wù)端會(huì)生成基于特定S7comm 私有功能的響應(yīng)數(shù)據(jù)包返回給客戶端。
圖3 S7comm協(xié)議通信流程Fig.3 S7comm protocol communication process
根據(jù)以上對(duì)S7comm 協(xié)議通信三次握手原理的解析,Conpot 通過(guò)對(duì)S7 通信系統(tǒng)中服務(wù)端功能進(jìn)行模擬,建立了S7comm 服務(wù)器。如圖4 所示,其處理信息的流程主要分為以下幾步:
1)S7comm 服務(wù)器從Conpot獲取執(zhí)行流,與客戶端建立連接。然后,進(jìn)入會(huì)話處理流程,開(kāi)始循環(huán)接收數(shù)據(jù)包,為客戶端提供服務(wù)。
2)S7comm 服務(wù)器會(huì)接收握手信息的前四個(gè)字節(jié):如果接收的數(shù)據(jù)為空,S7comm 服務(wù)器會(huì)結(jié)束本次會(huì)話;否則,會(huì)接收握手信息的剩余信息。然后,S7comm 服務(wù)器會(huì)解析包頭,提取出length 參數(shù),用于判定是否是非法的S7comm 數(shù)據(jù)包請(qǐng)求。
3)S7comm 服務(wù)器完成第一次握手,建立ISO_TP 連接。ISO_TP握手信息的標(biāo)識(shí)tpdu_type參數(shù)值為0xe0,只有通過(guò)本次握手,ISO_TP連接才能建立起來(lái)。
4)S7comm 服務(wù)器完成第二次握手,建立S7comm 連接。S7comm握手信息的標(biāo)識(shí)tpdu_type參數(shù)值為0xf0,只有通過(guò)本次握手,S7comm連接才能建立起來(lái)。
5)S7comm 服務(wù)器開(kāi)始第三次握手,開(kāi)始接收S7comm 的數(shù)據(jù)循環(huán)。服務(wù)器解析TPKT 和COTP 層數(shù)據(jù),當(dāng)請(qǐng)求數(shù)據(jù)的tpdu_type 參數(shù)值為0xf0 時(shí),表明該P(yáng)DU 是通信數(shù)據(jù)(而非握手信息),S7comm 會(huì)解析此數(shù)據(jù)并據(jù)此生成響應(yīng)數(shù)據(jù)包;然后,將響應(yīng)數(shù)據(jù)包發(fā)送給客戶端,完成第三次握手;最后,S7comm服務(wù)器會(huì)準(zhǔn)備接收本次會(huì)話的下一個(gè)數(shù)據(jù)包。
S7comm 服務(wù)器具備完整的信息交互機(jī)能,通過(guò)扮演PLC設(shè)備的角色來(lái)取信于外界攻擊者。除此之外,S7comm 服務(wù)器還集成了日志記錄功能,研究者可以通過(guò)分析日志來(lái)獲取攻擊者信息、研究攻擊模式、提升防護(hù)能力。
圖4 Conpot中S7comm服務(wù)器工作流程Fig.4 Workflow of S7comm server in Conpot
3.1.2 新增S7comm私有功能
S7 功能碼是S7comm 協(xié)議數(shù)據(jù)包中用來(lái)標(biāo)明自身所代表何種S7comm 私有功能的數(shù)字碼,每個(gè)功能碼代表一種S7comm 私有功能。在Conpot 的S7comm 服務(wù)器通信過(guò)程中,當(dāng)客戶端向服務(wù)端發(fā)送請(qǐng)求數(shù)據(jù)包時(shí),數(shù)據(jù)包中S7Data 包含的功能碼將告訴服務(wù)端需要執(zhí)行的是哪種服務(wù)。服務(wù)端會(huì)據(jù)此調(diào)用不同的功能碼程序來(lái)產(chǎn)生特定數(shù)據(jù)。這些數(shù)據(jù)經(jīng)過(guò)處理后會(huì)被組入響應(yīng)數(shù)據(jù)包,最終返回給客戶端。
Conpot雖然搭建了S7comm 服務(wù)器的交互框架,卻并沒(méi)有廣泛地實(shí)現(xiàn)S7comm 協(xié)議內(nèi)的諸多S7comm 私有功能。目前為止,S7comm 協(xié)議中解析了12 種主功能碼,20 種次級(jí)功能碼,而Conpot除了簡(jiǎn)單的次級(jí)功能“讀取系統(tǒng)狀態(tài)列表”外,其余功能碼對(duì)應(yīng)的S7comm 私有功能均未實(shí)現(xiàn),因此實(shí)際上無(wú)法正常進(jìn)行S7 通信,也就無(wú)法返回攻擊者客戶端正常的響應(yīng)數(shù)據(jù)包。
2019 年游建舟等[16]關(guān)注并初步進(jìn)行了S7comm 私有功能的開(kāi)發(fā)工作,本文在其基礎(chǔ)上進(jìn)行了進(jìn)一步的方法整理和代碼重構(gòu)。如表1 所示,通過(guò)與真實(shí)PLC 設(shè)備做交互實(shí)驗(yàn),在Conpot中新增了11種S7comm私有服務(wù)。
表1 在Conpot中新增的S7comm服務(wù)器功能碼Tab.1 New S7comm function codes added in Conpot
S7comm私有功能擴(kuò)展的開(kāi)發(fā)流程如下:
1)主機(jī)PC 連接西門(mén)子S7-300PLC。其中PC 的IP 要與PLC配置在同一網(wǎng)段內(nèi)。
2)根據(jù)S7comm 協(xié)議的握手機(jī)制向PLC 發(fā)送包含待實(shí)現(xiàn)功能碼的三段請(qǐng)求數(shù)據(jù)包,建立S7comm通信。
3)用wireshark抓取PLC設(shè)備的響應(yīng)數(shù)據(jù)包。
4)分析Conpot 源碼中對(duì)S7 數(shù)據(jù)包的解析過(guò)程,對(duì)執(zhí)行程序進(jìn)行修改和完善,確保其對(duì)新增S7comm 私有功能的兼容性。
5)基于之前捕捉到的PLC的響應(yīng),在S7comm服務(wù)器中添加實(shí)現(xiàn)對(duì)應(yīng)功能碼的數(shù)據(jù)生成器。其任務(wù)是根據(jù)功能碼對(duì)應(yīng)的不同S7comm 私有功能,輸出特定parament 值和data 值,將其寫(xiě)入S7data,再交給S7comm 客戶端中其他模塊進(jìn)行進(jìn)一步的協(xié)議封裝。
在設(shè)置對(duì)應(yīng)S7comm 私有功能的功能碼響應(yīng)數(shù)據(jù)時(shí),單純的信息重放是不足以欺騙攻擊者的,需要根據(jù)數(shù)據(jù)包字段結(jié)構(gòu)來(lái)對(duì)響應(yīng)數(shù)據(jù)包進(jìn)行編輯。以Read 功能碼和Write 功能碼為例,通過(guò)上述流程,獲得其響應(yīng)數(shù)據(jù)包如下:
表2 分別是其數(shù)據(jù)包字段解析示例,前者由服務(wù)端輸出蜜罐能夠提供給攻擊者的信息,后者由客戶端輸入攻擊者想要寫(xiě)入的信息。本文選擇Read 和Write 功能碼進(jìn)行深度解析,為蜜罐系統(tǒng)建立了讀取數(shù)據(jù)、控制數(shù)據(jù)的功能,不僅在S7comm 私有服務(wù)方面具備功能協(xié)同性,也在現(xiàn)有系統(tǒng)框架下,將真實(shí)攻擊者與PLC 的通信邏輯納入了物理域的信息交互之中。
表2 Read和Write功能碼響應(yīng)數(shù)據(jù)包的字段解析Tab.2 Field analysis of response package of Read and Write function code
為了提升信息服務(wù)仿真模塊中S7comm 私有服務(wù)仿真的真實(shí)性、在過(guò)程控制仿真模塊里提供實(shí)時(shí)更新動(dòng)態(tài)的生產(chǎn)數(shù)據(jù),并在蜜罐系統(tǒng)內(nèi)構(gòu)建模擬真實(shí)生產(chǎn)現(xiàn)場(chǎng)PLC的工作過(guò)程,需要使用Matlab/Simulink 來(lái)搭建實(shí)時(shí)仿真系統(tǒng)。Simulink 是Matlab 中的一種可視化仿真工具,自帶種類(lèi)繁多、功能強(qiáng)大的模塊庫(kù),被廣泛應(yīng)用在系統(tǒng)建模、數(shù)據(jù)處理和業(yè)務(wù)仿真中。
仿真系統(tǒng)使用了多個(gè)關(guān)鍵組件,來(lái)實(shí)現(xiàn)過(guò)程業(yè)務(wù)仿真模塊與其他模塊的數(shù)據(jù)實(shí)時(shí)交互傳輸。
To Instrument 組件用于將Simulink 中的數(shù)據(jù)輸出到外界設(shè)備中,在仿真系統(tǒng)中用于模擬傳感器,將工業(yè)過(guò)程產(chǎn)生的各項(xiàng)實(shí)時(shí)數(shù)據(jù)發(fā)送到數(shù)據(jù)轉(zhuǎn)存模塊中的實(shí)時(shí)生產(chǎn)數(shù)據(jù)庫(kù)。如表3 第一部分所示,To Instrument 支持對(duì)通信協(xié)議、地址、端口、數(shù)據(jù)類(lèi)型、緩沖區(qū)大小、傳輸間隔、傳輸格式等進(jìn)行設(shè)置以滿足系統(tǒng)需求。
Query Instrument 組件用于在Simulink 中接收外界信號(hào)。在仿真系統(tǒng)中用于模擬系統(tǒng)總閥,控制系統(tǒng)緊急停車(chē)。如表3 第二部分所示,與To Instrument 組件類(lèi)似,同樣需要進(jìn)行相應(yīng)預(yù)先設(shè)置。
Real-time sync 組件用于Simulink 中仿真系統(tǒng)的實(shí)時(shí)化處理,通過(guò)引入此組件,Simulink 系統(tǒng)的仿真運(yùn)行速度會(huì)與外界物理時(shí)間保持一致(而不是在幾秒內(nèi)運(yùn)行完畢全部仿真流程),從而模擬工業(yè)現(xiàn)場(chǎng)實(shí)時(shí)產(chǎn)生數(shù)據(jù)并接收控制的過(guò)程,使得整個(gè)PLC蜜罐系統(tǒng)的數(shù)據(jù)流轉(zhuǎn)更加真實(shí)。
表3 To Instrument和Query Instrument組件設(shè)置Tab.3 Settings of To Instrument and Query Instrument components
本文構(gòu)建的高交互PLC 蜜罐系統(tǒng)以開(kāi)源蜜罐Conpot 和Simulink 仿真器為基礎(chǔ),基于S7comm 私有功能開(kāi)發(fā)和工控業(yè)務(wù)仿真,采用信息服務(wù)仿真、數(shù)據(jù)轉(zhuǎn)存、過(guò)程控制仿真三模塊體系,通過(guò)模塊間的信息交換,實(shí)現(xiàn)了具備高交互性和高仿真度的PLC蜜罐系統(tǒng)。
過(guò)程控制仿真模塊使用Matlab/Simulink 搭建了燃?xì)夤芫W(wǎng)仿真系統(tǒng)。燃?xì)夤芫W(wǎng)是一個(gè)由多過(guò)程組成的燃?xì)廨斔涂刂葡到y(tǒng),包括高壓、中高壓、低壓三部分,通過(guò)監(jiān)測(cè)并控制不同階段的壓強(qiáng)、流速、溫度保持穩(wěn)定預(yù)設(shè)值,最終輸出標(biāo)準(zhǔn)狀態(tài)的燃?xì)獾接脩艏抑小?/p>
在Simulink中搭建的燃?xì)夤芫W(wǎng)仿真系統(tǒng)架構(gòu)如圖5所示。
圖5 燃?xì)夤芫W(wǎng)仿真系統(tǒng)架構(gòu)Fig.5 Simulation system architecture of gas pipe network
通過(guò)不同組件之間的相互協(xié)作,結(jié)合過(guò)程模擬、通信交互、實(shí)時(shí)仿真三種功能,最終實(shí)現(xiàn)了接收實(shí)時(shí)控制信號(hào)、輸出實(shí)時(shí)生產(chǎn)數(shù)據(jù)的功能。燃?xì)夤芫W(wǎng)過(guò)程組件內(nèi)集成了燃?xì)夤芫W(wǎng)系統(tǒng)生產(chǎn)過(guò)程仿真的諸多物理特性,包括高中低壓三部分傳遞函數(shù)構(gòu)建、干擾量模擬、開(kāi)關(guān)選擇模擬等,當(dāng)仿真系統(tǒng)運(yùn)行正常時(shí),該過(guò)程能夠產(chǎn)生7 個(gè)持續(xù)、實(shí)時(shí)輸出的數(shù)據(jù)流,分別為運(yùn)行過(guò)程中不同的流量、溫度、壓強(qiáng)值。To Instrument 組件采集以上燃?xì)夤芫W(wǎng)系統(tǒng)產(chǎn)生的數(shù)據(jù),并通過(guò)TCP/IP 協(xié)議將其輸出到數(shù)據(jù)轉(zhuǎn)存模塊的實(shí)時(shí)生產(chǎn)數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)了本模塊系統(tǒng)傳感器的功能。Query Instrument組件接收數(shù)據(jù)轉(zhuǎn)存模塊通過(guò)TCP/IP 協(xié)議發(fā)送的實(shí)時(shí)控制指令流,然后將其輸入到燃?xì)夤芫W(wǎng)過(guò)程中,只要控制指令不變,運(yùn)行狀態(tài)就不會(huì)變;一旦外部輸入的控制指令流發(fā)生變化,燃?xì)夤芫W(wǎng)過(guò)程的運(yùn)行狀態(tài)和輸出數(shù)據(jù)也會(huì)隨之變化,其實(shí)現(xiàn)的是本模塊系統(tǒng)總閥的功能。Real-time sync 組件負(fù)責(zé)整體系統(tǒng)的實(shí)時(shí)化,這使得該工業(yè)過(guò)程的仿真和通信行為都是實(shí)時(shí)進(jìn)行的,符合蜜罐系統(tǒng)的設(shè)計(jì)要求。
數(shù)據(jù)轉(zhuǎn)存模塊的腳本使用python3語(yǔ)言編寫(xiě),調(diào)用的核心庫(kù)是Socket和MySQL,通過(guò)搭建、操作數(shù)據(jù)庫(kù)并與其他模塊進(jìn)行通信,實(shí)現(xiàn)了接收、存儲(chǔ)生產(chǎn)數(shù)據(jù)和調(diào)用、發(fā)送控制指令流的功能。
實(shí)時(shí)生產(chǎn)數(shù)據(jù)庫(kù)存儲(chǔ)著系統(tǒng)的實(shí)時(shí)生產(chǎn)數(shù)據(jù),程序腳本會(huì)通過(guò)Socket 庫(kù)與過(guò)程控制仿真模塊的To Instrument 組件相連接,并接收其輸出的生產(chǎn)數(shù)據(jù);然后經(jīng)過(guò)一定的格式化處理,通過(guò)SQL 語(yǔ)句將其存入數(shù)據(jù)庫(kù)內(nèi)。由于數(shù)據(jù)的產(chǎn)生和傳輸是實(shí)時(shí)的,因此實(shí)時(shí)生產(chǎn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)是實(shí)時(shí)變化更新的最新數(shù)據(jù)。
實(shí)時(shí)控制數(shù)據(jù)庫(kù)存儲(chǔ)系統(tǒng)的實(shí)時(shí)控制指令。與實(shí)時(shí)更新數(shù)據(jù)的實(shí)時(shí)生產(chǎn)數(shù)據(jù)庫(kù)不同,實(shí)時(shí)控制數(shù)據(jù)庫(kù)的數(shù)據(jù)并非實(shí)時(shí)輸入,而是實(shí)時(shí)輸出。實(shí)時(shí)控制數(shù)據(jù)庫(kù)會(huì)使用Socket腳本,對(duì)過(guò)程控制仿真模塊中的Query Instrument 組件實(shí)時(shí)發(fā)送內(nèi)部存儲(chǔ)的數(shù)據(jù)作為控制指令,從而為工業(yè)過(guò)程提供了持續(xù)的閥門(mén)信號(hào)。
在Ubuntu 系統(tǒng)內(nèi)以S7-300 模板部署二次開(kāi)發(fā)后的Conpot 蜜罐,以此模擬西門(mén)子S7-300 PLC 與外界攻擊者進(jìn)行通信,從而實(shí)現(xiàn)系統(tǒng)所需的信息服務(wù)。
在交互過(guò)程中,Conpot 的S7comm 服務(wù)器在執(zhí)行Read 功能碼對(duì)應(yīng)的S7comm 私有服務(wù)時(shí),預(yù)設(shè)的腳本函數(shù)會(huì)使用SQL語(yǔ)句讀取數(shù)據(jù)轉(zhuǎn)存模塊中的實(shí)時(shí)生產(chǎn)數(shù)據(jù)數(shù)據(jù)庫(kù);同樣,在執(zhí)行Write功能碼對(duì)應(yīng)的服務(wù)時(shí),預(yù)設(shè)的腳本函數(shù)會(huì)使用SQL語(yǔ)句來(lái)將數(shù)據(jù)轉(zhuǎn)存模塊中實(shí)時(shí)控制數(shù)據(jù)庫(kù)的數(shù)覆蓋為新的數(shù),從而控制過(guò)程控制仿真模塊。
本文通過(guò)控制網(wǎng)仿真攻擊來(lái)測(cè)試高交互PLC蜜罐系統(tǒng)的連通性和工作邏輯。如表4 所示,實(shí)驗(yàn)設(shè)備分為蜜罐設(shè)備和測(cè)試設(shè)備,通過(guò)以太網(wǎng)進(jìn)行通信。高交互蜜罐系統(tǒng)部署在蜜罐設(shè)備內(nèi),其中信息服務(wù)仿真模塊和數(shù)據(jù)轉(zhuǎn)存模塊位于虛擬機(jī),過(guò)程控制仿真模塊位于宿主機(jī)。測(cè)試設(shè)備為同一IP 段內(nèi)的獨(dú)立計(jì)算機(jī)。
表4 實(shí)驗(yàn)環(huán)境配置Tab.4 Configuration of experimental environment
控制網(wǎng)攻擊測(cè)試的主要目的是驗(yàn)證蜜罐系統(tǒng)的信息域交互能力。將測(cè)試設(shè)備與蜜罐設(shè)備的以太網(wǎng)輸入端口相連,利用Nmap 探測(cè)腳本分別進(jìn)行了設(shè)備操作系統(tǒng)指紋識(shí)別、系統(tǒng)探測(cè)。然后測(cè)試S7comm 私有服務(wù)實(shí)現(xiàn)情況,以“0x28 PLC start”為例,向蜜罐設(shè)備發(fā)送基于真實(shí)設(shè)備反饋信息的數(shù)據(jù)包,如圖6 所示,蜜罐系統(tǒng)能夠識(shí)別出數(shù)據(jù)包請(qǐng)求的S7comm私有服務(wù)為“28”并返回對(duì)應(yīng)響應(yīng)數(shù)據(jù)包。經(jīng)完整測(cè)試,蜜罐系統(tǒng)支持表1中列舉的全部11種S7comm私有服務(wù)。
圖6 蜜罐系統(tǒng)日志Fig.6 Log of honeypot system
業(yè)務(wù)邏輯攻擊測(cè)試的主要目的是驗(yàn)證蜜罐系統(tǒng)的物理域交互能力。在虛擬機(jī)內(nèi)以S7-300 模式部署定制版Conpot,運(yùn)行信息服務(wù)仿真模塊主程序和數(shù)據(jù)轉(zhuǎn)存模塊中主程序,在宿主機(jī)中運(yùn)行Simulink實(shí)時(shí)仿真,開(kāi)始更新實(shí)時(shí)數(shù)據(jù)。
如圖7 所示,測(cè)試設(shè)備對(duì)蜜罐系統(tǒng)進(jìn)行了完整測(cè)試來(lái)驗(yàn)證其連接穩(wěn)定性和功能協(xié)同性。考慮到過(guò)程控制仿真模塊中信號(hào)的復(fù)雜多樣,以總閥(圖8)和管道壓強(qiáng)值PT2的全過(guò)程狀態(tài)(圖9)為例展示蜜罐系統(tǒng)中的運(yùn)行狀態(tài)。
在716 s 前,過(guò)程控制仿真模塊持續(xù)正常運(yùn)行。在此間,測(cè)試設(shè)備通過(guò)使用包含Read 功能碼的請(qǐng)求數(shù)據(jù)包Read_1 向蜜罐系統(tǒng)發(fā)起第一次通信,請(qǐng)求讀取PLC 的I 區(qū)實(shí)時(shí)數(shù)據(jù),得到系統(tǒng)返回的響應(yīng)數(shù)據(jù)包。響應(yīng)數(shù)據(jù)包的實(shí)時(shí)數(shù)據(jù)來(lái)自過(guò)程控制仿真模塊,在數(shù)據(jù)轉(zhuǎn)存模塊模擬真實(shí)PLC 的I區(qū)7通道數(shù)據(jù)格式進(jìn)行格式化組合,為28 位7 通道十六進(jìn)制數(shù)“557931e12af52eec13dd2808244b”,這段正常I 區(qū)數(shù)據(jù)作為S7data攜帶的PLC的I區(qū)數(shù)據(jù)的一部分被組入響應(yīng)數(shù)據(jù)包。
在716 s 時(shí),測(cè)試設(shè)備使用包含Write 功能碼的數(shù)據(jù)包向蜜罐系統(tǒng)發(fā)起第二次通信,請(qǐng)求寫(xiě)入控制指令,得到寫(xiě)入成功的響應(yīng)數(shù)據(jù)包,這表示攻擊者已成功劫持了PLC 輸出。此時(shí)數(shù)據(jù)轉(zhuǎn)存模塊發(fā)送出去的控制指令也隨攻擊指令發(fā)生了變化,可見(jiàn)圖8 中過(guò)程控制仿真模塊的總閥信號(hào)由0 階躍為1,閥門(mén)由開(kāi)啟轉(zhuǎn)為關(guān)閉,過(guò)程控制仿真模塊的生產(chǎn)狀態(tài)立即發(fā)生變化,圖9 中PT2 輸出值發(fā)生突變,系統(tǒng)的正常運(yùn)行遭到破壞,開(kāi)始輸出失常的實(shí)時(shí)數(shù)據(jù),直至仿真結(jié)束。
在716 s 后,再次使用包含Read 功能碼的數(shù)據(jù)包發(fā)起第三次通信,請(qǐng)求讀數(shù)據(jù),得到過(guò)程控制仿真模塊生產(chǎn)癱瘓狀態(tài)下系統(tǒng)返回的響應(yīng)數(shù)據(jù)包,此時(shí)接收到的數(shù)據(jù)已變?yōu)槭С區(qū)數(shù)據(jù)“00000000000000000000027c024e8”,可見(jiàn)其中末位2個(gè)通道值保持穩(wěn)定(溫度為室溫不變),其余過(guò)程量歸零,這表示系統(tǒng)傳感器輸出異常,攻擊者據(jù)此可知生產(chǎn)過(guò)程遭到了破壞。
圖7 高交互蜜罐系統(tǒng)測(cè)試流程Fig.7 Test process of high-interaction honeypot system
圖8 仿真期間總閥信號(hào)狀態(tài)圖Fig.8 Signal state diagram of main valve during simulation
圖9 仿真期間管道壓強(qiáng)PT2信號(hào)狀態(tài)圖Fig.9 Signal state diagram of pipe pressure PT2 during simulation
通過(guò)以上測(cè)試可知,本文設(shè)計(jì)的高交互PLC 蜜罐系統(tǒng)各模塊能穩(wěn)定工作,內(nèi)部連接和對(duì)外交互運(yùn)轉(zhuǎn)正常,多次通信證實(shí)了蜜罐系統(tǒng)實(shí)現(xiàn)的不同S7comm 私有服務(wù)在迎合攻擊者的行為方面配合默契,邏輯嚴(yán)密,具備良好的協(xié)同性。其仿真工業(yè)過(guò)程提供的實(shí)時(shí)生產(chǎn)數(shù)據(jù)和可供破壞的生產(chǎn)環(huán)境形成的物理域交互循環(huán)對(duì)只接觸過(guò)信息域交互蜜罐的攻擊者來(lái)說(shuō)更具誘騙性。綜上可得出結(jié)論,本文設(shè)計(jì)的高交互PLC 蜜罐系統(tǒng)達(dá)到了引言中提出的高交互的指標(biāo)。相較于以往的中低交互工控蜜罐,本文所設(shè)計(jì)的PLC蜜罐系統(tǒng)具有顯著的突破性。
蜜罐技術(shù)是對(duì)抗日益猖獗的互聯(lián)網(wǎng)威脅建立的防御手段,由于傳統(tǒng)工控蜜罐交互能力的局限和輸出信息的隨機(jī)化,不具備足夠的真實(shí)性和欺騙性。本文針對(duì)此問(wèn)題,提出了一種結(jié)合工控業(yè)務(wù)仿真的高交互PLC蜜罐系統(tǒng)搭建方法。當(dāng)攻擊者對(duì)基于工控業(yè)務(wù)仿真的高交互PLC 蜜罐系統(tǒng)進(jìn)行攻擊時(shí),其不僅能夠獲取到實(shí)時(shí)更新的生產(chǎn)數(shù)據(jù),還能夠控制PLC蜜罐輸出對(duì)生產(chǎn)系統(tǒng)寫(xiě)入數(shù)據(jù)來(lái)造成生產(chǎn)停車(chē),完成邏輯閉環(huán)的蜜罐系統(tǒng)也因此具備更高的誘騙性。相較于傳統(tǒng)低交互、中交互蜜罐,本文提出的蜜罐系統(tǒng)發(fā)展了新的交互層次,在信息域交互的基礎(chǔ)上不僅拓展了物理域的業(yè)務(wù)邏輯支持,交互形式也更加立體、豐富、真實(shí)。
本文的研究目標(biāo)集中于Simulink 仿真系統(tǒng)與定制Conpot蜜罐的數(shù)據(jù)交換框架、S7comm 私有功能的擴(kuò)展和S7comm 協(xié)議數(shù)據(jù)包的字段解析上,沒(méi)有針對(duì)PLC程序的控制、解析進(jìn)行研究,此外由于使用了預(yù)設(shè)的攻擊腳本,沒(méi)有進(jìn)行廣泛的攻擊行為描述,這是未來(lái)研究的方向。