付 琳,邵培南,應 飛,解 維
(中國電子科技集團公司第三十二研究所,上海 201808)
信息系統運行環境由網絡通信層、基礎層、應用支撐層和應用層組成,系統的運行可能受到來自軟硬件病毒、后門和漏洞的安全威脅攻擊[1]。例如對應用層HTTP協議的網頁篡改和SQL注入、對應用支撐層Web容器和分布式文件系統的后門和漏洞攻擊、對基礎層云容器、操作系統的后門和漏洞攻擊等[2]。以上攻擊行為可能會導致信息系統運行的功能異常或終止,核心數據受到篡改、竊取或破壞[3]。
信息系統的安全防御技術分為被動安全防御和主動安全防御[4]。被動安全防御基于已知安全威脅特征規則的病毒、后門、漏洞等進行威脅診斷和清洗,如防火墻、病毒檢測、后門檢測等[5]。擬態防御理論由鄔江興院士提出,是一種以動態異構冗余(Dynamic Heterogeneous Redundancy,DHR)原理[6]為基礎的主動安全防御技術。
本文將DHR架構與擬態信息系統相結合,設計一種擬態通用運行環境(Mimic Common Operating Environment,MCOE)框架。MCOE以運行擬態信息系統的異構執行體池為對象,提供N個異構執行體部署、服務請求的分發、執行、表決[7]、管理和安全威脅診斷[8]等運行支撐功能,用以保障安全威脅攻擊情景下服務請求的正確、可靠運行[9]。
信息系統的網絡通信層擬態防御主要基于擬態網絡通信產品來實施[10]。本文提及的信息系統的擬態防御,主要是針對基礎層、應用支撐層和應用層的擬態防御。通常,擬態信息系統的必要組成要素如下:
1)擬態化改造中功能等價的K(K≥1)個冗余異構應用程序源代碼。對系統應用程序源代碼的擬態化改造主要是增加標簽化的表決調用和表決前后的上下文處理。標簽化的表決調用指第三方API(如Oracle)參數、關鍵安全數據文件、庫表數據結構操作、指定程序點的內在程序片段功能或內存關鍵數據的一致性表決調用。對此部分數據的一致性表決主要通過防止關鍵文件、數據庫受到篡改確保關鍵功能正確執行,實現細粒度的安全防御。對源代碼的擬態化改造具體分為如下3個部分:
(1)標簽化表決調用(包括標簽化API標識、表決主鍵、表決參數JSON字符串)和表決調用前后上下文程序段處理。
(2)標簽化第三方API的協同執行調用,防止因服務請求并發執行引起的N個異構執行體API不一致。
(3)添加API鉤子函數和統一處理組件,用于識別利用后門和漏洞訪問的第三方API,如識別數據竊取的通信API或SQL語句。
2)異構軟硬件構造化或擬態軟件產品構建化的系統三層異構冗余的運行環境設施。例如:異構執行體[11]基礎層操作系統、云容器、虛擬機的異構,應用支撐層Web容器的異構,應用層擬態存儲[12]等擬態產品的異構。
擬態信息系統的運行支撐環境為基于系統異構應用程序源代碼和運行環境設施形成的異構執行體池,由基礎層A冗余異構、應用支撐層B冗余異構、應用層的K冗余異構形成具有M=A×B×K種異構執行體的異構執行體池。在受到安全威脅攻擊的情況下,系統運行支撐環境的異構性可確保系統正確可靠運行。
MCOE實現面向服務請求的N個異構執行體執行過程的自動化,對服務請求進行入口、過程、結果三級安全防護,并且提供了集成化的分發和表決的接口規范[13]。
MCOE是實現面向C/C++、Java語言開發的 C/S或B/S信息系統的擬態防御架構[14],為擬態信息系統提供了自動化的通用運行環境和擬態防御手段,其防御方法和目標如下:
1)通過N個異構執行體運行節點軟硬件資源異構最大化的資源調度,主動防御特定軟硬件后門漏洞引起的安全威脅。
2)通過異構執行體運行節點軟硬件資源和資源對象(如云容器、虛擬機)調度的隨機性和動態性最大化,及時阻斷由系統四層軟硬件發起的安全威脅攻擊。
3)通過服務請求執行過程中N個異構執行體內部和服務請求響應結果的兩級表決,防止關鍵的文件、數據庫、內存數據結構映像受到篡改,確保在受到安全威脅的情況下系統能夠正確運行。
MCOE總體框架如圖1所示,其中包括分發、內部表決、外部表決、管理和協同5個服務器,以及部署在各個服務器上的節點代理服務進程。
服務請求主鍵為分發服務器接收到客戶端服務請求時創建的唯一標識,MOCE體系架構中的各個服務器通過服務請求主鍵進行關聯。客戶端服務請求驅動的MCOE,其中各服務器間協同工作的運行場景如下:
1)分發服務器接收客戶端服務請求,按需進行已知特征安全威脅[15]識別和清洗,調用管理服務器的資源調度服務接口獲取相應服務請求,執行所需的N個異構執行體、內部表決服務器和協同運行服務器的運行節點資源。
2)分發服務器發送包含服務請求主鍵和各個服務器運行節點資源(服務器、云容器或虛擬機對象資源)的文件給相應服務器的運行節點代理服務。
3)N個異構執行體、內部表決服務器和協同運行服務器的運行節點代理接收文件后,在相應系統配置文件中創建基于服務請求主鍵的待處理配置記錄,并向分發服務器返回應答。
4)分發服務器轉發服務請求到相應的N個異構執行體服務器。
5)N個異構執行體服務器執行服務請求,當執行到關鍵數據操作、重要功能模塊和標簽化的第三方API時,讀取待處理配置記錄中的內部表決服務器地址,調用內部表決服務器對表決內容進行一致性表決,同時對未標簽化的API進行安全威脅診斷和處理。
6)內部表決服務器對于表決異常的結果進行表決,對結果做魯棒性處理,上報異常到管理服務器,同時反饋內部表決結果(一致Y/異常E)給相應異構執行體。
7)內部表決結果為Y的異構執行體繼續執行程序,對標簽化的第三方API調用協同執行服務器進行后續處理。協同執行服務器具體驅動第三方API的執行,返回包含執行結果參數的標簽化API給調用方的相應執行體。
8)分發服務器接收和預處理N個異構執行體服務請求的響應結果,調用管理服務器的資源調度服務接口獲取外部表決服務器地址,同時驅動該外部表決服務器執行相應的表決。
9)外部表決服務器對于表決,對異常的結果進行表決,對結果做魯棒性處理,上報異常到管理服務器,同時反饋外部表決結果(一致Y/異常E) 給分發服務器。
10)分發服務器收到外部表決結果,若表決結果為一致,則返回正常的服務請求響應結果給客戶端;否則返回異常,由客戶端重新發起該請求。
在內部表決和外部表決執行過程中,表決結果為異常的異構執行體節點資源和運行上下文均發給管理服務器。對于經表決魯棒性處理后確定的異常,由表決服務器實時向管理服務器發出告警,管理服務器交互式地進行安全威脅診斷、清洗和恢復。

