吳正江,姚 琪,馮四風,顧 青
(1.河南理工大學 計算機科學與技術學院,河南 焦作 454000;2.普華誠信信息技術有限公司,上海 201499)
通過分析近幾年發生的網絡安全事件可以發現,攻擊者利用軟件系統存在的漏洞或后門進行網絡攻擊是常見的攻擊方式,而傳統防御機制注重系統邊界防御[1-2]。攻擊者一旦通過邊界防御,則被系統認為是內部用戶,認定其不會對系統造成威脅。可見,傳統防御機制過于信任內部用戶、事和物,忽略了系統內部安全性,從而加大內部被攻擊和注入的概率[3-4]。為應對傳統防御機制中的安全缺陷,鄔江興[5]提出網絡空間擬態防御,結合動態異構冗余架構[6]、調度策略[7-9]和裁決策略[10-11],通過動態調整內部環境,達到主動防御外部攻擊并發現內部威脅的目標[12-13]。在面對內部攻擊/注入時,裁決策略判斷執行體是否可信,若不可信則通過負反饋機制下線異常執行體進行清洗恢復。裁決策略作為復制控制方法及屏蔽故障的復本技術,在系統容忍入侵時發揮關鍵作用[14-16]。
現有的裁決策略主要有自適應的一致性表決算法[17]、自檢測多數一致表決算法[18]、基于執行體異構度的一致表決擬態裁決優化方法等[19],系統運行時間為異構冗余執行體中最長,且仲裁效率也較低。競賽式多數一致表決模型[20]對領先的輸出結果執行仲裁,通過增加執行體數量提高仲裁效率,但仲裁結果的正確性無法保證,仲裁可能會出現差模逃逸現象。數據庫日志記錄了數據庫內部執行的所有操作信息。數據庫管理人員可以通過日志對數據庫進行安全審計和異常檢測,并從大量日志文件中分析并挖掘出所需信息[21-23]。本文結合數據庫日志挖掘和模式匹配算法[24-25],提出一種基于數據庫二進制日志的競賽式仲裁優化方案。當競賽式仲裁模型輸出結果不一致時,通過對異構數據庫執行體二進制日志文件中的操作記錄進行查找匹配,將日志匹配結果與仲裁結果進行校驗,判斷仲裁結果的正確性。
本文提出的競賽式仲裁優化方案將數據庫二進制日志未受到篡改作為可信根,研究仲裁結果的正確率。當異構數據庫執行體輸出結果不一致時,根據不同的輸出結果出現頻次對異構數據庫執行體進行分類,從與仲裁結果一致且輸出結果頻次最高的分類中任取一個異構數據庫執行體,從與仲裁結果不一致且輸出結果頻次最低的分類中任取一個異構數據庫執行體,分別對這兩個異構數據庫執行體的二進制日志文件進行查找匹配,以匹配頻次少的二進制日志文件作為匹配結果,將匹配結果與仲裁結果進行校驗,依據校驗結果判斷仲裁結果是否正確。與競賽式仲裁方案相比,本文方案提高了仲裁結果的正確率,能有效避免針對SQL注入攻擊的差模逃逸現象。
競賽式多數一致表決模型對輸出速率最快的前m個異構執行體輸出結果進行表決,當m-1 個異構執行體處于同一失效空間時,競賽式多數一致表決模型會將錯誤仲裁結果認為是正確結果輸出。該仲裁方式難以應對差模逃逸,會增加錯誤結果仲裁通過概率,降低仲裁正確率。競賽式多數一致表決模型如圖1 所示。

圖1 競賽式多數一致表決模型Fig.1 Competitive majority unanimous voting model
基于數據庫二進制日志的競賽式仲裁優化模型如圖2 所示,其主要構成如下:
1)調度器。在初始狀態下,調度器將輸入信息轉發給所有異構數據庫執行體。根據收到的異常反饋信息對異常的在線執行體進行調度及下線清洗。
2)結果棧。在初始狀態下,開辟一個大小為m(m∈[3,n])的棧空間,按照異構數據庫執行體結果輸出的先后次序,依次將輸出結果保存在棧中。
3)多模裁決表決器。多模裁決表決器對保存在結果棧中的輸出結果集采用多數一致表決算法進行仲裁。
4)二進制日志校驗。從選取的異構數據庫執行體中查找二進制日志文件進行字符串匹配,統計匹配次數,判定匹配次數少的執行體輸出結果為匹配結果,將其與仲裁結果進行比較,校驗仲裁結果的正確性。

