亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        可編程邏輯控制器的控制邏輯注入攻擊入侵檢測(cè)方法

        2023-07-03 14:12:12孫怡亭李長(zhǎng)進(jìn)張紅軍劉俊矯孫利民
        計(jì)算機(jī)應(yīng)用 2023年6期
        關(guān)鍵詞:指令程序檢測(cè)

        孫怡亭,郭 越,李長(zhǎng)進(jìn),張紅軍,劉 康,劉俊矯,孫利民

        (1.物聯(lián)網(wǎng)信息安全技術(shù)北京市重點(diǎn)實(shí)驗(yàn)室(中國(guó)科學(xué)院信息工程研究所),北京 100093;2.中國(guó)科學(xué)院大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院,北京 100049;3.河南中煙工業(yè)有限責(zé)任公司 許昌卷煙廠,河南 許昌 461000;4.河南新拓途信息技術(shù)有限公司,鄭州 450000)

        0 引言

        工業(yè)控制系統(tǒng)(Industrial Control System,ICS)是國(guó)家基礎(chǔ)設(shè)施的神經(jīng)中樞,可編程邏輯控制器(Programmable Logic Controller,PLC)是ICS 的基礎(chǔ)控制單元[1]。隨著工業(yè)4.0 的興起,PLC 通過(guò)互聯(lián)網(wǎng)的連通性不斷增強(qiáng),致使針對(duì)PLC 的攻擊面大幅增加。由于PLC 在工業(yè)控制過(guò)程中的敏感作用,一旦它們被成功利用,將導(dǎo)致物理過(guò)程偏離預(yù)期的規(guī)定運(yùn)行,造成關(guān)鍵設(shè)施損壞、非計(jì)劃停產(chǎn)和人員傷亡等嚴(yán)重后果[2-3]。

        在各種PLC 攻擊中,控制邏輯注入攻擊造成的危害最嚴(yán)重。攻擊者以PLC 控制邏輯為目標(biāo),通過(guò)篡改或注入惡意的控制邏輯破壞正常的物理控制過(guò)程。例如,Stuxnet[2]感染了控制離心機(jī)變頻驅(qū)動(dòng)的西門子S7 300 PLC 的控制邏輯,更改電機(jī)轉(zhuǎn)速?gòu)亩袛囹?qū)動(dòng)器的正常運(yùn)行。近年來(lái),學(xué)術(shù)界關(guān)于控制邏輯攻擊的研究層出不窮,例如DEO(Denial of Engineering Operations attack)[4]、CLIK(Control Logic Infection Attack)[5]和PLCinject[6]等。

        因?yàn)閻阂饪刂七壿嫵绦蛲ǔMㄟ^(guò)網(wǎng)絡(luò)下載,所以針對(duì)網(wǎng)絡(luò)流量的深度解析技術(shù)常用來(lái)檢測(cè)此類攻擊;隨著碎片和噪聲填充[7]等更為隱蔽的控制邏輯注入攻擊的出現(xiàn),攻擊者能夠繞過(guò)有效載荷檢查等傳統(tǒng)檢測(cè)技術(shù)?;赑LC 代碼的形式化驗(yàn)證技術(shù)也常用于防御攻擊,包括PLC 代碼形式化模型構(gòu)建、狀態(tài)縮減、規(guī)范生成和模型檢測(cè)等,但形式化驗(yàn)證的狀態(tài)爆炸問(wèn)題使之難以實(shí)際應(yīng)用,而且需要工程人員結(jié)合設(shè)備所處物理環(huán)境制定安全屬性,迫切需要一種能檢測(cè)PLC 控制邏輯注入攻擊的實(shí)用化方法,高效檢測(cè)出多種注入攻擊。

        本文提出了一種針對(duì)PLC 控制邏輯注入攻擊的入侵檢測(cè)方法,稱為PLCShield(Programmable Logic Controller Shield)。首先,逆向了PLC 程序提取的協(xié)議交互模式,實(shí)現(xiàn)與PLC 的通信過(guò)程,主動(dòng)獲取控制邏輯的基線程序。其次,將提取的PLC 二進(jìn)制程序統(tǒng)一重構(gòu)為便于解析的指令表(Instruction List,IL)語(yǔ)言程序。然后,采用詞法、語(yǔ)法和數(shù)據(jù)流分析等技術(shù)自動(dòng)化分析控制程序,提取程序?qū)傩?、地址、值域和結(jié)構(gòu)等檢測(cè)規(guī)則。以上步驟使得白名單生成流程自動(dòng)化且無(wú)需人工參與。最后,基于檢測(cè)規(guī)則,提出了主被動(dòng)結(jié)合的攻擊檢測(cè)算法,即輕量級(jí)、主動(dòng)地向PLC 請(qǐng)求檢測(cè)信息和被動(dòng)的網(wǎng)絡(luò)流量解析,從不同角度實(shí)時(shí)檢測(cè)攻擊行為。

        為了驗(yàn)證PLCShield 的可行性,本文以羅克韋爾AB MicroLogix 1400、西門子S7 300、西門子S7 400 和施耐德M221 這4 款PLC 作為案例,實(shí)現(xiàn)了一個(gè)原型系統(tǒng)并搭建了一個(gè)仿真環(huán)境模擬真實(shí)的工控環(huán)境進(jìn)行測(cè)試。實(shí)驗(yàn)結(jié)果表明,本文檢測(cè)方法可以在不影響PLC 正常工作的情況下,有效檢測(cè)出控制邏輯注入攻擊,準(zhǔn)確率在97.71%以上。

        本文的主要工作如下。

        1)二進(jìn)制程序反編譯。通過(guò)分析PLC 二進(jìn)制程序結(jié)構(gòu),從網(wǎng)絡(luò)流量中將各種語(yǔ)言編譯的二進(jìn)制程序重構(gòu)為便于解析的高級(jí)指令表程序。

        2)檢測(cè)規(guī)則自動(dòng)化生成。通過(guò)自動(dòng)化分析PLC 指令表程序的配置文件、指令功能、變量屬性和執(zhí)行路徑等信息,提取程序?qū)傩?、地址、值域和結(jié)構(gòu)等檢測(cè)規(guī)則,作為攻擊檢測(cè)的基線。

        3)主被動(dòng)相結(jié)合的檢測(cè)方案。通過(guò)主動(dòng)請(qǐng)求PLC 的運(yùn)行“快照”和被動(dòng)監(jiān)聽網(wǎng)絡(luò)流量相結(jié)合的方式,實(shí)時(shí)獲取PLC當(dāng)前的運(yùn)行狀態(tài),并與檢測(cè)規(guī)則比對(duì)識(shí)別攻擊行為。

        1 背景知識(shí)

        1.1 PLC的控制邏輯程序

        PLC 的控制邏輯程序以IEC61131-3 標(biāo)準(zhǔn)[8]中定義的5 種編程語(yǔ)言編寫,包括梯形圖邏輯(LaDder logic programming language,LD)、功能模塊(Function Block Diagram,F(xiàn)BD)語(yǔ)言、順序功能流程圖(Sequential Function Chart,SFC)語(yǔ)言、IL 語(yǔ)言和結(jié)構(gòu)文本化(Structured Text,ST)語(yǔ)言。LD、FBD 語(yǔ)言、SFC 語(yǔ)言屬于圖形化的編程語(yǔ)言;IL 語(yǔ)言類似于匯編語(yǔ)言,由操作碼和操作數(shù)組成;ST 語(yǔ)言類似于高級(jí)語(yǔ)言。

        PLC 的控制邏輯是高度結(jié)構(gòu)化的,以西門子PLC 為例,控制邏輯代碼由各種類型塊組成,例如組織塊(Organization Block,OB)、功能塊(Function Block,F(xiàn)B)、函數(shù)(FunCtion,F(xiàn)C)等。一個(gè)PLC 控制程序至少包含一個(gè)稱為OB1 的組織塊,相當(dāng)于編程語(yǔ)言中的main 函數(shù),是用戶程序中的主程序。FB、FC 類似于函數(shù)實(shí)現(xiàn)特定功能,如運(yùn)動(dòng)控制、網(wǎng)絡(luò)通信等。每個(gè)程序塊內(nèi)部包括變量定義和具體的代碼邏輯實(shí)現(xiàn)。

        PLC 通常配備有RS-232 串口、以太網(wǎng)和USB 等通信接口,用來(lái)傳輸代碼和數(shù)據(jù)。工程師利用供應(yīng)商提供的上位機(jī)軟件編寫控制程序并編譯為PLC 可執(zhí)行的二進(jìn)制程序,然后使用特定的工控協(xié)議通過(guò)以太網(wǎng)或串口將程序下載到PLC中。同樣,用戶也可以使用上位機(jī)軟件從PLC 中獲取控制程序和數(shù)據(jù)??刂瞥绦蛟谏蟼?下載過(guò)程中主要分為3種類型文件:配置文件、代碼文件和數(shù)據(jù)文件。配置文件記錄了其他類型文件的信息,例如文件地址和大小等,以及PLC 配置信息;代碼文件存儲(chǔ)了PLC 上運(yùn)行的控制邏輯代碼;數(shù)據(jù)文件存儲(chǔ)了在代碼文件中使用的變量,例如輸入、輸出、計(jì)時(shí)器等。

        1.2 PLC控制邏輯注入攻擊

        PLC 控制邏輯注入攻擊就是通過(guò)篡改或注入惡意的控制程序操縱目標(biāo)PLC的物理控制過(guò)程,從而影響工業(yè)控制過(guò)程,甚至產(chǎn)生破壞,Stuxnet 是現(xiàn)實(shí)世界中此類攻擊的典型代表。近年來(lái),與控制邏輯相關(guān)的通用漏洞披露(Common Vulnerabilities and Exposures,CVE)呈現(xiàn)快速增長(zhǎng)的趨勢(shì)[9]。攻擊者可以利用上位機(jī)漏洞或接入ICS 網(wǎng)絡(luò)訪問(wèn)PLC 原始控制程序,并進(jìn)行惡意篡改[2,6,10]。通常攻擊者為了增強(qiáng)隱蔽性只對(duì)關(guān)鍵控制語(yǔ)句進(jìn)行微小的改動(dòng),例如修改關(guān)鍵方程式或設(shè)定點(diǎn)信息,這需要攻擊者對(duì)程序和物理過(guò)程有足夠的了解[5]。除此之外,攻擊者還可以篡改程序字節(jié)碼或二進(jìn)制文件,攻擊者首先對(duì)程序字節(jié)碼或二進(jìn)制進(jìn)行逆向操作,然后修改反編譯后的程序從而產(chǎn)生攻擊,這個(gè)過(guò)程發(fā)生在控制程序從上位機(jī)下載到PLC期間,攻擊者作為中間人攔截和修改程序傳輸流量,相關(guān)攻擊如:DEO[4]、LLB(Ladder Logic Bombs)[11]。

        隨著對(duì)抗能力的增強(qiáng),攻擊者開始使用更高級(jí)的手段來(lái)逃避各種檢測(cè)機(jī)制,例如攻擊者通過(guò)構(gòu)造虛假響應(yīng)向工程人員營(yíng)造出控制邏輯未被攻擊的假象[2,5]。Yoo 等[7]提出了一種名為碎片和噪聲填充的新型攻擊,隱藏惡意控制邏輯在網(wǎng)絡(luò)上的傳輸,逃避了傳統(tǒng)的深度數(shù)據(jù)包檢查,成功實(shí)現(xiàn)對(duì)PLC 控制邏輯的注入攻擊,而市面上常見的網(wǎng)絡(luò)IDS 很難檢測(cè)到這種類型的攻擊。

        1.3 相關(guān)工作

        現(xiàn)如今許多工業(yè)協(xié)議都支持TCP/IP(Transmission Control Protocol/ Internet Protocol)和以太網(wǎng)通信,PLC 通常配備有RS-232 串口、以太網(wǎng)等通信接口,用來(lái)傳輸代碼或數(shù)據(jù)。一個(gè)可行的解決方案是在控制邏輯下載到PLC 之前進(jìn)行驗(yàn)證。例如,比較正在傳輸?shù)目刂七壿嬇c正??刂七壿嫞?2-13],即如果PLC 控制邏輯在執(zhí)行期間僅遵循有效的執(zhí)行路徑[14],則可以檢查PLC 運(yùn)行時(shí)控制邏輯的控制流。最有效的方法是在ICS 網(wǎng)絡(luò)中檢測(cè)并阻止控制邏輯數(shù)據(jù)包的傳輸,除非明確允許該傳輸。通常,可以通過(guò)檢查PLC 協(xié)議標(biāo)頭實(shí)現(xiàn),該標(biāo)頭包含有效負(fù)載類型的信息[1,15],或者檢查數(shù)據(jù)包的有效負(fù)載以識(shí)別控制邏輯或PLC 配置中的未經(jīng)授權(quán)的更改[16]。

        形式化驗(yàn)證技術(shù)長(zhǎng)期以來(lái)也一直用于防御控制邏輯注入攻擊,該技術(shù)是基于某種形式的邏輯來(lái)驗(yàn)證程序是否符合其規(guī)范,研究主要集中在行為建模[17-19]、狀態(tài)減少[20-21]、規(guī)范生成[21-22]和驗(yàn)證[23-24]。形式化驗(yàn)證技術(shù)具有其他解決方案無(wú)法提供的優(yōu)點(diǎn)。PLC 在控制物理過(guò)程時(shí)必須嚴(yán)格滿足實(shí)時(shí)性約束,這對(duì)于執(zhí)行大量動(dòng)態(tài)分析的重量級(jí)解決方案說(shuō)是不切實(shí)際的;而形式化驗(yàn)證是輕量級(jí)的,能夠適用于控制邏輯注入攻擊的檢測(cè)。

        2 控制邏輯注入攻擊檢測(cè)方法

        如圖1 所示,PLCShield 主要包括白名單規(guī)則生成階段和基于規(guī)則的主被動(dòng)攻擊檢測(cè)階段兩個(gè)階段。

        圖1 控制邏輯注入攻擊檢測(cè)方法Fig.1 Control logic injection attack detection method

        2.1 基于基線程序白名單規(guī)則的自動(dòng)化生成方法

        本文提出了一種基于基線程序白名單規(guī)則的自動(dòng)化生成方法,相關(guān)技術(shù)已申請(qǐng)了專利[25],專利僅說(shuō)明了從基線程序中提取白名單規(guī)則,而本文則詳細(xì)介紹了如何從基線程序中提取白名單規(guī)則以及提取了哪些白名單規(guī)則。

        在工業(yè)控制系統(tǒng)中,PLC 的控制邏輯確定了系統(tǒng)的業(yè)務(wù)控制流程,諸如定時(shí)器設(shè)定點(diǎn)信息、一些關(guān)鍵變量的取值范圍等。通過(guò)分析PLC 基線程序,能夠提取用于控制邏輯注入攻擊檢測(cè)的多種白名單信息。

        1)程序結(jié)構(gòu)白名單。IEC 標(biāo)準(zhǔn)強(qiáng)調(diào)結(jié)構(gòu)化的程序結(jié)構(gòu),控制邏輯由程序組織單元(Programming Organization Unit,POU)例如程序塊、功能塊、函數(shù)等組成。每個(gè)POU 都有固定的類型和塊號(hào)。在程序執(zhí)行期間,從主程序塊開始執(zhí)行,程序塊在執(zhí)行過(guò)程中可以調(diào)用其他的函數(shù)或者功能塊。當(dāng)工程人員將定義好的控制邏輯下載到PLC 中時(shí),控制邏輯包含的塊類型、數(shù)目和塊之間的結(jié)構(gòu)關(guān)系都是固定的,這樣才能保證PLC 進(jìn)行正常的物理控制過(guò)程。許多攻擊者會(huì)將惡意程序塊注入PLC 中,并篡改原始程序調(diào)用惡意程序塊,使得惡意程序在下一個(gè)循環(huán)周期中自動(dòng)執(zhí)行且不會(huì)中斷任何服務(wù)。對(duì)于程序結(jié)構(gòu)白名單的生成,需要基于IL 語(yǔ)言特征對(duì)程序進(jìn)行控制流分析,提取程序間的結(jié)構(gòu)關(guān)系。

        2)程序?qū)傩园酌麊?。控制邏輯中每個(gè)POU 塊都有一些固定的屬性特征,表明該P(yáng)OU 塊的一些基本信息,例如塊的大小、地址、校驗(yàn)和梯級(jí)數(shù)目等。這些POU 塊的基本屬性信息可以提供一些重要的指示,說(shuō)明PLC 控制程序可能發(fā)生的變化或修改。生成程序?qū)傩园酌麊?,需要提取并解析配置文件?nèi)容,得到POU 塊的屬性特征。

        3)程序地址范圍白名單。程序在執(zhí)行過(guò)程中,只會(huì)讀寫程序使用范圍內(nèi)的物理地址,如果出現(xiàn)超出范圍的讀寫操作,很可能是攻擊者在探測(cè)或注入一些非法數(shù)據(jù)和代碼。生成程序地址范圍白名單,需要對(duì)程序進(jìn)行詞法分析提取變量集合,并將變量信息映射為實(shí)際物理地址,從而得到程序有效地址范圍集合。

        4)程序數(shù)據(jù)范圍白名單。PLC 運(yùn)行時(shí)的數(shù)據(jù)取值范圍受內(nèi)部程序約束,例如水閘控制的水位閾值等。攻擊者若篡改了控制這些關(guān)鍵數(shù)據(jù)的代碼,會(huì)使數(shù)據(jù)超出合法取值范圍,破壞物理世界的穩(wěn)定,震網(wǎng)病毒通過(guò)篡改與離心機(jī)有關(guān)的控制語(yǔ)句使得離心機(jī)轉(zhuǎn)速超出預(yù)設(shè)值。因此可以基于對(duì)控制程序進(jìn)行數(shù)據(jù)流分析得到程序數(shù)據(jù)范圍白名單,通過(guò)判斷變量取值是否超出合法范圍,從而斷定控制程序或寄存器數(shù)值是否遭受惡意篡改。

        本文以羅克韋爾AB MicroLogix 1400 PLC 為例,介紹白名單規(guī)則的提取過(guò)程,包括基線程序采集、二進(jìn)制程序反編譯和白名單規(guī)則提取。

        1)基線程序采集。白名單規(guī)則是以PLC 正常工作狀態(tài)下運(yùn)行的控制邏輯為依據(jù)構(gòu)建,將PLC 未遭受攻擊狀態(tài)下的控制邏輯程序稱為基線程序。該步驟是使用特定的通信協(xié)議與PLC 建立連接并發(fā)送程序上載請(qǐng)求提取基線程序。MicroLogix 1400 PLC 使 用PCCC(Programmable Controller Communication Command)協(xié)議通信,程序上載主要包括3 種類型文件:配置文件、代碼文件和數(shù)據(jù)文件(輸入、輸出、計(jì)時(shí)器和計(jì)數(shù)器等),表1 展示了PCCC 協(xié)議中常見的文件類型字段含義。

        表1 PCCC協(xié)議中常見文件類型Tab.1 Common file types in PCCC protocol

        由于代碼和數(shù)據(jù)文件的數(shù)目、映射地址和大小記錄在配置文件中,因此首先需要獲取并解析配置文件。MicroLogix 1400 PLC 的文件信息在配置文件中以10 B 的結(jié)構(gòu)存儲(chǔ),其格式如表2 所示,多余字節(jié)由0x00 填充?;谂渲梦募Y(jié)構(gòu),解析得到此次傳輸程序中一共包含6 個(gè)程序文件和8 個(gè)數(shù)據(jù)文件,如圖2 所示。

        表2 配置文件中的文件信息存儲(chǔ)結(jié)構(gòu)Tab.2 File information storage structure in configuration file

        圖2 MicroLogix1400 PLC配置文件解析結(jié)果Fig.2 Analysis results of MicroLogix1400 PLC configuration file

        基于文件類型、起始地址和大小,構(gòu)造請(qǐng)求數(shù)據(jù)包,獲取以上文件內(nèi)容,程序采集流程如圖3 所示。

        圖3 MicroLogix1400 PLC程序采集流程Fig.3 Flow of MicroLogix1400 PLC program acquisition

        2)二進(jìn)制程序反編譯為IL 程序。IEC 標(biāo)準(zhǔn)定義了5 種PLC 編程語(yǔ)言,語(yǔ)言之間可以自由混合編程。編程語(yǔ)言的多樣性對(duì)開發(fā)人員是一個(gè)優(yōu)勢(shì),但對(duì)程序分析或檢測(cè)卻是一個(gè)很大的挑戰(zhàn),為了提供普遍且適用的檢測(cè)方案,應(yīng)該支持所有語(yǔ)言。因此,本文選擇將各種語(yǔ)言編譯后的二進(jìn)制程序重構(gòu)為便于解析的IL 語(yǔ)言程序。

        在進(jìn)行反編譯操作之前,需要分析二進(jìn)制程序的內(nèi)部結(jié)構(gòu),本文以IEC61131-3 標(biāo)準(zhǔn)為基準(zhǔn)分析程序結(jié)構(gòu)。如圖4 所示,主要包括程序塊識(shí)別、梯級(jí)識(shí)別、梯級(jí)中指令和數(shù)據(jù)變量識(shí)別等,接著基于分析結(jié)果進(jìn)行反編譯操作。該過(guò)程以代碼塊、數(shù)據(jù)塊等作為輸入,并利用IL 指令映射數(shù)據(jù)庫(kù)進(jìn)行控制程序反編譯。

        圖4 二進(jìn)制程序的反編譯流程Fig.4 Flow of binary program decompilation

        表3 展示了MicroLogix 1400 PLC 二進(jìn)制梯級(jí)結(jié)構(gòu),梯級(jí)始終以兩個(gè)0x00 開始,緊接著第3~4 字節(jié)是梯級(jí)的簽名,第5~6 字節(jié)是梯級(jí)的大??;因此,本文使用梯級(jí)起始字段和梯級(jí)大小字段作為劃分梯級(jí)的依據(jù)。指令從梯級(jí)的第7 字節(jié)開始,按順序連續(xù)放置。每個(gè)指令包括2 個(gè)字節(jié)的操作碼、1個(gè)字節(jié)的文件號(hào)、2 個(gè)字節(jié)的字地址和2 個(gè)字節(jié)的位地址。

        表3 MicroLogix1400 PLC二進(jìn)制梯級(jí)結(jié)構(gòu)Tab.3 MicroLogix1400 PLC binary rung structure

        表3 中操作碼表示指令的具體操作,例如JMP(跳轉(zhuǎn)到標(biāo)簽),SUB(減法)。為了識(shí)別指令操作碼,本文維護(hù)了一個(gè)二進(jìn)制指令與IL 指令之間的映射表,如表4 所示,存儲(chǔ)在MySQL 數(shù)據(jù)庫(kù)中。而指令中操作數(shù)的解析需要文件編號(hào)(File No)、字索引(Word index)和位索引(Bit index)這3 個(gè)字段來(lái)確定。File No 定義了操作數(shù)類型,例如0x00 代表輸出,0x01 代表輸入。Word index 定義了該類型數(shù)據(jù)文件在PLC中的物理地址,Bit index 定義了操作數(shù)在數(shù)據(jù)文件中的偏移位置。其中Word index 是由梯級(jí)中的字偏移量(Word Offset)和配置文件中的起始地址作差得到的。圖5 展示了部分程序的反編譯結(jié)果。

        表4 MicroLogix 1400 PLC部分指令映射表Tab.4 Part of instruction mapping table of MicroLogix 1400 PLC

        圖5 MicroLogix 1400 PLC程序反編譯結(jié)果Fig.5 MicroLogix 1400 PLC program decompilation results

        3)白名單規(guī)則生成。該步驟目標(biāo)是自動(dòng)分析IL 基線程序并提取白名單規(guī)則。程序結(jié)構(gòu)白名單包含MicroLogix 1400 PLC 中合法程序塊之間的調(diào)用關(guān)系。羅克韋爾MicroLogix 系列PLC 一共有 256 個(gè)程序文件,前兩個(gè)是系統(tǒng)文件,LAD 2 是主程序文件,文件3~255 為用戶自行創(chuàng)建的子程序。首先,解析MicroLogix 1400 PLC 的配置文件匯總所有的合法程序塊,如圖2 所示,可知程序包括6 個(gè)程序文件和9 個(gè)數(shù)據(jù)文件。

        本文使用調(diào)用圖(Call Graph,CG)來(lái)描述程序塊之間的結(jié)構(gòu)。CG 是控制流圖,表示了整個(gè)程序塊之間的調(diào)用關(guān)系,圖中的節(jié)點(diǎn)代表程序塊,邊代表程序塊之間調(diào)用關(guān)系。程序調(diào)用白名單生成算法主要分為兩步:基于IL 語(yǔ)言特征采用控制流圖生成算法生成程序塊調(diào)用關(guān)系圖;遍歷CG,生成程序調(diào)用白名單。圖6 為控制程序結(jié)構(gòu),LAD2 為主程序塊,對(duì)LAD2 程序進(jìn)行控制流分析可知,LAD2 一共調(diào)用LAD5、LAD7 和LAD4 這3 個(gè)子程序塊,分別用于電機(jī)控制和頭輪信號(hào)控制等。子程序LAD7 嵌套調(diào)用LAD3、LAD6 子程序。

        圖6 控制程序結(jié)構(gòu)Fig.6 Structure of control program

        程序?qū)傩园酌麊伟怂泻戏ǔ绦驂K的屬性信息,包括程序塊物理地址、大小和梯級(jí)數(shù)目等。這些信息都可以通過(guò)解析MicroLogix 1400 PLC 的配置文件獲取。根據(jù)表1 的文件類型以及文件信息在配置文件的存儲(chǔ)結(jié)構(gòu),可以獲取控制程序、輸入輸出等其他File Type 類型文件的具體信息。例如,通過(guò)解析圖2 配置文件可獲得的程序信息如表5 所示。

        表5 配置文件解析結(jié)果Tab.5 Configuration file parsing results

        表6 LAD2程序地址范圍Tab.6 LAD2 program address range

        程序地址范圍白名單包含了程序有效訪問(wèn)地址集合。例如MicroLogix 1400 PLC 中的變量類型可分為輸入、輸出、字符串、計(jì)時(shí)器等,這些變量與PLC 的內(nèi)存物理地址一一對(duì)應(yīng),通常上位機(jī)或組態(tài)軟件只會(huì)讀寫這些合法的內(nèi)部地址。因此,通過(guò)對(duì)IL 程序中的每個(gè)程序塊分別進(jìn)行詞法分析,提取上述合法的內(nèi)部地址,就可生成程序地址范圍白名單。

        程序數(shù)據(jù)范圍白名單包含程序塊中變量的合法取值范圍。首先,基于IL 語(yǔ)言特征對(duì)程序預(yù)處理,構(gòu)建程序控制流圖,遍歷程序控制流圖得到程序可執(zhí)行路徑集合;然后,分析數(shù)據(jù)流,最終得到變量合法取值范圍。

        圖7展示了對(duì)LAD2代碼的數(shù)據(jù)流分析結(jié)果。首先,程序加載整型N7:0,整型N7:0 的數(shù)據(jù)范圍為(-215,215)。當(dāng)N7:0取值小于50 時(shí),將N7:0 賦值給N7:17,因此N7:17 取值范圍為(-215,50);當(dāng)N7:0 取值大于等于50 時(shí),將50 賦值給N7:17,因此N7:17 的取值為50,最終可得N7:17 的取值范圍為(-215,50],計(jì)時(shí)器T4:34數(shù)據(jù)范圍為[0,800]等?;谝陨戏治?,圖8 展示了生成的鑄造機(jī)LAD2 示例程序塊的檢測(cè)規(guī)則。

        圖7 LAD2程序數(shù)據(jù)范圍分析Fig.7 LAD2 program data range analysis

        圖8 鑄造機(jī)LAD示例程序檢測(cè)規(guī)則Fig.8 Casting machine LAD sample program detection rules

        2.2 主被動(dòng)結(jié)合的攻擊檢測(cè)算法

        控制邏輯注入攻擊最有效的檢測(cè)方法是使用上位機(jī)軟件從PLC 中獲取當(dāng)前運(yùn)行的控制邏輯進(jìn)行分析和檢查。但如果ICS 遭受網(wǎng)絡(luò)攻擊,上位機(jī)與PLC 之間的通信并不可靠,攻擊者可能通過(guò)構(gòu)造虛假響應(yīng)或中間人等手段操縱通信數(shù)據(jù),而且攻擊有時(shí)并不會(huì)反映在網(wǎng)絡(luò)流量中,例如通過(guò)本地編程接口對(duì)PLC 進(jìn)行攻擊。因此,本文提出了一種主動(dòng)和被動(dòng)結(jié)合的攻擊檢測(cè)方案,多角度檢測(cè)控制邏輯注入攻擊。其中:被動(dòng)檢測(cè)通過(guò)被動(dòng)監(jiān)聽與程序傳輸和數(shù)據(jù)讀寫相關(guān)網(wǎng)絡(luò)流量檢測(cè)異常;主動(dòng)檢測(cè)是主動(dòng)與PLC 建立連接并向PLC請(qǐng)求檢測(cè)信息,實(shí)時(shí)監(jiān)控異常行為。

        被動(dòng)檢測(cè)模式下,監(jiān)聽工業(yè)交換機(jī)中流經(jīng)的網(wǎng)絡(luò)流量,提取并解析與程序傳輸相關(guān)的流量信息,依次驗(yàn)證是否滿足程序結(jié)構(gòu)白名單rulestruc、程序?qū)傩园酌麊蝦uleattri、程序地址范圍白名單ruleaddr和程序數(shù)據(jù)范圍白名單rulevalue,檢測(cè)惡意程序塊注入、控制流劫持、指令或數(shù)據(jù)篡改等異常行為,并基于匹配結(jié)果記錄異常程序塊號(hào)及告警信息。

        當(dāng)監(jiān)聽到與數(shù)據(jù)讀寫相關(guān)網(wǎng)絡(luò)流量時(shí),提取IP、數(shù)據(jù)地址和寫入值。首先,根據(jù)設(shè)備IP 檢索程序地址范圍白名單和程序數(shù)據(jù)范圍白名單;然后,驗(yàn)證數(shù)據(jù)地址是否滿足程序地址范圍白名單,檢測(cè)非法地址寫入/讀取等異常行為;最后,驗(yàn)證寫入值是否滿足程序數(shù)據(jù)范圍白名單,檢測(cè)非法數(shù)值寫入等異常行為。被動(dòng)檢測(cè)流程如算法1 所示。

        算法1 被動(dòng)檢測(cè)算法。

        主動(dòng)檢測(cè)模式是在不影響PLC 正常工作的前提下,以低頻率、輪詢的方式主動(dòng)請(qǐng)求PLC當(dāng)前“快照”進(jìn)行檢測(cè),檢測(cè)流程如算法2所示。首先,根據(jù)目標(biāo)PLC的IP地址,加載該IP下所有的白名單規(guī)則。然后,與PLC建立連接,根據(jù)通信協(xié)議構(gòu)建程序上載請(qǐng)求獲取當(dāng)前程序進(jìn)行解析,驗(yàn)證是否滿足程序結(jié)構(gòu)白名單rulestruc、程序?qū)傩园酌麊蝦uleattri、程序地址范圍白名單ruleaddr和程序數(shù)據(jù)范圍白名單rulevalue,從而判斷是否存在程序塊調(diào)用異常、程序塊屬性異常、程序非法寫地址異常和指令篡改異常等異常行為,基于匹配結(jié)果記錄告警信息及異常程序塊號(hào)。同時(shí),遍歷程序地址范圍白名單ruleaddr,主動(dòng)發(fā)送請(qǐng)求包讀取該地址下的寄存器數(shù)值,驗(yàn)證是否滿足程序數(shù)據(jù)范圍白名單rulevalue,檢測(cè)非法數(shù)值、指令篡改等異常行為。以上流程結(jié)束后,結(jié)束任務(wù)并斷開與PLC的連接。

        算法2 主動(dòng)檢測(cè)算法。

        3 實(shí)驗(yàn)與結(jié)果分析

        為了評(píng)估本文方法檢測(cè)出控制邏輯注入攻擊的準(zhǔn)確性,選取工控生產(chǎn)環(huán)境中具有代表性的4 款PLC 進(jìn)行實(shí)驗(yàn),包括西門子S7 300、西門子S7 400、施耐德M221 和羅克韋爾AB MicroLogix 1400。首先,驗(yàn)證二進(jìn)制程序反編譯為IL 源碼的準(zhǔn)確性;然后,模擬控制邏輯注入攻擊,評(píng)估檢測(cè)能力;最后,驗(yàn)證主動(dòng)檢測(cè)模式對(duì)PLC 性能的影響,以說(shuō)明本文方法不會(huì)影響PLC 的正常運(yùn)行。

        3.1 實(shí)驗(yàn)環(huán)境

        本文利用工控軟硬件設(shè)備搭建了一個(gè)仿真環(huán)境模擬真實(shí)的工控系統(tǒng)進(jìn)行驗(yàn)證實(shí)驗(yàn),如圖9 所示,包括工作站、組態(tài)軟件、PLC 設(shè)備、工業(yè)交換機(jī)、現(xiàn)場(chǎng)設(shè)備和檢測(cè)系統(tǒng)。

        圖9 實(shí)驗(yàn)環(huán)境Fig.9 Experimental environment

        PLC 設(shè)備選定了工業(yè)生產(chǎn)環(huán)境中具有代表性的4 款設(shè)備,包括西門子S7 300、西門子S7 400、羅克韋爾MicroLogix 1400 和施耐德M221。為了保證PLC 的實(shí)時(shí)性和穩(wěn)定性,檢測(cè)系統(tǒng)采用旁路部署的方式連接至工業(yè)交換機(jī),以便捕獲ICS 系統(tǒng)中的網(wǎng)絡(luò)流量。

        3.2 反編譯準(zhǔn)確度評(píng)估

        本文為每款設(shè)備選取了50 個(gè)不同物理過(guò)程(例如燃?xì)夤艿?、交通燈等)下的控制程序評(píng)估反編譯的準(zhǔn)確度,驗(yàn)證過(guò)程如下:首先將數(shù)據(jù)集中的程序下載至PLC,然后檢測(cè)模塊從PLC 中提取二進(jìn)制程序并反編譯為IL 語(yǔ)言程序,將反編譯后的代碼與上位機(jī)程序進(jìn)行比較,以驗(yàn)證其準(zhǔn)確度。

        本文使用PLC 編程軟件統(tǒng)計(jì)了數(shù)據(jù)集中每條指令出現(xiàn)的頻率并與反編譯后的結(jié)果進(jìn)行比較,表7 展示了4 款PLC反編譯準(zhǔn)確度的驗(yàn)證結(jié)果。比較結(jié)果顯示反編譯模塊可以100%識(shí)別支持的指令。但是,反編譯中指令識(shí)別過(guò)程依賴于IL 指令映射數(shù)據(jù)庫(kù),其中西門子S7 300 和S7 400 系列PLC是3 個(gè)廠商中支持指令最多的,幾乎能支持IL 語(yǔ)言中所有指令,而施耐德M221 和羅克韋爾Micrologix1400 數(shù)據(jù)庫(kù)支持的IL 指令類型并未完全覆蓋IL 語(yǔ)言中的所有指令類型,后續(xù)仍需擴(kuò)充指令映射數(shù)據(jù)庫(kù)。

        表7 四款PLC反編譯準(zhǔn)確度驗(yàn)證結(jié)果Tab.7 Four PLC decompilation accuracy verification results

        3.3 檢測(cè)能力評(píng)估

        根據(jù)1.2 節(jié)描述的PLC 控制邏輯注入攻擊,擬定了十幾種攻擊,有些攻擊來(lái)源于相關(guān)的PLC 攻擊文獻(xiàn)[4-7,9]。檢測(cè)系統(tǒng)上線前,需要先錄入目標(biāo)PLC 的IP 地址,然后使用白名單規(guī)則生成功能,整個(gè)過(guò)程耗時(shí)較短。接著,系統(tǒng)上線運(yùn)行48 h,期間使用自動(dòng)化工具對(duì)每款PLC 設(shè)備進(jìn)行上百次攻擊實(shí)驗(yàn)。為了驗(yàn)證檢測(cè)系統(tǒng)是否能有效檢測(cè)出控制邏輯注入攻擊,將從檢測(cè)精度、誤報(bào)率、漏報(bào)率這3 個(gè)方面進(jìn)行評(píng)估。檢測(cè)精度越高,誤報(bào)率和漏報(bào)率越低,系統(tǒng)對(duì)控制邏輯注入攻擊的檢測(cè)效果越好。

        表8展示了4款PLC的實(shí)驗(yàn)結(jié)果,對(duì)各種隱蔽性的控制邏輯注入攻擊的檢測(cè)精度都可達(dá)到95%以上。其中,西門子S7 300和S7 400的檢測(cè)精度可達(dá)到98%以上,是3個(gè)廠商中檢測(cè)效果最好的;這是因?yàn)槲鏖T子廠商的PLC的程序結(jié)構(gòu)清晰,可解析信息較為全面,所以生成的檢測(cè)規(guī)則最全面、最細(xì)致。

        表8 4款PLC檢測(cè)能力驗(yàn)證結(jié)果Tab.8 Four PLC detection performance verification results

        檢測(cè)方案對(duì)惡意程序完全替換、惡意程序塊注入等攻擊的檢測(cè)效果最佳,因?yàn)楣綦[蔽性最差,也最容易被發(fā)現(xiàn)。非法地址讀/寫異常檢測(cè)中出現(xiàn)誤報(bào)主要是因?yàn)樯衔粰C(jī)在進(jìn)行正常數(shù)據(jù)監(jiān)控的時(shí)候,訪問(wèn)數(shù)據(jù)地址時(shí)可能會(huì)連帶訪問(wèn)鄰近地址,引起誤報(bào)。其他產(chǎn)生誤報(bào)和漏報(bào)的主要原因是反編譯模塊支持的IL 指令類型并未完全覆蓋PLC 中的所有指令,影響了白名單覆蓋度和檢測(cè)準(zhǔn)確度。

        此外,在實(shí)際的ICS 中,特別是中小型ICS 系統(tǒng),控制程序通常小于10 KB。如果攻擊者想要暗中損害ICS 而不被發(fā)現(xiàn),至少也需要修改幾行代碼。隨著攻擊變得更加具有破壞性,注入的惡意代碼往往越多,例如Stuxnet 病毒包含一萬(wàn)多行代碼,并且需要額外的程序塊或者數(shù)據(jù)塊存儲(chǔ)。隨著異常程序修改內(nèi)容的增加,檢測(cè)效果也變得越來(lái)越好。其中對(duì)于隱蔽性較強(qiáng)的虛假響應(yīng)攻擊,由于攻擊者為了隱藏其惡意攻擊會(huì)將正常程序傳輸流量轉(zhuǎn)發(fā)給檢測(cè)系統(tǒng),主動(dòng)請(qǐng)求方式無(wú)法檢測(cè)到攻擊,但被動(dòng)監(jiān)聽方式會(huì)在惡意程序下載過(guò)程中發(fā)現(xiàn)異常。而對(duì)于碎片和噪聲填充攻擊以及通過(guò)本地USB 上傳惡意控制程序這種常規(guī)的入侵檢測(cè)系統(tǒng)無(wú)法檢測(cè)到的攻擊,本文檢測(cè)方法可以通過(guò)主動(dòng)請(qǐng)求方式檢測(cè)到。因此,使用主被動(dòng)結(jié)合的方式具有更好的檢測(cè)效果。

        3.4 主動(dòng)檢測(cè)模式對(duì)PLC性能影響

        由于PLC 實(shí)時(shí)性較強(qiáng),額外的網(wǎng)絡(luò)流量可能影響工業(yè)控制系統(tǒng)控制的過(guò)程。主要原因是PLC 有限的系統(tǒng)資源導(dǎo)致在處理通信的時(shí)候可能會(huì)影響控制程序的正常運(yùn)行,使循環(huán)周期變長(zhǎng)。而檢測(cè)系統(tǒng)在主動(dòng)檢測(cè)模式下,涉及對(duì)PLC 控制邏輯以及寄存器的讀操作請(qǐng)求,因此需要驗(yàn)證該模式是否會(huì)對(duì)PLC 工作過(guò)程造成影響。

        為了測(cè)試主動(dòng)檢測(cè)模式對(duì)PLC 性能的影響,實(shí)驗(yàn)使用特定協(xié)議每秒向PLC 發(fā)送不同頻率的數(shù)據(jù)包并測(cè)量設(shè)備的循環(huán)周期時(shí)間。在正常程序運(yùn)行狀態(tài)下,PLC 的循環(huán)周期在1~3 ms,大部分時(shí)間處于2 ms 左右。

        根據(jù)圖10 可知,隨著發(fā)包頻率的增加,這4 款PLC 的周期時(shí)間幾乎沒(méi)有受到影響,而且檢測(cè)系統(tǒng)在實(shí)際運(yùn)行過(guò)程中,主動(dòng)檢測(cè)的數(shù)據(jù)包頻率小于實(shí)驗(yàn)中的最大頻率,不會(huì)影響PLC 的正常工作。用戶可以根據(jù)生產(chǎn)情況,自定義適合的主動(dòng)檢測(cè)頻率。

        圖10 不同PLC發(fā)包次數(shù)對(duì)循環(huán)周期的影響Fig.10 Influence of different PLC packet sending times on cycle period

        4 結(jié)語(yǔ)

        本文針對(duì)PLC 控制邏輯注入攻擊檢測(cè)面臨的問(wèn)題,提出了一種基于PLC 程序的檢測(cè)規(guī)則自動(dòng)化生成方法PLCShield,能夠在無(wú)需先驗(yàn)知識(shí)的前提下構(gòu)建完備的檢測(cè)規(guī)則。采用主被動(dòng)相結(jié)合的檢測(cè)模式,在不干擾PLC 正常操作的情況下,準(zhǔn)確識(shí)別控制邏輯注入攻擊。下一步將擴(kuò)展支持的PLC 型號(hào)和協(xié)議:將PLCShield 擴(kuò)展到更多的PLC 型號(hào)和使用的通信協(xié)議上以適應(yīng)不同的工業(yè)控制系統(tǒng)。

        猜你喜歡
        指令程序檢測(cè)
        聽我指令:大催眠術(shù)
        “不等式”檢測(cè)題
        “一元一次不等式”檢測(cè)題
        “一元一次不等式組”檢測(cè)題
        試論我國(guó)未決羈押程序的立法完善
        ARINC661顯控指令快速驗(yàn)證方法
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        小波變換在PCB缺陷檢測(cè)中的應(yīng)用
        18禁高潮出水呻吟娇喘蜜芽| a级毛片无码免费真人| 久久99精品久久久久久秒播 | 亚洲中文字幕在线一区| 久久人妻av一区二区软件| 欧美亚洲色综久久精品国产| 日本老熟欧美老熟妇| 亚洲AV无码一区二区三区天堂网 | 伊人久久久精品区aaa片| 色先锋资源久久综合5566| 欧美日韩区1区2区3区| 一区二区三区在线视频免费观看| 亚洲另类国产精品中文字幕| 中文字幕久久久人妻人区| 婷婷伊人久久大香线蕉av| 国产女人高潮叫床视频| 国产人碰人摸人爱视频| 毛片无遮挡高清免费久久| 日韩人妻中文字幕一区二区| 亚洲av成人永久网站一区| 精品亚洲麻豆1区2区3区| 免费人妻无码不卡中文字幕系 | 男女无遮挡高清性视频| 亚洲色在线v中文字幕| 欧美在线视频免费观看| 2020久久精品亚洲热综合一本| 久久精品国产精品亚洲婷婷| 国产剧情av麻豆香蕉精品| 免费乱理伦片在线观看| 国产成人无码av在线播放dvd| 国产亚洲精品福利在线| 国产一区二区黑丝美女| 一区二区三区国产色综合| 国色天香精品一卡2卡3卡4| 丰满五十六十老熟女hd| 国产成人AV乱码免费观看| 亚洲精品在线97中文字幕| 国产成人精品一区二区三区| 伊人色综合视频一区二区三区 | 久久久久久一本大道无码| 日本少妇一区二区三区四区|