圖1 MCOE體系架構
MCOE各個服務器及部署在服務器上的運行節點代理服務對服務請求的處理,遵循如圖2所示的主程序統一處理框架。

圖2 各服務器主程序處理框架
Fig.2Processing framework of main programs in eachserver
主程序統一處理框架分為初始化、主程序任務循環處理、服務請求通信和預處理線程、任務處理子線程4個部分。
1)初始化。進行服務請求處理任務隊列初始化,創建服務請求任務消息包的接收和預處理線程。
2)主程序任務循環處理。任務循環處理偽代碼如下:
Read隊列元素;
While(true){//循環處理
//P為預處理狀態,在表決時隊列元素包括2N/3個表決//參數為滿足執行條件
If(任務隊列元素狀態標志==“P” and 滿足執行條件){
設置:任務隊列元素執行標志=“E”;//E為執行狀態
創建相應任務隊列元素的任務處理子線程;
Read Next任務隊列元素;
}ElseIf(任務隊列元素狀態標志==“C”){
//C為任務完成狀態
刪除該隊列元素;
Read 當前隊列元素;
}Else{//任務隊列元素狀態為未完成狀態
Read Next任務隊列元素;}}
3)服務請求通信和預處理線程。服務請求通信和預處理線程部分偽代碼如下:
該線程基于HTTP協議通信并發接收服務請求任務消息包;
解析服務請求任務消息包;
If 依賴于N(N≥3)個消息包處理的任務{
遍歷該任務隊列;
If(隊列元素的任務主鍵相同){
//構建N個任務參數JSON字符串數組
6)6—9月份,田間卵果率達到1%時,及時噴25%滅幼脲1 000倍液或2.5%溴氰菊酯乳油3 000倍液。
在該元素中添加該參數字符串JSON;
}Else{
創建新元素;}
}Else{//消息包獨立處理的任務
在任務隊列尾插入該任務元素;}
If(消息包為獨立處理的任務){
Read 隊列元素和預處理;
動態安裝和執行相應的任務組件;
任務隊列元素執行標志=“C”;
發送執行結果到相應節點代理;
Break;
}ElseIf(消息包屬于統一處理的N個任務){
//N個消息包統一進行處理
Read 未處理的數據元素集;
If(未處理的數據元素集==Null){
//消息包未到達,等待時間閾值T
Sleep(XX us);
}Else{//讀到數據集
If(同步執行 and 第1次執行){
發送任務處理結果到消息源服務器;
保存任務處理結果;//例如協同執行
}ElseIf(同步執行 and 第2次~第N次執行){
返回第1次保存的任務處理結果給源服務器;}
If(處理結果滿足任務節點提交條件 and 異步執行){
發送處理結果到相應的消息源節點;}}}
//例如表決服務器,基于源節點運行代理服務實現交互
If(處理任務消息數==N){
//已完成本次任務處理
隊列任務處理狀態=“C”;
Break;
}ElseIf(處理任務消息數≠N and處理時間>閾值T){
調用管理服務進行異常處理;
Break;}
MCOE框架內外部接口設計基于以下3個方面:由分發服務器和管理服務器協同完成的服務請求預處理、資源調度和請求轉發過程;N異構執行體驅動的表決和第三方API協同執行過程;由分發器和外部表決器協同完成的響應結果表決過程和客戶端轉發過程。
MCOE服務器間接口遵循HTTP通信協議,接口定義為json格式文件,各服務器依據json庫函數進行解析預處理,如圖3所示。