圖2 基于數據庫二進制日志的競賽式仲裁優化模型Fig.2 Optimization model of competitive arbitration based on binary database log
基于數據庫二進制日志的競賽式仲裁優化方案的表決流程如圖3 所示,具體流程如下:
1)采用多數一致性表決算法對結果棧中保存的m個異構執行體輸出結果進行仲裁,若仲裁失敗則輸出異常,若仲裁成功則執行步驟2。
2)比較m個輸出結果,若輸出結果相同的最大頻次為,則執行步驟4,否則執行步驟3。
5)查找匹配相同時間段內(上一次日志更新時間到本次輸出執行體結果的時間)A和B的二進制日志中增刪改操作記錄,統計匹配次數,判定匹配次數少的執行體輸出結果為匹配結果,執行步驟6。
6)校驗匹配結果與仲裁結果是否一致:若結果一致,則執行步驟7;若結果不一致,則仲裁失敗,存在差模逃逸,輸出匹配結果,同時輸出異常警告。
7)輸出仲裁結果。

圖3 基于數據庫二進制日志的競賽式仲裁優化方案的表決流程Fig.3 Voting process of optimization scheme of competitive arbitration based on binary database log
X:n個異構數據庫執行體集。
Y:n個異構數據庫執行體輸出結果集。
R:輸出結果最快的前m個異構數據庫執行體集,R={r1,r2,…,rk}。
F:R對應的二進制日志集,F={f1,f2,…,fk},1≤k≤m。
S:結果棧中的輸出結果集,S={s1,s2,…,sk}。
sj:異構數據庫執行體的輸出結果,sj∈S?Y。
Hj:輸出結果相同的執行體集,Hj={r1,r2,…,rj}。
rj:異構數據庫執行體,rj∈R?X,1≤j≤k。
H:按照輸出結果的不同對R進行分類,H={H1,H2,…,Hk},H1∪H2∪…∪Hk=R,Hi∩Hj=?,i≠j,1<i≤k。
P:每種分類中的執行體個數,P={P1,P2,…,Pk},Pj=|Hj|。
差模逃逸:在N個異構執行體中,若N-1 個執行體處于同一個失效空間,則可能出現N-1 個執行體輸出結果相同且都不正確的情況,此時仲裁機制會將不正確的結果認為是正確的輸出,該現象在擬態防御中被稱為N-1 模逃逸現象或者差模逃逸現象。
多數一致表決算法的具體步驟如下:
1)對比S中的sj,將輸出相同sj的rj放入同一個集合Hj中,此時Hj中有Pj個元素。
2)當Pj=max(P1,P2,…,Pk)時:
在情況1 中可能出現差模逃逸,造成錯誤結果仲裁通過概率增加。在情況2 中可能會在仲裁結果為正確結果時,輸出異常警告,降低了輸出結果正確且裁決通過的概率。例如,當時,若個執行體輸出結果相同且不正確,另外個執行體輸出結果相同且正確,則仲裁結果有50%的概率為正確結果。
基于數據庫二進制日志的競賽式仲裁校驗算法的具體步驟如下:
1)多數一致表決算法對S仲裁,結果記為T。
2)當存在Pj和Pl且Pj=max(P1,P2,…,Pk)、Pl=mi n(P1,P2,…,Pk)時,可分為以下情況:
3)分別從rA和rB中查找二進制日志文件fA、fB∈F,在fA和fB中依據特征關鍵字對增刪改操作日志進行匹配,匹配頻次分別記為qA和qB,將q對應的執行體輸出結果記為匹配結果Q,q=min(qA,qB)。
4)對Q和T進行校驗:若Q=T,則仲裁成功,輸出T;若Q≠T,則仲裁失敗,存在差模逃逸,輸出Q。
假定各異構執行體之間相互獨立且互不干擾,在輸出結果已保存在結果棧的前提下,將CAA(輸出結果正確且裁決通過)、CAF(輸出結果正確但裁決未通過)、IAA(輸出結果錯誤但裁決通過)、IAF(輸出結果錯誤且裁決未通過)作為衡量本文方案安全性的主要指標。為簡化實驗模型,在實驗1 和實驗3 中取m=3,以MariaDB、MySQL 和Oracle 作為3 個異構數據庫執行體。實驗1 和實驗3 中3 個異構數據庫信息如表1 所示。

