曹國棟,倪 明,喻衛(wèi)東,王 燦
(華東計算技術(shù)研究所,上海 201808)
現(xiàn)在社會,信息技術(shù)飛速發(fā)展,伴隨著數(shù)以億計的數(shù)據(jù)產(chǎn)生,數(shù)據(jù)庫作為整個系統(tǒng)中信息輸入和輸出的重要組件,對于其保護(hù)和處理,日益成為人們關(guān)注的焦點.據(jù)統(tǒng)計僅2018年數(shù)據(jù)泄露事件高達(dá)945次,導(dǎo)致的信息泄露數(shù)量達(dá)到45億條之多,信息量陡增133個百分點.
2018年5 月,在南京舉辦的“強網(wǎng)杯”擬態(tài)防御挑戰(zhàn)賽,在國內(nèi)外22支頂尖戰(zhàn)隊的高強度攻擊下,擬態(tài)防御設(shè)備成功封堵了所有攻擊,即使開放管理員權(quán)限,在擬態(tài)防御設(shè)備中隨意注入后門,也沒有任何戰(zhàn)隊突破擬態(tài)防御,為擬態(tài)防御進(jìn)行全方位、高強度的安全檢驗.擬態(tài)防御[1,2](Cyberspace Mimic Defense,CMD)是在功能等價的條件下提供可控的執(zhí)行環(huán)境的跳變和遷移,使攻擊者對目標(biāo)環(huán)境的難以掌握[3,4].在擬態(tài)環(huán)境中,海量數(shù)據(jù)存儲與訪問是系統(tǒng)設(shè)計與使用的瓶頸問題,利用開源的分布式存儲數(shù)據(jù)庫中間件Mycat,通過對數(shù)據(jù)進(jìn)行水平切分,將不同的表映射到不同的數(shù)據(jù)庫中,通過集群管理,事務(wù)分布式處理[5],實現(xiàn)數(shù)據(jù)庫容量的擴(kuò)充和數(shù)據(jù)庫結(jié)構(gòu)的冗余,加之其對SQL語句有攔截和分析的作用,依據(jù)指紋特征對執(zhí)行體指紋化SQL指令進(jìn)行特征化處理,發(fā)現(xiàn)并剔除攻擊者注入的非法指令.Mycat對數(shù)據(jù)庫返回的數(shù)據(jù)進(jìn)行表決,判斷異常數(shù)據(jù)庫,并對出現(xiàn)故障的數(shù)據(jù)庫進(jìn)行還原保護(hù),實現(xiàn)數(shù)據(jù)庫的擬態(tài)化.
擬態(tài)防御(CMD)是中國工程院鄔江興院士在2013年的提出的關(guān)于網(wǎng)絡(luò)空間安全防御的創(chuàng)新性理論,網(wǎng)絡(luò)空間擬態(tài)防御是基于一種主動防御和被動防御相結(jié)合的網(wǎng)絡(luò)安全防御架構(gòu),克服了以往計算機系統(tǒng)漏洞,后門或者病毒的時間不確定性,危害未知性,資源破壞性,為將來的網(wǎng)絡(luò)安全防御提供普適創(chuàng)新的理論和方法指導(dǎo)[6,7].
在網(wǎng)絡(luò)基礎(chǔ)設(shè)施中,一些高校和科研院所已提出了擬態(tài)防御中異構(gòu)性的構(gòu)造方法,文獻(xiàn)[8]提出了利用軟硬件多樣性實現(xiàn)多源異構(gòu)化處理方法;文獻(xiàn)[9,10]提出了利用軟件多樣化編譯對單一軟件進(jìn)行異構(gòu)化處理的方法,也隨之研制出了包括擬態(tài)Web服務(wù)器[11,12]、擬態(tài)防御路由器[13,14]擬態(tài)DNS服務(wù)器[15]等應(yīng)用設(shè)備.
擬態(tài)防御的基本原理是:在不依賴未知攻擊特征信息的前提下,通過多個等價等功能的不同體系結(jié)構(gòu)的執(zhí)行體,利用動態(tài)異構(gòu)冗余架構(gòu)(DynamicHetero geneous Redundant Architecture,DHRA)[2],DHRA模型如圖1所示,實現(xiàn)運行環(huán)境、網(wǎng)絡(luò)、數(shù)據(jù)、軟件等結(jié)構(gòu)的主動切換或快速轉(zhuǎn)移,代表性技術(shù)如表1,使攻擊者難以判斷目標(biāo)對象的運行環(huán)境和機制,提高攻擊者在時間維度和空間維度的攻擊成本和難度[8].
圖1 DHRA模型
表1 動態(tài)性技術(shù)分類
在高可靠的非相似余度“容錯”模式下,執(zhí)行體通過可重組,可重構(gòu),可重建和可重定義等動態(tài)構(gòu)造方法,實現(xiàn)異構(gòu)性,動態(tài)性和冗余判斷.動態(tài)異構(gòu)冗余模型(DHRA)由輸入,輸入代理,執(zhí)行體集(A1,A2,A3,… ,An),多模/策略表決器,輸出組成.根據(jù)系統(tǒng)輸入,異構(gòu)元素池中選擇異構(gòu)元素,組成m個異構(gòu)構(gòu)件,通過系統(tǒng)的策略調(diào)度,形成n個異構(gòu)執(zhí)行體,經(jīng)過對執(zhí)行體產(chǎn)生的結(jié)果多模判決,決定系統(tǒng)輸出[2].
數(shù)據(jù)庫中間應(yīng)用于Web服務(wù)器和數(shù)據(jù)服務(wù)器之間,對兩者之間交互的數(shù)據(jù)庫指令進(jìn)行攔截.擬態(tài)數(shù)據(jù)庫中間件要實現(xiàn)數(shù)據(jù)庫的切分和擴(kuò)容,集群管理,事務(wù)分布式處理,與此同時,要實現(xiàn)對SQL語言進(jìn)行特征處理,識別和執(zhí)行SQL指紋語句,剔除攻擊者注入的非法指令,并對出現(xiàn)故障的數(shù)據(jù)庫進(jìn)行還原保護(hù).
基于此現(xiàn)狀,本研究提出利用Mycat在擬態(tài)環(huán)境中作為數(shù)據(jù)庫的中間件,借助于動態(tài)冗余異構(gòu)模型設(shè)計,利用擬態(tài)安全的環(huán)境為依托,簡化擬態(tài)環(huán)境中數(shù)據(jù)的切分,存取和同步,調(diào)用對應(yīng)SQL指紋指令對前端指紋SQL執(zhí)行進(jìn)行去指紋化.
Mycat是用于解決傳統(tǒng)關(guān)系型數(shù)據(jù)庫大數(shù)據(jù)存儲不足而設(shè)計的開源分布式數(shù)據(jù)存儲中間件[16],使用NIO重構(gòu)的網(wǎng)絡(luò)模塊,優(yōu)化緩沖內(nèi)核,增強聚合等基本特性,兼容Oralce、PostgreSQL等多種數(shù)據(jù)庫,實現(xiàn)跨語言,跨平臺,跨數(shù)據(jù)庫的通用中間件,并提供和原生數(shù)據(jù)庫一致的命令訪問的支持,可實現(xiàn)集群管理,自動擴(kuò)容,智能優(yōu)化的功能[5],Mycat架構(gòu)如圖2.Mycat作為中間件,其功能更好的對數(shù)據(jù)庫實現(xiàn)擬態(tài)防御中動態(tài)異構(gòu)冗余模型(DHRA)構(gòu)造,使數(shù)據(jù)的訪問和處理更安全,高效.
由于在擬態(tài)環(huán)境中需要多個執(zhí)行體,為保證執(zhí)行體執(zhí)行的數(shù)據(jù)統(tǒng)一和多模裁決,所有執(zhí)行體共用一個數(shù)據(jù)庫集群,這就要求數(shù)據(jù)庫能夠同時容納并處理大量數(shù)據(jù),并且對指紋SQL語言有切分判決能力.Mycat作為數(shù)據(jù)庫的中間件能在擬態(tài)環(huán)境中搭建以Mysql為底層節(jié)點的分布式數(shù)據(jù)庫系統(tǒng)[17],系統(tǒng)通過Mysql的通信協(xié)議[18]與用戶以及底層數(shù)據(jù)庫通信,實現(xiàn)負(fù)載均衡、指紋SQL語句重寫、讀寫分離、多臺數(shù)據(jù)庫并行處理以及結(jié)果集合并等功能[5],又因其是開源程序,Mycat對整個集群能透明地訪問和管理,集群管理如圖3,這在擬態(tài)環(huán)境中,集群管理為數(shù)據(jù)的安全訪問和處理提供了更可靠高效的保障.
圖2 Mycat架構(gòu)
圖3 Mycat集群管理
2.2.1 數(shù)據(jù)庫中間件的切分
在擬態(tài)環(huán)境中,多個異構(gòu)執(zhí)行體訪問同一數(shù)據(jù)庫,這就對數(shù)據(jù)庫存儲和運算能力有一定的要求.作為執(zhí)行體和數(shù)據(jù)庫的中間件,Mycat對執(zhí)行體發(fā)送的SQL語句進(jìn)行攔截分析,通過邏輯表中的取模分片算法、分片枚舉、Hash分片等特定算法,將數(shù)據(jù)的存儲和讀取,由一個數(shù)據(jù)庫分散到多個數(shù)據(jù)庫中,減少了單個數(shù)據(jù)庫存儲和運算壓力,實現(xiàn)數(shù)據(jù)分布式存儲[5],Mycat分布式數(shù)據(jù)存儲構(gòu)架如圖4.
圖4 Mycat分布式數(shù)據(jù)存儲構(gòu)架
2.2.2 數(shù)據(jù)庫中間件高可用性
在擬態(tài)環(huán)境中,多個執(zhí)行體對數(shù)據(jù)庫進(jìn)行頻繁的數(shù)據(jù)存儲和讀取,Mycat作為執(zhí)行體和數(shù)據(jù)庫連接點,其本身的高可用性涉及所連接數(shù)據(jù)庫乃至整個擬態(tài)系統(tǒng)的高可用性.數(shù)據(jù)庫經(jīng)過切分后,在各個節(jié)點的數(shù)據(jù)庫獨立運行前提下,Mycat使用主從復(fù)制高的可用配置,將dataHost中的writeNode配置為主節(jié)點,readNode配置為從節(jié)點,在邏輯表中,可配置多個readNode和writeNode,實現(xiàn)多寫多讀.在Mycat正常運行時,其內(nèi)部對dataHost中的全部readHost和WriteHost節(jié)點定期發(fā)起心跳檢測[5],將全部的DML SQL發(fā)送給第一個writeNode,當(dāng)?shù)谝粋€writeNode所在的節(jié)點出現(xiàn)宕機,默認(rèn)3次心跳檢測失敗后,Mycat將自動切換到下一個可用的writeNode,并執(zhí)行DML SQL語句.由于Mycat是無狀態(tài)中間件,在擬態(tài)環(huán)境下,用HAProxy等負(fù)載均衡軟件部署為集群模式[1],Mycat高可用架構(gòu)如圖5.
圖5 Mycat高可用架構(gòu)
2.2.3 數(shù)據(jù)庫中間件分布式處理
事務(wù)處理由一組操作構(gòu)成,其具有原子性(atomicity)、隔離性(isolation)、持久性(durability)和一致性(consistency)4 個特性[5],在擬態(tài)環(huán)境中,我們希望通過中間件的分布式處理[17](Distributed Transaction Processing,DTP)將所有SQL語句正確執(zhí)行.分布式事務(wù)處理(DTP)是在一個或多個數(shù)據(jù)庫完成SQL語句執(zhí)行過程的集合,其關(guān)鍵是知道事務(wù)在數(shù)據(jù)庫中任何地方所做的動作,通過事務(wù)準(zhǔn)備,提交,反饋,產(chǎn)生統(tǒng)一的結(jié)果,如果某個步驟發(fā)生錯誤,就需要回滾到上一步已經(jīng)完成的操作.X/Open定義了分布式事務(wù)處理模型,其由應(yīng)用程序 (ApplicationProgram,AP)、資源管理器(ResourceManagement,RM)、通信資源管理器 (Communication Resource Management,CRM)、事務(wù)管理器(Transaction Management,TM)四部分組成[5].AP可以和TM以及RM通信,TM和RM互相之間可以通信,TM和RM通過XA接口進(jìn)行雙向通信,TM通知RM提交事務(wù)或者回滾到上一事務(wù)正確執(zhí)行完的點,RM把提交結(jié)果通知給TM.
在擬態(tài)環(huán)境中,在準(zhǔn)備階段,Mycat中事務(wù)管理器通知節(jié)點數(shù)據(jù)庫準(zhǔn)備分支事務(wù),節(jié)點數(shù)據(jù)庫準(zhǔn)備結(jié)果;在提交階段,事務(wù)管理器通知節(jié)點數(shù)據(jù)庫提交分支事務(wù),節(jié)點數(shù)據(jù)庫將結(jié)果提交給Mycat,正常提交執(zhí)行過程如圖6.當(dāng)在第一階段出現(xiàn)某一個數(shù)據(jù)讀取和改寫失敗,第二階段就回滾到第一階段已經(jīng)預(yù)提交成功的數(shù)據(jù),提交失敗執(zhí)行過程如圖7.
圖6 提交成功
圖7 提交失敗
2.2.4 數(shù)據(jù)庫中間件對指紋SQL處理
現(xiàn)在網(wǎng)絡(luò)數(shù)據(jù)竊取成功,主要是攻擊者了解并熟悉被攻擊系統(tǒng)的語言,進(jìn)而注入代碼攻擊成功,在擬態(tài)環(huán)境中,SQL腳本采用基于指紋化的數(shù)據(jù)庫指令異構(gòu)[2],通過對正常的執(zhí)行語句加入指紋,讓攻擊者不了解指紋化的執(zhí)行語言,使其注入的指令是無法正確執(zhí)行.當(dāng)指紋SQL語句通過Mycat時,數(shù)據(jù)庫首先判斷請求的地址,若請求來自網(wǎng)站端,將請求指令加到執(zhí)行體對性的隊列中,然后進(jìn)行指紋SQL語言過濾,指紋SQL處理結(jié)構(gòu)如圖8,利用多模表決機制,將SQL語句進(jìn)行一致性表決,表決一致,則執(zhí)行正常SQL語句,表決不一致,則進(jìn)行異常處理.
圖8 指紋SQL處理結(jié)構(gòu)圖
數(shù)據(jù)庫返回的結(jié)果保存到緩沖區(qū)中,相同的數(shù)據(jù)會被映射到Hash表中的相同位置,所有結(jié)果返回完整后,對數(shù)據(jù)庫返回內(nèi)容的完整性進(jìn)行Hash比較,比較通過后,數(shù)據(jù)返回給執(zhí)行體,若比較不一致,把出錯信息發(fā)送給擬態(tài)系統(tǒng)的反饋調(diào)度服務(wù)器進(jìn)行決策調(diào)度.
Hash表中數(shù)據(jù)信息進(jìn)行比較偽代碼如下所示:數(shù)據(jù)庫的返回結(jié)果Ri包括多個數(shù)據(jù)包,形式為:Ri={P1,P2,···,Pn}
Foriin 1..n:
Pi= get_resp()
Put_to_push()//將數(shù)據(jù)庫返回的結(jié)果放入Hash表中
If get(Pi)>n/2+1//相同結(jié)果超過一半時
Send(Pi)//返回結(jié)果
Remove(Pi)//刪除已經(jīng)對比完成的數(shù)據(jù)
2.2.5 數(shù)據(jù)庫多模表決機制
在擬態(tài)環(huán)境中,用動態(tài)冗余架構(gòu)特性改變傳統(tǒng)防御環(huán)境中的相似性,確定性和靜態(tài)性;利用矢量空間多模裁決機制,如圖9,形成非協(xié)同條件下,多元動態(tài)目標(biāo)協(xié)同一致攻擊難度以實現(xiàn)“面防御”功能.在數(shù)據(jù)庫環(huán)境中,目標(biāo)對象外部SQL服務(wù)請求依據(jù)策略分發(fā)給各個數(shù)據(jù)庫,數(shù)據(jù)庫的輸出矢量經(jīng)過Hash表比較進(jìn)行裁決輸出.
多模表決器按照規(guī)則對n個功能相同但相互獨立的數(shù)據(jù)庫的輸出進(jìn)行表決操作,保證系統(tǒng)正確輸出,本文采用n取k表決模型,當(dāng)k個數(shù)據(jù)庫正常讀取時,便認(rèn)為數(shù)據(jù)庫正常運行,當(dāng)k個及以上數(shù)據(jù)庫返回的數(shù)據(jù)異常時,才會輸出錯誤非正常數(shù)據(jù),在異構(gòu)冗余的擬態(tài)環(huán)境中,不同的數(shù)據(jù)庫運行環(huán)境不同,攻擊注入方式不同,無論從時間和技術(shù)上,對攻擊者都是極大的消耗,由此數(shù)據(jù)庫的安全性和可靠性得以提高.
圖9 擬態(tài)表決器模型
為了驗證Mycat在擬態(tài)環(huán)境中能夠高效保障數(shù)據(jù)的讀取和安全性,我們在開源的企業(yè)辦公系統(tǒng)然之協(xié)同中,使用三模異構(gòu)冗余模型進(jìn)行實驗測試,然之協(xié)同的優(yōu)勢如下:
(1)功能齊全,能滿足日常的辦公需求,使用范圍廣,人數(shù)無限制.
(2)私有化部署,安全性高.
(3)開源產(chǎn)品,能修改代碼滿足個性化需求.
硬件配置如表2.
表2
在擬態(tài)環(huán)境中,3個異構(gòu)執(zhí)行體運行的系統(tǒng)分別為windows7(IP:192.168.126.133),Ubuntu (IP:192.168.126.134)和centos (IP:192.168.126.135),Mycat安裝在IP 地址為 192.168.126.141,并建立“ranzhi”數(shù)據(jù)庫.
(1)Schema.xml配置
Schema.xml作為Mycat最重要的配置文件之一,管理著邏輯庫,分片規(guī)則,節(jié)點主機等信息,關(guān)鍵代碼如下:
在各自的系統(tǒng)中,安裝然之協(xié)同,其所連立的數(shù)據(jù)庫設(shè)置為Mycat所在的物理地址和Mycat的端口,如圖10.
圖10 執(zhí)行體Mycat連接
(1)指紋SQL識別
通過Mycat,指紋SQL能夠在數(shù)據(jù)庫中正常執(zhí)行,如圖11,無指紋的SQL語言,不能運行,如圖12.
圖11 指紋SQL執(zhí)行結(jié)果
圖12 無指紋SQL執(zhí)行結(jié)果
(2)數(shù)據(jù)庫注入測試
在一般的數(shù)據(jù)庫中,進(jìn)行數(shù)據(jù)庫注入攻擊測試,數(shù)據(jù)庫返回數(shù)據(jù),如圖13,圖14所示.
當(dāng)使用本文中擬態(tài)環(huán)境中的數(shù)據(jù)庫,進(jìn)行相同的數(shù)據(jù)庫注入攻擊,未能返回數(shù)據(jù),攻擊失敗,如圖15所示.
圖13 數(shù)據(jù)庫注入過程
圖14 數(shù)據(jù)庫注入結(jié)果
圖15 數(shù)據(jù)庫注入失敗
數(shù)據(jù)庫安全測試如表3所示.
經(jīng)上述實驗,在擬態(tài)環(huán)境中,數(shù)據(jù)庫成功防御數(shù)據(jù)庫注入攻擊,保障了數(shù)據(jù)庫安全.
表3 數(shù)據(jù)庫安全測試結(jié)果
通過在擬態(tài)環(huán)境中使用Mycat作為數(shù)據(jù)庫訪問的中間件,實現(xiàn)了數(shù)據(jù)庫的集群管理,高可用性,以及對指紋SQL語言的處理,極大的提高擬態(tài)防御中對數(shù)據(jù)安全的保障和數(shù)據(jù)存儲,讀取的高效性.在未來的信息時代,網(wǎng)絡(luò)空間的數(shù)據(jù)存取和保護(hù)越來越得到重視,隨著社會科技的發(fā)展,會有更多的數(shù)據(jù)庫中間件出現(xiàn),其功能和架構(gòu)模式也會不斷的更新和成熟,數(shù)據(jù)庫中間件在擬態(tài)環(huán)境中會發(fā)揮更大的作用.