圖3 MCOE服務器接口定義
分發服務相關的接口描述見表1,其中接口主要提供服務請求轉發、服務請求響應結果接收和外部表決所需參數。其中,通過管理服務提供的擬態資源調度接口調度出隨機性、動態性和異構性三性最大化的N異構執行體服務器,為擬態防御提供異構化的基礎環境。異構執行體相關的接口描述見表2,其中接口主要提供N異構執行體運行過程中內部表決和第三方API協同運行所需的參數。管理服務器相關接口描述見表3,其中接口基于“管理者+代理”方式實現。部署在各個服務器上的運行節點代理服務采集各個服務器的節點運行資源狀態和日志數據,并將采集數據上報給運行管理服務,接收、處理運行管理服務下發的資源狀態監管命令和節點清洗命令。

表1 分發服務相關接口描述Table 1 Description of interfaces related to MCOE distribution services

表2 N異構執行體相關接口描述Table 2 Description of interfaces related to N heterogeneous executor

表3 管理服務器相關接口描述Table 3 Description of interfaces related to the management server
MCOE各個功能模塊間的交互遵循HTTP通信協議,各模塊的功能實現均遵循2.2節中的程序統一處理框架。
分發服務結合傳統安全防御對已知安全威脅的清洗提供了Web信息系統的入口級安全防御。分發服務提供客戶端服務請求的接收、對已知威脅的清洗[16]、N個冗余異構執行體服務請求分發、請求響應結果的處理以及將請求響應結果轉發給客戶端等功能。如圖4所示,分發服務主要包括3個功能模塊:
1)請求預處理引擎。接收服務請求,定義服務請求主鍵服務請求安全威脅清洗;構建N個異構執行體服務請求。
2)分發處理模塊。通過“擬態資源調度接口”獲取相應節點執行資源;構建包含服務請求主鍵、內部表決、協同執行和N個異構執行體服務器執行資源的服務器地址文件,通過“服務請求主鍵和處理過程所需的服務器地址接口”下發到相應的服務器;通過“服務請求轉發接口”轉發服務請求到相應的N個構執行體。
3)請求響應處理模塊。接收請求響應執行結果;通過“擬態資源調度接口”獲取外部表決器執行資源;構建包含服務請求主鍵、外部表決服務器執行資源的服務器地址文件;基于此文件驅動外部表決的執行;接收表決服務器的反饋結果,表決一致時將服務請求最終響應結果返回給客戶端,表決不一致時返回異常信息給管理服務。