表1 異構數據庫信息Table 1 Heterogeneous database information
本文根據S的不同進行分類H={H1,H2,…,Hm},假定輸出結果正確的空間為H1,結果棧中模擬產生的結果多數落在空間H1中。采用競賽式多數一致表決方案和本文方案進行1 萬次仲裁,每次實驗時注入一些異常數據,用來調整輸出結果正確和輸出結果不正確之間的比例,在注入異常時確保出現差模逃逸。實驗中執行體輸出正確結果的概率為84.418 8%,輸出錯誤結果的概率為15.581 2%,即H1=84.418 8%。
實驗1采用競賽式多數一致表決方案和本文方案分別對S進行仲裁。通過CAA、CAF、IAA 和IAF 這4 項安全指標可以發現,相比競賽式多數一致表決方案,本文方案的CAA 和IAF 的仲裁結果正確率分別提高了3.085 9和7.716 6個百分點,CAF和IAA的仲裁結果正確率分別降低了3.085 9 和7.716 6 個百分點,由此可見本文方案可以有效降低CAF、IAA 中差模逃逸的概率,實驗結果如圖4 所示。

圖4 競賽式多數一致表決方案與本文方案的安全性對比Fig.4 Security comparison between the competitive majority unanimous voting scheme and the proposed scheme
實驗2在保證每個異構執行體輸出結果正確率相同的情況下,通過調整m值比較CAA 和IAA 的仲裁結果正確率變化情況。如圖5、圖6 所示,隨著m值的增加,競賽式多數一致表決方案和本文方案的CAA 和IAA 仲裁結果正確率整體呈現上升趨勢。在仲裁執行體數目一致的情況下,本文方案相比競賽式多數一致表決方案仲裁結果正確率更高,并且安全性和可靠性更好。

圖5 競賽式多數一致表決方案和本文方案的CAA 仲裁結果正確率比較Fig.5 Comparison of the correct rate of CAA arbitration results between the competitive majority unanimous voting scheme and the proposed scheme

圖6 競賽式多數一致表決方案與本文方案的IAA 仲裁結果正確率比較Fig.6 Comparison of the correct rate of IAA arbitration results between the competitive majority unanimous voting scheme and the proposed scheme
將本文方案和KMP 算法[26]查找匹配二進制日志文件fA和fB的擬態系統記為方案1,系統總執行時間記為GT1;將本文方案和Sunday 算法[25]查找匹配fA和fB的擬態系統記為方案2,系統總執行時間記為GT2;將競賽式多數一致表決方案的擬態系統記為方案3,系統總執行時間記為GT3。在相同條件下,方案1 相比方案3 降低的執行效率記為KMP-E,方案2相比方案3 降低的執行效率記為Sunday-E。
實驗3在3 種方案中注入異常使得執行體異常個數為0、1、2 和3,且每種情況重復執行1 000 次。如表2 所示,“—”表示在執行體異常個數為0 和3 時上述3 種方案均不涉及日志文件,因此GT1、GT2和GT3均與fA和fB大小無關。在執行體皆正常和皆異常的情況下,3 種方案耗時相同。在執行體出現異常的情況下,方案1 和方案2 隨fA和fB呈線性增加,GT1和GT2也呈現線性增加。

表2 系統總執行時間與fA 和fB 的關系Table 2 The relationship between the total execution time of the system and fA,fB
在執行體出現異常時,KMP-E 和Sunday-E 隨二進制日志文件fA和fB呈線性增加(yKMP=0.219 7x-0.078 7 和ySunday=0.124 9x+0.017 1),采用Sunday 算法的方案2 執行效率優于采用KMP 算法的方案1,因此本文方案的執行效率高低取決于選用模式匹配算法的執行效率,若模式匹配算法查找匹配fA和fB耗時越短,則本文方案耗時越短。執行效率KMP-E 和Sunday-E 隨fA和fB的變化情況如圖7 所示。

圖7 異常情況下執行效率隨fA 和fB 的變化情況Fig.7 Changes of execution efficiency with fA and fB under abnormal situations
由實驗結果可知,本文方案和競賽式多數一致表決方案的仲裁結果正確率和執行效率在正常情況下均相同,而在異常情況下本文方案的仲裁結果正確率更高,通過選用更高效的模式匹配算法,減少系統總體執行時間,在保證提高系統安全性的同時使耗時在可承受范圍內。
本文建立一種基于數據庫二進制日志的競賽式仲裁優化方案,通過將執行體的二進制日志匹配結果與多數一致表決的仲裁結果進行對比,校驗仲裁結果的正確性。實驗結果表明,優化方案可提高仲裁結果正確率,減少差模逃逸概率,適用于含有數據庫異構執行體或者數據庫異構部件的動態冗余架構,也可作為一種容錯設計方案應用于冗余容錯架構中,加強擬態系統安全性和可靠性。但由于優化方案無法處理N個異構執行體處于同一失效空間的情況,因此下一步將對仲裁結果中出現的共同失效問題展開深入研究。