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