圖4 分發服務功能組成示意圖
Fig.4Schematic diagram of function composition ofdistribution service
表決服務包括內部表決服務和外部表決服務,是MCOE最為關鍵的組成部分[17]。內部表決服務提供了異構執行體執行過程中的安全防御,外部表決服務提供了異構執行體執行結果的安全防御。
如圖5所示,內部表決服務主要包括4個功能模塊:
1)表決信息接收處理。通過“內部表決調用接口”接收來自N個異構執行體的內部表決內容,確定相應的表決組件。
2)表決執行。對N個異構執行體關鍵數據操作、重要功能模塊和第三方API參數進行一致性表決。
3)魯棒性處理。表決異常時,根據表決對象的魯棒性策略按需執行魯棒性處理過程。
4)表決結果反饋。表決大多數一致時,將表決結果返回給正常的N個異構執行體,若存在不一致的異構執行體調用管理服務進行異常處理。表決不一致調用管理服務進行異常處理。

圖5 內部表決服務功能組成示意圖
Fig.5Schematic diagram of function composition ofinternal voting service
外部表決服務中大部分功能模塊與內部表決服務相同,不同之處在于外部表決是對N個服務請求響應的一致性表決,通過分發服務和外部表決服務之間的交互完成。
協同執行服務具體驅動第三方API的執行,確保N個異構執行體API執行結果的一致性,并提供執行協同統一框架以支持協同執行種類的擴展和配置。當對N個異構執行體內的第三方API內部表決結果為一致時,N個異構執行體通過異步方式調用協同執行服務器進行第三方API的統一執行。當接收到第1個協同執行調用時,完成對第三方API的協同執行、將執行結果返回給相應的執行體,并保存執行結果;當收到第2個~第N個執行體的協同執行調用時,將保存的協同執行結果返回給相應的執行體。
管理服務包括管理服務器和運行節點服務管理者和管理者服務代理,其中主要的功能模塊如圖6所示。

圖6 管理服務功能組成示意圖
Fig.6Schematic diagram of function composition ofmanagement service
管理服務器主要包括3個功能模塊:
1)擬態應用管理模塊。創建和部署擬態應用、匯總和處理節點上報應用資源狀態日志信息、監管擬態應用執行過程。
2)擬態資源管理模塊。包括擬態資源監控、異構執行體調度和表決服務器資源調度。
3)擬態安全威脅診斷模塊。包括擬態運行過程管理、告警和環境日志信息處理、安全威脅的清洗策略執行。
運行節點代理服務完成服務器節點資源狀態信息的采集,并將其上報給管理服務器,并且執行管理服務器下發的管理命令。
基于對示例應用程序ybsapp.war的MCOE模型實現包括3個部分:1)異構執行體管理和資源調度;2)分發服務對各個異構執行體進行服務請求分發;3)對各個異構體上的請求響應結果進行外部表決并將結果反饋管理服務。
首先在異構執行體的基礎層(CPU類型和操作系統類型)和應用支撐層(Web容器)上實現異構。管理服務使用MySQL實現對異構執行體節點和資源的管理。異構執行體節點狀態示例如圖7所示,模型實現階段實際部署4個異構執行體應用服務器,本文實驗中執行體1~執行體4所用Web容器分別為Jboss、Tomcat8.0、Tomcat8.5、Tomcat9.0。

