趙琳娜,倪 明,喻衛(wèi)東
(華東計(jì)算技術(shù)研究所,上海 201808)
隨著組織機(jī)構(gòu)開(kāi)展的互聯(lián)網(wǎng)業(yè)務(wù)日益增多,由于大量已知和未知的漏洞及后門的存在,面臨的安全隱患不容小覷.數(shù)據(jù)庫(kù)作為Web 應(yīng)用的核心組成部分,存有網(wǎng)站動(dòng)態(tài)資源和用戶信息,最易受到攻擊.當(dāng)數(shù)據(jù)庫(kù)被惡意攻擊成功后,會(huì)導(dǎo)致用戶信息泄露、內(nèi)容被篡改等不良后果.除此之外,攻擊者利用漏洞完成一次數(shù)據(jù)攻擊所需要的時(shí)間極短,給管理員及時(shí)發(fā)現(xiàn)數(shù)據(jù)庫(kù)入侵并補(bǔ)救的工作帶來(lái)了極大困難.
傳統(tǒng)數(shù)據(jù)庫(kù)的防御手段是基于威脅特征感知的精確防御,需要攻擊行為的特征等先驗(yàn)知識(shí)才能有效實(shí)施防御,具有靜態(tài)、透明、缺乏多樣性等缺陷.擬態(tài)防御動(dòng)態(tài)異構(gòu)冗余架構(gòu)利用漏洞的平臺(tái)相關(guān)性,在期望功能等價(jià)條件下,擬態(tài)界內(nèi)的執(zhí)行體具有處理結(jié)構(gòu)的相異性和冗余性,對(duì)“已知的未知”風(fēng)險(xiǎn)或“未知的未知”威脅具有內(nèi)生防御效果[1].
本文依托擬態(tài)防御的動(dòng)態(tài)異構(gòu)冗余原理,提出擬態(tài)數(shù)據(jù)庫(kù)模型,通過(guò)保留字?jǐn)M態(tài)化模塊、指紋過(guò)濾模塊和擬態(tài)化中間件模塊分別實(shí)現(xiàn)注入指令的異構(gòu)化、去指紋化和基于相似性判決的選擇性執(zhí)行,具有內(nèi)生安全性.
根據(jù)世界著名的Web 安全與數(shù)據(jù)庫(kù)安全研究組織OWASP 發(fā)布的十大最關(guān)鍵的Web 應(yīng)用安全風(fēng)險(xiǎn)(OWASP Top 10),與數(shù)據(jù)庫(kù)安全密切相關(guān)的SQL 注入攻擊(SQL Injection)在2013年和2017年均被列為威脅最嚴(yán)重的攻擊方式[2].攻擊者通過(guò)利用客戶端任何能夠提交信息與數(shù)據(jù)庫(kù)進(jìn)行交互的地方作為注入點(diǎn),提交重構(gòu)的SQL 命令,欺騙數(shù)據(jù)庫(kù)執(zhí)行,并針對(duì)服務(wù)器端返回的結(jié)果進(jìn)行分析,竊取數(shù)據(jù)庫(kù)內(nèi)的關(guān)鍵信息、惡意篡改數(shù)據(jù)和控制服務(wù)器.
基于SQL 注入攻擊的原理,當(dāng)前防御方法大多從代碼層面和平臺(tái)層面入手[3],代碼層面的防御方法主要是在需要提交數(shù)據(jù)的頁(yè)面設(shè)置規(guī)范的SQL 語(yǔ)句格式,對(duì)用戶提交的信息進(jìn)行過(guò)濾,保證用戶提交的信息不會(huì)對(duì)SQL 查詢語(yǔ)句造成歧義,如參數(shù)化查詢、參數(shù)過(guò)濾、存儲(chǔ)過(guò)程等;平臺(tái)層面的防御方法主要是利用URL 重置技術(shù),將含有注入點(diǎn)的網(wǎng)址屏蔽起來(lái),如URL 重定向技術(shù)等.除此以外,還配合使用設(shè)置有限的訪問(wèn)權(quán)限、預(yù)編譯、加強(qiáng)日常監(jiān)督與檢測(cè)等手段.
參數(shù)化查詢(parameterized query)指在設(shè)計(jì)與數(shù)據(jù)庫(kù)鏈接并訪問(wèn)數(shù)據(jù)時(shí),在需要填入數(shù)值或數(shù)據(jù)的地方,采用參數(shù)傳遞值,避免直接賦值.數(shù)據(jù)庫(kù)系統(tǒng)把參數(shù)值應(yīng)用到查詢計(jì)劃中,執(zhí)行查詢結(jié)果,若改變參數(shù)值再執(zhí)行,則得到不同的查詢結(jié)果,但SQL 語(yǔ)句不需要重構(gòu)提交,也不需要再次生成查詢計(jì)劃,參數(shù)值的變化影響不了查詢計(jì)劃[4].
使用參數(shù)化查詢技術(shù),數(shù)據(jù)庫(kù)服務(wù)器不會(huì)將參數(shù)的內(nèi)容視為SQL 指令的組成部分來(lái)處理,在一定程度上避免了數(shù)據(jù)庫(kù)編譯運(yùn)行參數(shù)中含有惡意指令的情況.
參數(shù)過(guò)濾分為對(duì)參數(shù)類型或長(zhǎng)度的限制和對(duì)危險(xiǎn)字符的過(guò)濾/轉(zhuǎn)義.
針對(duì)特定的、功能單一的參數(shù)提交接口,盡可能詳細(xì)地限制允許用戶輸入的參數(shù)類型及長(zhǎng)度.當(dāng)參數(shù)類型必須包含字符或長(zhǎng)度無(wú)法直接控制時(shí),通過(guò)在后臺(tái)代碼中設(shè)置黑/白名單等過(guò)濾規(guī)則,將參數(shù)中的非法字符轉(zhuǎn)義為合法字符提交或不予執(zhí)行,對(duì)參數(shù)中的敏感信息進(jìn)行檢測(cè)及過(guò)濾/轉(zhuǎn)義,避免非法字符被系統(tǒng)重構(gòu)為查詢語(yǔ)句導(dǎo)致SQL 注入.
存儲(chǔ)過(guò)程存儲(chǔ)在數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)部,是一組完成特定功能的SQL 語(yǔ)句集.Web 應(yīng)用程序通過(guò)調(diào)用存儲(chǔ)過(guò)程事先構(gòu)建好的SQL 查詢語(yǔ)句代碼來(lái)執(zhí)行相應(yīng)操作.
存儲(chǔ)過(guò)程在使用時(shí)起到3 點(diǎn)安全作用:首先,存儲(chǔ)過(guò)程在執(zhí)行前要進(jìn)行預(yù)編譯,編譯出錯(cuò)不予執(zhí)行;其次,對(duì)于數(shù)據(jù)的授權(quán)訪問(wèn)是基于存儲(chǔ)過(guò)程而不是直接訪問(wèn)基本表,攻擊者無(wú)法探測(cè)到Select 語(yǔ)句;最后,存儲(chǔ)過(guò)程可以指定和驗(yàn)證用戶提交的參數(shù)類型[5].
URL 重置是將提交至服務(wù)器的Web 程序截取下來(lái),自動(dòng)將請(qǐng)求重新定位到其他URL 地址的過(guò)程.目前可以通過(guò)兩種方式實(shí)現(xiàn)URL 重置(以ISAPI 篩選器為例)[3]:
1)使用ISAPI 篩選器在IIS Web 服務(wù)器級(jí)別實(shí)現(xiàn)URL 重寫(xiě);
2)使用HTTP 模塊或HTTP 處理程序在ASP.NET環(huán)境實(shí)現(xiàn)URL 重寫(xiě).
微軟的IIS 中包含有ISAPI_Rwrite 的URL 重定向組件,提供基于正則表達(dá)式的網(wǎng)址重寫(xiě)引擎,對(duì)并不存在的URL 請(qǐng)求重寫(xiě)[6].通過(guò)對(duì)Rewrite 組件的應(yīng)用,實(shí)現(xiàn)對(duì)含有非法參數(shù)的URL 進(jìn)行重定向.
在已知現(xiàn)有SQL 注入攻擊方法的特征下進(jìn)行針對(duì)性防御的傳統(tǒng)防御手段仍然存在缺陷,如參數(shù)化查詢及參數(shù)過(guò)濾在某些情況下應(yīng)用場(chǎng)景單一,并且在過(guò)濾規(guī)則設(shè)置不完善的情況下仍可以被攻擊者繞過(guò)進(jìn)而成功實(shí)現(xiàn)SQL 注入;存儲(chǔ)過(guò)程并不支持所有的數(shù)據(jù)庫(kù)平臺(tái),如果存儲(chǔ)過(guò)程中執(zhí)行的命令是拼接字符串,則仍然存在被注入攻擊的隱患;URL 重置技術(shù)在利用ISAPI 篩選器實(shí)現(xiàn)時(shí)對(duì)平臺(tái)有一定的局限性,只適用于Windows 系列操作系統(tǒng)的服務(wù)器.
現(xiàn)有數(shù)據(jù)庫(kù)防御手段是在已知攻擊特征等先驗(yàn)知識(shí)的前提條件下才能實(shí)施有效防御,但在安全領(lǐng)域仍然存在大量未知風(fēng)險(xiǎn).針對(duì)現(xiàn)有數(shù)據(jù)庫(kù)防御手段的靜態(tài)性和確定性,本文基于擬態(tài)防御的動(dòng)態(tài)異構(gòu)冗余原理,提出具有內(nèi)生安全性的擬態(tài)數(shù)據(jù)庫(kù)模型.該模型通過(guò)保留字?jǐn)M態(tài)化模塊完成SQL 保留字指紋特征的差異化描述,調(diào)用指紋過(guò)濾模塊對(duì)SQL 注入指令進(jìn)行去指紋處理,使用擬態(tài)化中間件對(duì)來(lái)自不同執(zhí)行體的SQL 注入指令進(jìn)行在線相似性判決.
擬態(tài)數(shù)據(jù)庫(kù)模型在傳統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ)上,新增保留字?jǐn)M態(tài)化模塊、指紋過(guò)濾模塊和擬態(tài)化中間件模塊對(duì)客戶端輸入的合法或非法的SQL 指令進(jìn)行判決及處理.結(jié)構(gòu)如圖1所示.
圖1 擬態(tài)數(shù)據(jù)庫(kù)模型結(jié)構(gòu)
由圖1可知,在擬態(tài)數(shù)據(jù)庫(kù)模型中,保留字?jǐn)M態(tài)化模塊先對(duì)運(yùn)行在各執(zhí)行體上的Web 應(yīng)用源碼進(jìn)行SQL保留字的指紋差異化描述;當(dāng)用戶從網(wǎng)站客戶端發(fā)起合法的SQL 任務(wù)時(shí),SQL 保留字經(jīng)過(guò)指紋過(guò)濾模塊的去指紋化處理后傳入擬態(tài)化中間件模塊進(jìn)行表決,底層數(shù)據(jù)庫(kù)執(zhí)行經(jīng)過(guò)表決的SQL 語(yǔ)句后返回執(zhí)行結(jié)果;當(dāng)用戶從網(wǎng)站客戶端發(fā)起惡意SQL 任務(wù)時(shí),由于未經(jīng)過(guò)保留字?jǐn)M態(tài)化模塊的指紋差異化描述,所以傳入的未帶有指紋特征的SQL 指令不會(huì)被執(zhí)行;若攻擊者獲取到少數(shù)執(zhí)行體的中保留字的指紋特征,偽造經(jīng)過(guò)指紋化處理的SQL 指令,發(fā)起惡意SQL 任務(wù),此時(shí)不管是從網(wǎng)站客戶端還是從受攻擊的執(zhí)行體上傳SQL 任務(wù),在經(jīng)過(guò)擬態(tài)化中間件時(shí),由于和其他執(zhí)行體上的SQL 保留字的指紋特征不同,因此偽造的SQL 指令只會(huì)加入到受攻擊執(zhí)行體的對(duì)應(yīng)判決隊(duì)列,而此時(shí)其他執(zhí)行體的對(duì)應(yīng)判決隊(duì)列為空,根據(jù)少數(shù)服從多數(shù)的判決原則,偽造的惡意SQL 語(yǔ)句并不會(huì)通過(guò)相似性判決繼續(xù)向下執(zhí)行.
保留字是有特定語(yǔ)義的單詞或字符串,是數(shù)據(jù)庫(kù)識(shí)別指令的方法,在客戶端通過(guò)SQL 語(yǔ)言操作數(shù)據(jù)庫(kù)時(shí),所使用的SQL 指令即屬于SQL 保留字.
在未使用保留字?jǐn)M態(tài)化模塊時(shí),運(yùn)行在各執(zhí)行體上Web 應(yīng)用中的數(shù)據(jù)庫(kù)訪問(wèn)SQL 保留字是同構(gòu)的.保留字?jǐn)M態(tài)化模塊基于擬態(tài)防御中各執(zhí)行體異構(gòu)冗余的原理,通過(guò)對(duì)運(yùn)行在各執(zhí)行體上Web 應(yīng)用中的SQL 保留字進(jìn)行指紋特征差異化描述,實(shí)現(xiàn)Web 應(yīng)用在各擬態(tài)執(zhí)行體上SQL 保留字異構(gòu)化,防止惡意注入的SQL 保留字被后續(xù)模塊執(zhí)行.SQL 保留字?jǐn)M態(tài)化模塊的工作原理如圖2所示.
圖2 保留字?jǐn)M態(tài)化模塊工作原理
保留字?jǐn)M態(tài)化模塊輸出的來(lái)自不同執(zhí)行體的數(shù)據(jù)庫(kù)訪問(wèn)SQL 保留字帶有不同的指紋特征,并不是可以被正常識(shí)別并執(zhí)行的SQL 指令,為保證指令能夠在后續(xù)擬態(tài)化模塊中的可用性,引入指紋過(guò)濾模塊.
指紋過(guò)濾模塊在擬態(tài)化中間件對(duì)來(lái)自各執(zhí)行體的SQL 指令進(jìn)行相似性判決前被調(diào)用,將經(jīng)過(guò)指紋差異化處理的Web 應(yīng)用的數(shù)據(jù)庫(kù)訪問(wèn)SQL 保留字進(jìn)行去指紋化,使異構(gòu)化的SQL 保留字可被后續(xù)擬態(tài)化模塊識(shí)別并進(jìn)一步執(zhí)行.指紋過(guò)濾模塊的工作原理如圖3所示.
圖3 指紋過(guò)濾模塊工作原理
數(shù)據(jù)庫(kù)中間件[7]處于數(shù)據(jù)庫(kù)和用戶應(yīng)用之間,用于屏蔽異構(gòu)數(shù)據(jù)庫(kù)的底層細(xì)節(jié)問(wèn)題.當(dāng)用戶向Web 服務(wù)器發(fā)出SQL 請(qǐng)求時(shí),通過(guò)數(shù)據(jù)庫(kù)中間件對(duì)SQL 請(qǐng)求進(jìn)行特定的分析,根據(jù)分析結(jié)果連接數(shù)據(jù)庫(kù),將SQL 請(qǐng)求轉(zhuǎn)發(fā)給數(shù)據(jù)庫(kù)服務(wù)器.數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行SQL 語(yǔ)句后,將查詢結(jié)果通過(guò)數(shù)據(jù)庫(kù)中間件,傳回給用戶.以MyCAT 為例,傳統(tǒng)數(shù)據(jù)庫(kù)中間件結(jié)構(gòu)[8]如圖4所示.
圖4 傳統(tǒng)數(shù)據(jù)庫(kù)中間件結(jié)構(gòu)
根據(jù)圖4可知傳統(tǒng)數(shù)據(jù)庫(kù)中間件的核心由監(jiān)管模塊、執(zhí)行模塊組成,執(zhí)行模塊包括Web 應(yīng)用端及數(shù)據(jù)庫(kù)端的通信協(xié)議、連接池以及SQL 處理部分,其中SQL 處理部分包括SQL 解析組件、SQL 優(yōu)化組件、SQL 路由組件和SQL 執(zhí)行組件.
當(dāng)Web 應(yīng)用通過(guò)通信協(xié)議向數(shù)據(jù)庫(kù)端發(fā)起SQL任務(wù)時(shí),在監(jiān)管模塊的協(xié)調(diào)下,SQL 解析組件首先對(duì)SQL 語(yǔ)句進(jìn)行語(yǔ)法分析,SQL 優(yōu)化組件將SQL 語(yǔ)句轉(zhuǎn)譯為底層數(shù)據(jù)庫(kù)可識(shí)別的語(yǔ)言,SQL 路由組件確定對(duì)應(yīng)的數(shù)據(jù)庫(kù),最后由SQL 執(zhí)行組件生成執(zhí)行計(jì)劃,保證分發(fā)到底層數(shù)據(jù)庫(kù)的SQL 語(yǔ)句能正確執(zhí)行[9].數(shù)據(jù)庫(kù)中間件對(duì)數(shù)據(jù)庫(kù)返回的執(zhí)行結(jié)果進(jìn)行排序、合并等處理后,將最終結(jié)果返回給Web 應(yīng)用.
擬態(tài)化中間件模塊在傳統(tǒng)數(shù)據(jù)庫(kù)中間件的基礎(chǔ)上,增加了在線擬態(tài)判決器和同步機(jī)制.
在線擬態(tài)判決器是對(duì)已經(jīng)過(guò)指紋過(guò)濾的來(lái)自不同執(zhí)行體的SQL 指令根據(jù)少數(shù)服從多數(shù)的原則進(jìn)行相似性判決,選擇相似程度最高的SQL 指令進(jìn)行執(zhí)行;同步機(jī)制[10]通過(guò)交換每個(gè)成員中所有已更新的記錄和對(duì)象,實(shí)現(xiàn)副本集成員的同步;用于維護(hù)分布式環(huán)境下各個(gè)節(jié)點(diǎn)數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性.擬態(tài)判決器的結(jié)構(gòu)如圖5所示.
圖5 擬態(tài)化中間件結(jié)構(gòu)
由圖5知,當(dāng)部署在擬態(tài)執(zhí)行體上的Web 應(yīng)用發(fā)起SQL 任務(wù)時(shí),擬態(tài)化中間件根據(jù)各執(zhí)行體的連接信息,在監(jiān)管模塊的協(xié)調(diào)下,調(diào)用對(duì)應(yīng)的指紋過(guò)濾模塊對(duì)異構(gòu)的SQL 保留字進(jìn)行去指紋化;隨后將來(lái)自不同執(zhí)行體的SQL 指令加入對(duì)應(yīng)的判決隊(duì)列中,并使用擬態(tài)判決器在線進(jìn)行相似性判決;若判決來(lái)自不同執(zhí)行體的SQL 指令一致,則該SQL 指令將生成執(zhí)行計(jì)劃發(fā)送到底層數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行;若判決來(lái)自不同執(zhí)行體的SQL 指令不完全一致,則按照少數(shù)服從多數(shù)的原則,執(zhí)行多數(shù)執(zhí)行體相同的SQL 指令;若判決來(lái)自不同執(zhí)行體的SQL 指令完全不一致,則均不執(zhí)行且返回報(bào)錯(cuò)信息.在成功執(zhí)行SQL 指令后,將各執(zhí)行體SQL 指令保存在對(duì)應(yīng)緩沖區(qū)中的執(zhí)行結(jié)果進(jìn)行完整性驗(yàn)證,在同步機(jī)制的作用下對(duì)出現(xiàn)故障的數(shù)據(jù)表信息進(jìn)行恢復(fù),最終返回驗(yàn)證合法的結(jié)果.
擬態(tài)防御動(dòng)態(tài)異構(gòu)冗余(Dynamic Heterogeneous Redundancy,DHR)架構(gòu)的抗攻擊性分析[11]中,若擬態(tài)界的執(zhí)行體集中有n(n=2k+1,k=0,1,2···)個(gè)異構(gòu)執(zhí)行體,針對(duì)特定漏洞的攻擊成功率如下:
針對(duì)隨機(jī)選擇的漏洞子集組合攻擊成功率如下:
其中,qvuli是 攻擊者利用漏洞vuli對(duì)含vuli的執(zhí)行體進(jìn)行攻擊的成功率,與攻擊者能力密切相關(guān),是漏洞vul的k階輸出一致率,即對(duì)漏洞vul,在N次攻擊中有N′次 其k個(gè)輸出相同且與正常輸出不一致,αi是攻擊者利用漏洞vuli攻擊時(shí)的選擇權(quán)重,為系統(tǒng)動(dòng)態(tài)變化周期T和攻擊時(shí)間tvul的綜合考慮參數(shù).由于在擬態(tài)防御環(huán)境下,系統(tǒng)動(dòng)態(tài)變化周期T較短,使得的I(vul)=0概率增大;系統(tǒng)內(nèi)各執(zhí)行體異構(gòu)性高,因此k階輸出一致率εk(vul)低,且指紋特征在Web 應(yīng)用源代碼中的SQL 保留字中,大大增加了攻擊者獲取到個(gè)執(zhí)行體中指紋特征的難度,因此攻擊者難以獲得足夠多的指紋特征偽造惡意指令繞過(guò)擬態(tài)化中間件中的相似性判決.
SQL 注入攻擊作為主流的數(shù)據(jù)庫(kù)攻擊方式,主要集中在利用網(wǎng)站服務(wù)端口接收用戶輸入的功能[12],將構(gòu)造的SQL 語(yǔ)句傳入數(shù)據(jù)庫(kù)服務(wù)器,欺騙其執(zhí)行開(kāi)發(fā)者規(guī)定外的惡意任務(wù).
DVWA 是一款內(nèi)置不同安全級(jí)別漏洞模塊的滲透測(cè)試演練系統(tǒng),安全級(jí)別越低,漏洞利用成功率也越高.現(xiàn)使用其SQL 注入模塊來(lái)測(cè)試擬態(tài)數(shù)據(jù)庫(kù)模型的基本防御功能.
為單獨(dú)測(cè)試擬態(tài)數(shù)據(jù)庫(kù)模型的基本防御功能,簡(jiǎn)化測(cè)試模型,準(zhǔn)備一組由3 個(gè)同構(gòu)執(zhí)行體組成的Web 服務(wù)器和一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,安裝相同的版本的DVWA;在使用擬態(tài)數(shù)據(jù)庫(kù)的情況下,對(duì)部署在三臺(tái)Web 服務(wù)器上DVWA 中的SQL 保留字進(jìn)行指紋異構(gòu)化處理,在數(shù)據(jù)庫(kù)服務(wù)器中使用指紋過(guò)濾模塊和擬態(tài)化中間件模塊.
測(cè)試過(guò)程如下:
(1) 在使用傳統(tǒng)數(shù)據(jù)庫(kù)的情況下,先后用sqlmap、pangolin 等SQL 注入測(cè)試工具分別對(duì)DVWA 中低安全級(jí)別的SQL 注入測(cè)試模塊和高安全級(jí)別的SQL 注入測(cè)試模塊實(shí)施SQL 注入測(cè)試;
(2) 在使用擬態(tài)數(shù)據(jù)庫(kù)模型的情況下,使用注入DVWA 低安全級(jí)別的傳統(tǒng)數(shù)據(jù)庫(kù)使用的SQL 注入方法(后文稱低級(jí)SQL 注入),針對(duì)DVWA 低安全級(jí)別的SQL 注入測(cè)試模塊實(shí)施注入;
(3) 若注入失敗,則使用注入DVWA 高安全級(jí)別的傳統(tǒng)數(shù)據(jù)庫(kù)使用的SQL 注入方法(后文稱高級(jí)SQL 注入),針對(duì)使用擬態(tài)數(shù)據(jù)庫(kù)模型的DVWA 低安全級(jí)別的SQL 注入測(cè)試模塊實(shí)施注入;
(4) 在傳統(tǒng)SQL 注入方法失敗的情況下,構(gòu)造含有某一執(zhí)行體指紋特征的SQL 注入語(yǔ)句,再次進(jìn)行SQL 注入測(cè)試.
以使用sqlmap 為例,測(cè)試結(jié)果及說(shuō)明如下:
(1) 使用傳統(tǒng)數(shù)據(jù)庫(kù)時(shí)對(duì)DVWA 低安全級(jí)別SQL 注入模塊進(jìn)行SQL 注入的結(jié)果.
如圖6所示,在不使用擬態(tài)數(shù)據(jù)庫(kù)模型的情況下,當(dāng)Web 應(yīng)用的安全性較差時(shí),攻擊者可以輕松實(shí)現(xiàn)SQL 注入.
(2) 使用傳統(tǒng)數(shù)據(jù)庫(kù)時(shí)對(duì)DVWA 高安全級(jí)別SQL 注入模塊進(jìn)行SQL 注入的結(jié)果.
圖6 DVWA 低安全級(jí)別數(shù)據(jù)庫(kù)SQL 注入結(jié)果
如圖7所示,在不使用擬態(tài)數(shù)據(jù)庫(kù)模型的情況下,盡管Web 應(yīng)用的安全性較高,但攻擊者也可以通過(guò)各種繞過(guò)手段,使用sqlmap 等工具成功實(shí)施SQL 注入攻擊.
圖7 DVWA 高安全級(jí)別數(shù)據(jù)庫(kù)SQL 注入結(jié)果
(3) 使用擬態(tài)數(shù)據(jù)庫(kù)模型時(shí)對(duì)DVWA 低安全級(jí)別的SQL 注入測(cè)試模塊進(jìn)行低級(jí)SQL 注入的結(jié)果.
如圖8所示,在使用擬態(tài)數(shù)據(jù)庫(kù)模型的情況下,對(duì)DVWA 低安全級(jí)別的SQL 注入測(cè)試模塊進(jìn)行低級(jí)SQL 注入,由于低級(jí)SQL 注入手段通過(guò)構(gòu)造SQL 語(yǔ)句進(jìn)行注入,并未帶有執(zhí)行體指紋信息,擬態(tài)數(shù)據(jù)庫(kù)模型并不會(huì)將其當(dāng)做SQL 指令進(jìn)行執(zhí)行,因此擬態(tài)數(shù)據(jù)庫(kù)模型可以防御低級(jí)SQL 注入.
圖8 低級(jí)SQL 注入結(jié)果
(4) 使用擬態(tài)數(shù)據(jù)庫(kù)模型時(shí)對(duì)DVWA 低安全級(jí)別的SQL 注入測(cè)試模塊進(jìn)行高級(jí)SQL 注入的結(jié)果.
如圖9所示,在使用擬態(tài)數(shù)據(jù)庫(kù)模型的情況下,對(duì)DVWA 低安全級(jí)別的SQL 注入測(cè)試模塊進(jìn)行高級(jí)SQL 注入,盡管高級(jí)SQL 注入可通過(guò)繞過(guò)手段成功將SQL 指令注入傳統(tǒng)數(shù)據(jù)庫(kù)欺騙其執(zhí)行,但由于最終擬態(tài)數(shù)據(jù)庫(kù)模型接收到的SQL 語(yǔ)句中并未帶有指紋特征,因此并不會(huì)將SQL 注入語(yǔ)句作為指令進(jìn)行執(zhí)行,說(shuō)明擬態(tài)數(shù)據(jù)庫(kù)模型可以防御高級(jí)SQL 注入.
圖9 高級(jí)SQL 注入結(jié)果
(5) 構(gòu)造含某一執(zhí)行體指紋特征的SQL 注入語(yǔ)句進(jìn)行SQL 注入的結(jié)果
如圖10所示,在使用擬態(tài)數(shù)據(jù)庫(kù)模型的情況下,使用含某一執(zhí)行體指紋特征的SQL 注入語(yǔ)句對(duì)DVWA 低安全級(jí)別的SQL 注入測(cè)試模塊進(jìn)行SQL 注入失敗,因?yàn)閿M態(tài)數(shù)據(jù)庫(kù)模型只接收到了帶有一個(gè)執(zhí)行體指紋特征的SQL 指令,在擬態(tài)化中間件模塊進(jìn)行SQL 指令的相似性判決時(shí),另外兩個(gè)執(zhí)行體對(duì)應(yīng)的判決隊(duì)列為空,SQL 指令不會(huì)繼續(xù)向下執(zhí)行.因此在少量指紋泄露的情況下,擬態(tài)數(shù)據(jù)庫(kù)模型可以防御構(gòu)造指紋特征的SQL 注入.
圖10 含指紋特征的SQL 語(yǔ)句注入結(jié)果
針對(duì)傳統(tǒng)數(shù)據(jù)庫(kù)防御手段的靜態(tài)性和確定性,本文基于擬態(tài)防御的動(dòng)態(tài)異構(gòu)冗余原理提出應(yīng)用于擬態(tài)系統(tǒng)中的擬態(tài)數(shù)據(jù)庫(kù)模型.模型的安全性測(cè)試結(jié)果證明該模型在執(zhí)行體同構(gòu)環(huán)境下的可用性和安全性,若應(yīng)用于執(zhí)行體異構(gòu)的擬態(tài)系統(tǒng)中,則系統(tǒng)數(shù)據(jù)庫(kù)的安全性更會(huì)大大增加.但在測(cè)試過(guò)程中發(fā)現(xiàn),引入擬態(tài)數(shù)據(jù)庫(kù)模型,由于存在去指紋化處理及相似性判決步驟,模型的時(shí)間性能有所降低,影響了數(shù)據(jù)庫(kù)查詢的效率.
今后將進(jìn)一步探索能有效提高擬態(tài)數(shù)據(jù)庫(kù)模型判決速率切實(shí)可行的實(shí)現(xiàn)方法,并在現(xiàn)有擬態(tài)數(shù)據(jù)庫(kù)模型的基礎(chǔ)上,對(duì)保留字指紋特征的短期內(nèi)動(dòng)態(tài)變化以及注入攻擊觸發(fā)指紋特征變化的可能性進(jìn)行更深一步的研究.