任軍鋒,楊立源
(上海工業(yè)自動(dòng)化儀表研究院有限公司,上海 200233)
隨著“中國制造2025”行動(dòng)綱領(lǐng)的推出和近年工業(yè)互聯(lián)網(wǎng)的迅速發(fā)展,全球各地爆發(fā)的工業(yè)互聯(lián)網(wǎng)安全事故讓越來越多的人意識(shí)到,工業(yè)生產(chǎn)環(huán)境不再是信息孤島,工業(yè)生產(chǎn)環(huán)境的系統(tǒng)安全防護(hù)已經(jīng)迫在眉睫。工業(yè)生產(chǎn)環(huán)境一旦遭到攻擊,造成的損失往往是巨大的。伊朗核電站遭受的震網(wǎng)病毒和富士康工廠遭受的勒索病毒,都是很好的例證。在整個(gè)工業(yè)互聯(lián)網(wǎng)安全防御中,主機(jī)的安全防護(hù)是工業(yè)互聯(lián)網(wǎng)的最后一道防線。
工業(yè)生產(chǎn)環(huán)境的主機(jī)系統(tǒng)中,運(yùn)行軟件和運(yùn)行環(huán)境相對(duì)固定,但是未知軟件程序的威脅卻是不可預(yù)知的。因此,工業(yè)現(xiàn)場(chǎng)的主機(jī)不適用黑名單規(guī)則,而適用白名單規(guī)則[1]。以當(dāng)前安全的基礎(chǔ)軟件環(huán)境為基準(zhǔn)點(diǎn),分別按照可執(zhí)行的控制文件(包含COM、EXE、OCX、DLL文件)、網(wǎng)卡設(shè)備和U盤設(shè)備生成多組白名單規(guī)則。采用國密SM3算法生成各條白名單規(guī)則的指紋信息。主機(jī)衛(wèi)士軟件將實(shí)時(shí)監(jiān)控本機(jī)系統(tǒng)運(yùn)行情況,根據(jù)配置的白名單規(guī)則,實(shí)時(shí)對(duì)運(yùn)行過程中產(chǎn)生的進(jìn)程事件、U盤插拔事件、網(wǎng)卡啟用/禁用事件進(jìn)行行為審計(jì),并對(duì)不在白名單內(nèi)的行為事件生成實(shí)時(shí)告警信息。同時(shí),主機(jī)衛(wèi)士支持切換審計(jì)和保護(hù)兩種模式。審計(jì)模式下,系統(tǒng)對(duì)白名單規(guī)則外的事件只生成告警信息,而不會(huì)阻斷該行為。保護(hù)模式下,系統(tǒng)對(duì)白名單規(guī)則外的事件既阻斷該事件行為,又生成阻斷的告警信息。
工業(yè)主機(jī)衛(wèi)士的主要功能是基于白名單規(guī)則對(duì)可執(zhí)行文件、U盤和網(wǎng)卡等進(jìn)行實(shí)時(shí)監(jiān)控。該產(chǎn)品支持審計(jì)和保護(hù)兩種模式。用戶可以通過Web頁面對(duì)指定的、已安裝主機(jī)衛(wèi)士的主機(jī)設(shè)置白名單規(guī)則;通過切換主機(jī)衛(wèi)士模式,可在Web頁面查看到實(shí)時(shí)的告警事件和阻斷事件信息。該需求需要分六步實(shí)現(xiàn)。①主機(jī)衛(wèi)士與管理平臺(tái)通信接口服務(wù):選擇性能健壯,耦合度低,簡(jiǎn)潔易用。②瀏覽器/服務(wù)器(browser/server,B/S)分布式架構(gòu)設(shè)計(jì)的擴(kuò)展性:采用Web層、中間件層、主機(jī)層三層架構(gòu)。③白名單規(guī)則的設(shè)計(jì)。④消息應(yīng)用程序編程接口(application programming interface,API)結(jié)構(gòu)流程設(shè)計(jì):消息收發(fā)必須經(jīng)過確認(rèn),設(shè)置快、慢消息隊(duì)列,以防止消息擁堵。⑤阻斷進(jìn)程和U盤網(wǎng)卡外設(shè)的技術(shù)方式:選擇Windows API Hook技術(shù),開發(fā)便捷,易于擴(kuò)展,且能在真正運(yùn)行前阻斷。⑥數(shù)據(jù)存儲(chǔ):選擇輕量、便捷存儲(chǔ)的數(shù)據(jù)庫,以節(jié)約主機(jī)資源。
與其他緩存產(chǎn)品相比,Redis消息中間件有以下特點(diǎn):①支持?jǐn)?shù)據(jù)持久化;②支持key-value、列表、集合結(jié)構(gòu)的存儲(chǔ);③支持?jǐn)?shù)據(jù)備份及主從模式部署。主機(jī)衛(wèi)士軟件系統(tǒng)和管理平臺(tái)可以自由設(shè)計(jì)消息結(jié)構(gòu),通過該Redis消息中間件傳遞數(shù)據(jù),降低了系統(tǒng)和平臺(tái)的端耦合度。主機(jī)衛(wèi)士軟件系統(tǒng)和管理平臺(tái)的接口開發(fā)都不受平臺(tái)和開發(fā)語言的影響,提高了程序的兼容性和可用性[2]。
1.2.1 國密SM3加密算法
SM3加密算法是我國自主設(shè)計(jì)的密碼雜湊算法,適用于商用密碼中數(shù)字簽名和驗(yàn)證消息認(rèn)證碼的生成與驗(yàn)證,以及隨機(jī)數(shù)的生成,可滿足多種密碼應(yīng)用的安全需求[3]。在白名單規(guī)則的指紋信息生成部分,主機(jī)衛(wèi)士采用了SM3算法,安全性優(yōu)于MD5和SHA-1算法。
SQLite數(shù)據(jù)庫是一個(gè)進(jìn)程內(nèi)的庫,實(shí)現(xiàn)了自給自足的、無服務(wù)器的、零配置的、事務(wù)性的結(jié)構(gòu)化查詢語言(structured query language,SQL)數(shù)據(jù)庫引擎。它具有不依賴服務(wù)、無需安裝、跨平臺(tái)、支持標(biāo)準(zhǔn)SQL語句等特點(diǎn),是輕量級(jí)數(shù)據(jù)庫。主機(jī)衛(wèi)士軟件中主要存儲(chǔ)白名單規(guī)則信息和模式配置信息。SQLite數(shù)據(jù)庫完全能滿足需求且使用便捷[4]。
1.2.2 Windows API Hook技術(shù)
Hook技術(shù)是對(duì)Windows 的 API 進(jìn)行攔截的技術(shù),可以截獲系統(tǒng)中的消息流,如鍵盤和鼠標(biāo)輸入等。根據(jù)處理消息范圍的不同,攔截技術(shù)可分為L(zhǎng)ocal Hook和Remote Hook。①Local Hook僅能阻斷屬于自身進(jìn)程的事件,使用范圍有限[5]。②Remote Hook不僅可以阻斷自身進(jìn)程事件,還可以阻斷其他進(jìn)程事件。根據(jù)主機(jī)衛(wèi)士白名單外進(jìn)程事件阻斷的需求,Remote Hook更適用[6]。遠(yuǎn)線程插入技術(shù)可以通過動(dòng)態(tài)庫的方式實(shí)現(xiàn)。Windows系統(tǒng)中新進(jìn)程的創(chuàng)建都會(huì)調(diào)用CreateProces()函數(shù),通過寫一個(gè)新的函數(shù)CreateProcessNew()注入進(jìn)程,替換原來調(diào)用的CreateProcess()函數(shù)在進(jìn)程內(nèi)存中的位置。如果可執(zhí)行文件在白名單內(nèi),則CreateProcessNew()函數(shù)正常調(diào)用CreateProcess()函數(shù);反之,則阻止調(diào)用Create Process()函數(shù),以達(dá)到阻斷創(chuàng)建新進(jìn)程的目的[7]。
系統(tǒng)架構(gòu)如圖1所示。整個(gè)系統(tǒng)分為Web業(yè)務(wù)層、中間件服務(wù)層和主機(jī)群層。Web服務(wù)器通過Redis通道將控制指令和規(guī)則策略下發(fā)到指定的主機(jī)節(jié)點(diǎn)。主機(jī)節(jié)點(diǎn)在收到指令和規(guī)則策略后,配置主機(jī)安全策略,更新本地主機(jī)數(shù)據(jù)庫信息。主機(jī)實(shí)時(shí)監(jiān)控本機(jī)運(yùn)行過中的風(fēng)險(xiǎn)事件和行為,上傳消息至Redis消息中間件。Web業(yè)務(wù)層從中間件服務(wù)層獲取相關(guān)數(shù)據(jù)信息后,實(shí)時(shí)存入主機(jī)衛(wèi)士管理平臺(tái)數(shù)據(jù)庫(data base,DB)。用戶可以通過終端Web瀏覽器實(shí)時(shí)查看各主機(jī)節(jié)點(diǎn)的安全事件詳情。
圖1 系統(tǒng)架構(gòu)圖Fig.1 System structure diagram
以上架構(gòu)的層次設(shè)計(jì)可以保證程序有較好的擴(kuò)展性和跨平臺(tái)兼容性。當(dāng)主機(jī)節(jié)點(diǎn)數(shù)據(jù)量增加時(shí),只需增加相應(yīng)的Web服務(wù)器即可滿足一般的擴(kuò)展需求。中間件服務(wù)層的設(shè)計(jì)也讓系統(tǒng)具備跨平臺(tái)兼容性。例如:主機(jī)衛(wèi)士管理平臺(tái)可以支持Linux和Windows這兩種操作系統(tǒng),但是主機(jī)衛(wèi)士軟件系統(tǒng)不需要因?yàn)楣芾砥脚_(tái)操作系統(tǒng)的不一樣而去開發(fā)、維護(hù)多套程序。軟件系統(tǒng)與管理平臺(tái)的通信只與Redis消息中間件接口相關(guān),節(jié)約了開發(fā)和維護(hù)成本。
通信接口流程如圖2所示。由圖2可知,主機(jī)衛(wèi)士中有獨(dú)立的線程處理數(shù)據(jù)上傳和數(shù)據(jù)接收。對(duì)于不同的業(yè)務(wù)數(shù)據(jù),處理線程和隊(duì)列分為快、慢兩種。這樣既可以保證配置規(guī)則及時(shí)下發(fā)、及時(shí)響應(yīng)需要快速響應(yīng)的消息,又可以保證大批量實(shí)時(shí)告警信息的正常上傳。多線程和隊(duì)列的配合使用,大大提高了程序各環(huán)節(jié)處理數(shù)據(jù)的并發(fā)能力,優(yōu)化了程序性能。
圖2 通信接口流程圖Fig.2 Flowchart of communication interface
2.3.1 接口通信設(shè)計(jì)
接口通信設(shè)計(jì)滿足消息中轉(zhuǎn)傳輸功能要求,同時(shí)接口不依賴平臺(tái)和開發(fā)語言,具有持久化特點(diǎn)。例如:主機(jī)衛(wèi)士軟件系統(tǒng)和管理平臺(tái)的通信接口部分,主要使用Redis消息中間件,上傳數(shù)據(jù)告警信息,下發(fā)管理平臺(tái)配置信息。確定接口后,主機(jī)衛(wèi)士軟件系統(tǒng)和管理平臺(tái)可以并行開發(fā)。主機(jī)衛(wèi)士軟件系統(tǒng)和管理平臺(tái)可以各自專注于自身業(yè)務(wù)功能,而無需關(guān)注通信層問題。而且Redis具有持久化特點(diǎn),即使管理平臺(tái)臨時(shí)發(fā)生故障,軟件系統(tǒng)上傳的數(shù)據(jù)也不會(huì)丟失,從而保證了數(shù)據(jù)的完整性。
2.3.2 B/S分布式架構(gòu)
設(shè)計(jì)系統(tǒng)時(shí)要考慮實(shí)際使用場(chǎng)景和后期可擴(kuò)展性。傳統(tǒng)的主機(jī)衛(wèi)士是單機(jī)版的裝機(jī)軟件。對(duì)于主機(jī)分散的工廠生產(chǎn)環(huán)境,沒有統(tǒng)一的管理平臺(tái),只能靠用戶查看來獲取每臺(tái)主機(jī)的告警信息,工作效率極低。采用B/S架構(gòu)模式,一個(gè)Web服務(wù)器可以同時(shí)管理多臺(tái)主機(jī)衛(wèi)士節(jié)點(diǎn)。一次部署完成后,只要通過管理平臺(tái)就能進(jìn)行統(tǒng)一監(jiān)控,節(jié)約了人力成本。B/S分布式架構(gòu)采用Web層、中間件層、主機(jī)三級(jí)架構(gòu)。當(dāng)主機(jī)數(shù)量增多、出現(xiàn)性能瓶頸時(shí),只需增加服務(wù)器設(shè)備,部署中間件和Web服務(wù)器,就能快速解決性能瓶頸。
2.3.3 白名單規(guī)則的設(shè)計(jì)
基于白名單規(guī)則控制主機(jī)安全,就必須保證生成的白名單指紋具有唯一性和安全性。對(duì)于可執(zhí)行文件,不能依賴于文件名和路徑,而需要根據(jù)文件內(nèi)容生成白名單。SM3算法滿足此需求。文件內(nèi)容、U盤的系列號(hào)、網(wǎng)卡的媒體訪問控制(media access control,MAC)地址都可以作為SM3算法的自變量來生成指紋信息。
2.3.4 消息API結(jié)構(gòu)和流程設(shè)計(jì)
通過Redis傳輸?shù)南⒔Y(jié)構(gòu)設(shè)計(jì)要具有統(tǒng)一的格式和規(guī)范。所有的請(qǐng)求消息必須有響應(yīng),確認(rèn)消息已送達(dá)。在消息結(jié)構(gòu)中要區(qū)分快發(fā)送的消息和慢發(fā)送的消息。告警信息數(shù)據(jù)量大,時(shí)效性要求略低。因此,可將該類數(shù)據(jù)加入慢發(fā)送隊(duì)列。主機(jī)上傳的狀態(tài)數(shù)據(jù)、響應(yīng)消息和管理平臺(tái)下發(fā)的白名單規(guī)則數(shù)據(jù),時(shí)效性要求高,由Web頁面實(shí)時(shí)等待反饋。因此,將這些數(shù)據(jù)加入快發(fā)送隊(duì)列??臁⒙齼煞N發(fā)送方式的協(xié)作,可保證系統(tǒng)穩(wěn)定、流暢地運(yùn)行。
2.3.5 阻斷進(jìn)程和U盤網(wǎng)卡外設(shè)的技術(shù)方式
對(duì)于阻斷可執(zhí)行文件白名單外的進(jìn)程,需要在進(jìn)程啟動(dòng)前就終止進(jìn)程。Windows API Hook的遠(yuǎn)程動(dòng)態(tài)鏈接庫(dynamic link library,DLL)注入方式可以滿足該功能。創(chuàng)建參數(shù)與CreateProcess()函數(shù)相同的新函數(shù)CreateProcessNew(),生成待注入的阻斷DLL文件。針對(duì)32位進(jìn)程和64位進(jìn)程注入,需要分別生成32位和64位阻斷DLL。
調(diào)用Windows API 函數(shù)HANDLE WINAPI CreateRemoteThread(),將動(dòng)態(tài)庫遠(yuǎn)程注入指定進(jìn)程,例如explorer.exe、taskmgr.exe等。
EnumProcessModules()函數(shù)則可以列出啟動(dòng)該進(jìn)程所依賴的DLL、OCX文件,阻斷不在白名單內(nèi)的DLL、OCX文件的調(diào)用和運(yùn)行[7]。
USB阻斷API函數(shù)為BOOL WINAPI DeviceloControl()。網(wǎng)卡阻斷API函數(shù)為INetConnection類的virtual HRESULT STDMETHODCALLTYPE Disconnect(void)=0[8]。
Redis消息接口請(qǐng)求內(nèi)容:
request =
{
"message_id":"99882121",
#消息ID
"strategy":
{
"strategy_type":1,
#策略類型:1文件,2 USB,3網(wǎng)卡
"strategy_id":554,
#策略編號(hào)
"c_tag":"2",
#動(dòng)作類型:2新建,3模式切換
"content":["C:\dest"],
#策略內(nèi)容,與策略類型相關(guān)
"sourceip":"192.168.2.108",
#接收策略的主機(jī)衛(wèi)士IP
"event":2
#事件類型
}
}
Redis消息接口響應(yīng)內(nèi)容:
response =
{
"message_id":"99882121",
#消息ID
"sourceip":"192.168.2.108",
#響應(yīng)的主機(jī)衛(wèi)士IP
"status":1,
#收到請(qǐng)求:0否,1是
"result":{}
#響應(yīng)結(jié)果
}
按照以上的系統(tǒng)架構(gòu)設(shè)計(jì)軟件,在編碼開發(fā)完成后,需要對(duì)整個(gè)軟件需求的功能進(jìn)行部署測(cè)試。建議至少準(zhǔn)備三臺(tái)主機(jī)設(shè)備:一臺(tái)Linux服務(wù)器和兩臺(tái)Windows系統(tǒng)計(jì)算機(jī)。Linux服務(wù)器部署主機(jī)衛(wèi)士管理平臺(tái)、Windows系統(tǒng)計(jì)算機(jī),并安裝主機(jī)衛(wèi)士軟件。部署測(cè)試主要包含四個(gè)部分。
①生成白名單規(guī)則功能測(cè)試:該功能是本系統(tǒng)軟件的基本功能。用戶可以通過指定IP設(shè)備和路徑自動(dòng)生成主機(jī)衛(wèi)士的可執(zhí)行文件白名單,通過推薦U盤和網(wǎng)卡的指紋信息生成外設(shè)USB和網(wǎng)卡的白名單規(guī)則,簡(jiǎn)單易用。
②主機(jī)衛(wèi)士審計(jì)模式測(cè)試:使用管理平臺(tái)將主機(jī)衛(wèi)士界面切換到審計(jì)模式下,使系統(tǒng)可以實(shí)時(shí)生成白名單外的進(jìn)程和USB、網(wǎng)卡的告警信息。同時(shí),白名單規(guī)則內(nèi)的程序和外設(shè)可以正常運(yùn)行、加載。
③主機(jī)衛(wèi)士保護(hù)模式測(cè)試:管理平臺(tái)將主機(jī)衛(wèi)士界面切換到保護(hù)模式下,系統(tǒng)可以實(shí)時(shí)生成白名單外的進(jìn)程和USB、網(wǎng)卡的告警信息,同時(shí)阻斷白名單規(guī)則內(nèi)的程序和外設(shè)的運(yùn)行和加載。
④系統(tǒng)可靠性、健壯性測(cè)試:該測(cè)試是指主機(jī)衛(wèi)士需要對(duì)主機(jī)設(shè)備進(jìn)行7×24 h的實(shí)時(shí)告警和防護(hù),保證主機(jī)衛(wèi)士軟件的正常工作。
工業(yè)互聯(lián)網(wǎng)是新一代信息技術(shù) (information technology,IT)與傳統(tǒng)工業(yè)操作技術(shù)(operation technology,OT)全方位深度融合所形成的產(chǎn)業(yè)和應(yīng)用生態(tài)。為了管理和控制的一體化,實(shí)現(xiàn)生產(chǎn)和管理的高效率、高效益,工業(yè)企業(yè)深度融合IT/OT,在拓展了工業(yè)控制系統(tǒng)發(fā)展空間的同時(shí),也帶來了一系列的工業(yè)網(wǎng)絡(luò)安全問題[9]。
本文基于B/S架構(gòu)的工業(yè)主機(jī)衛(wèi)士軟件設(shè)計(jì),為解決工業(yè)場(chǎng)景下的主機(jī)安全問題提供了有效的解決思路。通過詳細(xì)的需求調(diào)研、分析數(shù)據(jù)、設(shè)計(jì)開發(fā)、部署測(cè)試,很好地滿足了工業(yè)場(chǎng)景下主機(jī)防護(hù)的基本需求,是主機(jī)類產(chǎn)品研發(fā)的全新的實(shí)例。下一步還可以對(duì)主機(jī)的EventID等事件進(jìn)行審計(jì)分析。本文所提出的軟件設(shè)計(jì)方法,對(duì)實(shí)際問題的解決有一定參考價(jià)值。