圖7 異構執行體節點狀態示例
異構執行體上的運行節點代理服務將異構執行體狀態信息實時上報到管理服務器,管理服務器實時判定執行體運行狀態是否正常。
分發服務通過改造Nginx反向代理服務[18],以及對Nginx主請求-子請求機制與Proxy反向代理機制的改進,實現服務請求的異構化、服務請求的轉發、外部表決服務的調用,并將外部表決結果返回給客戶端。
客戶端(192.168.2.7:8080)發起示例應用ybsapp服務請求,分發服務向管理服務發出資源調度請求,管理服務通過異構最大化調度[19]和負載均衡算法[20]調度出此次執行服務請求的3個異構執行體和外部表決地址,分發服務通過“擬態資源調度接口”獲取相應節點執行資源,再由分發服務構建包含服務請求主鍵、異構執行體和表決服務器節點資源的地址文件,如圖8所示。

圖8 服務請求執行資源分配profile示例
Fig.8 Example profile of a service request for resourceallocation
各個服務器間通過服務請求主鍵進行關聯,分發服務通過Nginx轉發地址文件到相應的N個異構執行體和外部表決服務器,同時轉發服務請求到相應的異構執行體上的服務請求轉發接口,如圖9所示。

圖9 分發服務Nginx轉發過程示例
Fig.9Example of forwarding process of distribution serviceNginx
圖9所示分發的是一個示例Web應用ybs,經過分發服務Nginx將異構化的服務請求分發到3個異構執行體(執行體1:192.168.2.28、執行體2:192.168.2.75、執行體3:192.168.2.32)上,同時調用外部表決服務器:192.168.2.36進行服務請求響應表決。
外部表決服務基于擬態表決策略,采用一致性校驗算法對服務請求響應進行一致性表決[21]。本文實驗的擬態表決策略采用三取二表決,即2/3表決對象一致時表決結果為正常,其他情況表決結果為異常。
外部表決成功后的反饋結果如圖10所示,異構執行體1~執行體4初始的表決成功次數均為0,對異構執行體1~執行體3執行服務請求表決,表決結果為成功(執行體1~執行體3表決對象一致),執行體1~執行體3的表決成功加1,而執行體4作為備用執行體不參與表決,其表決成功次數仍為0。表決成功后將返回表決結果給分發服務,再由分發服務將服務請求響應返回給客戶端。

圖10 表決成功后部署情況示例
外部表決成功后將最終的服務請求響應結果返回給客戶端,客戶端得到的響應頁面如圖11所示。

圖11 客戶端響應頁面1
對異構執行體進行網頁篡改攻擊后,同樣進行服務請求分發,表決結果如圖12所示,執行體2被表決為異常,但由于異構執行體互相之間的異構性,使得網頁篡改對執行體1和執行體3并未生效,此次表決結果仍為成功。

圖12 篡改攻擊、表決后部署情況示例
Fig.12 Example of deployment results after voting for tamper attacks
外部表決服務返回表決結果和異常執行體地址信息給分發服務,分發服務將服務請求響應返回給客戶端,客戶端得到的響應頁面如圖13所示,仍為正常的服務請求響應頁面。分發服務將異常執行體地址信息上報至管理服務,由管理服務調用管理者服務代理進行異常異構執行體替換和清洗恢復。

圖13 客戶端響應頁面2
經過實驗驗證,由于異構執行體本身的異構性,當出現系統安全攻擊時至多導致一個異構執行體出現異常,而基于3取2表決并不會影響最終返回給客戶端的服務請求響應結果。MCOE對于異構執行體的部署和服務請求的分發、表決、管理可以達到防止網頁篡改的目的,保證返回給客戶端正確的服務請求響應。
本文結合擬態防御理論,為擬態信息系統的N異構執行體設計系統化的運行環境框架MCOE。通過改進Nginx反向代理服務實現對服務請求分發和響應結果的處理,同時使用一致性校驗算法進行服務請求響應結果表決,有效防御應用程序后門和漏洞引發的網頁篡改行為。下一步將對分發服務和表決服務進行改進,提升MCOE框架使用場景的普適性。