朱思猛,杜瑞穎,陳 晶,何 琨
(1.武漢大學(xué)國家網(wǎng)絡(luò)安全學(xué)院 空天信息安全與可信計(jì)算教育部重點(diǎn)實(shí)驗(yàn)室,武漢 430072;2.武漢大學(xué) 日照信息技術(shù)研究院,山東 日照 276827)
Web 應(yīng)用程序部署在Web 服務(wù)器上,并通過Web 瀏覽器提供可訪問的服務(wù)[1]。由于具有便利性,Web 應(yīng)用程序在互聯(lián)網(wǎng)上得到了廣泛的應(yīng)用,如網(wǎng)絡(luò)郵件、網(wǎng)上銀行等,同時(shí)也出現(xiàn)了針對(duì)Web 應(yīng)用程序的各種網(wǎng)絡(luò)攻擊。研究報(bào)告顯示[2],針對(duì)Web應(yīng)用程序的攻擊占所有網(wǎng)絡(luò)威脅的32%以上,是最活躍的一類網(wǎng)絡(luò)攻擊。為了防御這類攻擊,Web 應(yīng)用防火墻(Web Application Firewall,WAF)被廣泛應(yīng)用[3-4]。WAF 通過檢查傳入的HTTP 流量來確定是攔截還是將流量轉(zhuǎn)發(fā)到目標(biāo)Web 應(yīng)用程序。多數(shù)WAF 根據(jù)定義的規(guī)則來做出決策,這些規(guī)則可以具體表現(xiàn)為匹配惡意Payload 特征的正則表達(dá)式。隨著針對(duì)Web 應(yīng)用程序的攻擊不斷發(fā)展演變,WAF 的被動(dòng)防御很難攔截新出現(xiàn)的攻擊,因此,需要及時(shí)測(cè)試WAF 的安全防護(hù)能力,并更新其規(guī)則來進(jìn)行加固,以此攔截新的攻擊,并進(jìn)一步阻止后續(xù)類似的攻擊。
WAF 安全能力測(cè)試的關(guān)鍵步驟是生成有效的測(cè)試輸入,其中可分為兩類:白盒測(cè)試和黑盒測(cè)試。白盒測(cè)試需要訪問相關(guān)源碼[5],這在現(xiàn)實(shí)環(huán)境下很難實(shí)現(xiàn)。黑盒測(cè)試在不了解目標(biāo)內(nèi)部機(jī)制的情況下工作,可進(jìn)一步分為基于突變的黑盒測(cè)試和基于生成的黑盒測(cè)試?;谕蛔兊姆椒ㄍㄟ^應(yīng)用精心設(shè)計(jì)的突變操作組合來修改現(xiàn)有Payload,以獲得測(cè)試輸入[6-8],基于生成的方法則根據(jù)設(shè)計(jì)的攻擊語法生成測(cè)試輸入[9]。然而,基于突變和基于生成的方法都依賴對(duì)某種攻擊的專業(yè)知識(shí)來設(shè)計(jì)突變操作或生成語法,且僅針對(duì)特定目標(biāo),效果不夠理想,只適合已知的攻擊檢測(cè),很難檢測(cè)到新的或未知的攻擊[10-11]。
本文基于循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)設(shè)計(jì)一個(gè)自動(dòng)化加固WAF 的方案,測(cè)試給定的WAF 并生成用于規(guī)則更新的加固簽名。針對(duì)現(xiàn)有方案的局限性,以惡意攻擊數(shù)據(jù)集為基礎(chǔ),利用RNN 模型生成更多的惡意攻擊Payload,并將這些Payload 發(fā)送至被WAF 保護(hù)的應(yīng)用程序,以發(fā)現(xiàn)WAF 存在的安全防護(hù)問題。在此基礎(chǔ)上,對(duì)成功繞過WAF 的惡意Payload 生成加固簽名,并設(shè)計(jì)簡(jiǎn)化的正則表達(dá)式作為表示加固簽名的方式。
Web 應(yīng)用程序是目前通過Internet 提供信息和服務(wù)最流行的平臺(tái)之一。隨著Web 應(yīng)用程序越來越多地被用于關(guān)鍵服務(wù),出現(xiàn)了很多針對(duì)Web 應(yīng)用程序的攻擊,如SQL 注入、跨站腳本(Cross-Site Scripting,XSS)、命令注入(Command Injection,CI)、cookie 盜竊、瀏覽器劫持等。由于許多Web 應(yīng)用程序與后端數(shù)據(jù)庫系統(tǒng)交互,因此針對(duì)Web 應(yīng)用程序的攻擊會(huì)導(dǎo)致嚴(yán)重的后果。本文主要研究SQL 注入、跨站腳本和命令注入這3 種典型的攻擊[12-14]。
SQL 注入攻擊用于攻擊數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用程序。在這些應(yīng)用程序中,惡意SQL 語句被插入到字段中執(zhí)行,數(shù)據(jù)庫信任Web 應(yīng)用程序并執(zhí)行應(yīng)用程序發(fā)出的查詢。使用這類攻擊,攻擊者可以操縱SQL 查詢并導(dǎo)致意外執(zhí)行。
跨站腳本攻擊是一種注入類型的攻擊。攻擊者可以利用這類攻擊在網(wǎng)站上注入惡意的客戶端代碼,當(dāng)被攻擊者登陸網(wǎng)站時(shí)就會(huì)自動(dòng)運(yùn)行這些惡意代碼,從而攻擊者可以突破網(wǎng)站的訪問權(quán)限,冒充被攻擊者。
命令注入攻擊的目標(biāo)是通過易受攻擊的應(yīng)用程序在主機(jī)操作系統(tǒng)上執(zhí)行任意命令。當(dāng)應(yīng)用程序?qū)⒉话踩脩籼峁┑臄?shù)據(jù)傳遞給系統(tǒng)shell 時(shí),就會(huì)發(fā)生這類攻擊。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)用于對(duì)序列數(shù)據(jù)建模[15],如用于文本處理、程序分析等[16-18],一般由輸入層、隱藏層和輸出層組成。RNN 使用隱藏狀態(tài)作為攜帶時(shí)間步之間信息的短期記憶,能夠很好地處理序列信息。
然而,RNN 存在梯度消失和梯度爆炸的問題,會(huì)導(dǎo)致消耗大量的時(shí)間并難以做進(jìn)一步優(yōu)化。對(duì)此,HOCHREITER 等提出了長短時(shí)記憶(Long Short Term Memory,LSTM)網(wǎng)絡(luò)。LSTM 網(wǎng)絡(luò)通過引入單元狀態(tài)彌補(bǔ)了原始RNN 的缺陷,利用遺忘門、輸入門和輸出門,分別控制上一時(shí)刻的單元狀態(tài)保留到當(dāng)前時(shí)刻、當(dāng)前時(shí)刻網(wǎng)絡(luò)的輸入保存到單元狀態(tài)以及單元狀態(tài)輸出保留到LSTM 當(dāng)前輸出的數(shù)量。另一種流行的RNN 結(jié)構(gòu)是門控循環(huán)單元(Gated Neural Unit,GRU)[19],其僅使用2 個(gè)門,即更新門和重置門。GRU 在LSTM 網(wǎng)絡(luò)的基礎(chǔ)上做了很多簡(jiǎn)化,同時(shí)能夠保持與LSTM 網(wǎng)絡(luò)相同的效果。
關(guān)于提升WAF 安全防護(hù)能力的研究,目前主要集中在檢測(cè)惡意攻擊[20-21]方面,對(duì)WAF 的安全測(cè)試和評(píng)估則不夠深入,無法解決許多實(shí)際問題。相關(guān)研究較少的原因在于WAF 是一個(gè)to-B 產(chǎn)品,主要影響企業(yè)用戶而不是消費(fèi)者,導(dǎo)致其受眾面相對(duì)狹窄,同時(shí)研究者也很難找到專業(yè)的WAF 進(jìn)行測(cè)試。
對(duì)于WAF 的安全測(cè)試,文獻(xiàn)[9,22]結(jié)合決策樹模型和進(jìn)化算法將Web 攻擊的Payload 分解為切片,并使用進(jìn)化算法進(jìn)一步生成惡意Payload,但具體攻擊的語法規(guī)范需要人工總結(jié),在測(cè)試過程中也存在一些限制,如生成的Payload 僅源于自己總結(jié)的語法規(guī)范,不能涵蓋新出現(xiàn)的攻擊,此外,方案僅對(duì)單個(gè)WAF 有用。文獻(xiàn)[7]提出了突變的方案,但加固目標(biāo)是基于機(jī)器學(xué)習(xí)的WAF 而不是真正的WAF。當(dāng)前,多數(shù)WAF 都是黑盒的,不僅使用機(jī)器學(xué)習(xí)方法進(jìn)行防御,而且混合使用多種方法,而上述方案都需要預(yù)先設(shè)計(jì)突變操作或語法,復(fù)雜耗時(shí)并且只對(duì)特定的WAF 有效。因此,本文提出一種可應(yīng)用于各種類型攻擊的WAF 加固方案。
本文提出一種WAF 自動(dòng)化加固方案,其可發(fā)現(xiàn)繞過給定WAF 的惡意Payload,并生成加固簽名來修復(fù)相應(yīng)安全防護(hù)漏洞。
如圖1 所示,本文方案的系統(tǒng)框圖主要由Payload 生成器和簽名生成器2 個(gè)部分組成。首先,發(fā)送收集到的數(shù)據(jù)集到被WAF 保護(hù)的應(yīng)用程序,得到被WAF 攔截的惡意攻擊Payload 作為Payload 生成器的輸入,通過RNN 生成更多惡意攻擊Payload。然后,簽名生成器利用其中可以繞過WAF 的Payload,通過評(píng)分函數(shù)找到對(duì)WAF 判別有重要影響的字符串,生成可以匹配繞過攻擊的加固簽名。在這其中一個(gè)重要前提是,系統(tǒng)從惡意Payload 中生成Payload,這些生成的Payload 應(yīng)視為具有惡意的。
圖1 本文方案的系統(tǒng)框圖Fig.1 System block diagram of the proposed scheme
Payload 生成器負(fù)責(zé)生成針對(duì)WAF 的惡意攻擊Payload。該模塊接收惡意的Payload,并在原始Payload 上產(chǎn)生微小擾動(dòng),輸出更多惡意Payload。筆者認(rèn)為,由于Payload 是否惡意取決于上下文,因此其中應(yīng)選用能夠?qū)W習(xí)序列結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)。由于傳統(tǒng)基于n-gram 的方法受有限長度上下文的限制,因此本文選擇使用RNN。RNN 允許學(xué)習(xí)任意長度的上下文來預(yù)測(cè)下一個(gè)字符序列,給定惡意Payload 的語料庫,RNN 模型能夠以無監(jiān)督的方式進(jìn)行訓(xùn)練來生成新的惡意Payload。由于RNN 每個(gè)時(shí)刻隱藏層的輸出都會(huì)傳遞給下一時(shí)刻,因此每個(gè)時(shí)刻的網(wǎng)絡(luò)都會(huì)保留一些來自之前時(shí)刻的歷史信息,并結(jié)合當(dāng)前時(shí)刻的網(wǎng)絡(luò)狀態(tài)一并傳給下一時(shí)刻,這一過程可以表示為:
其中:it是輸入;ht和ht-1是隱藏狀態(tài)向量是時(shí)刻t的輸出;fh是激活函數(shù);fo用于計(jì)算當(dāng)前隱藏層輸出的概率分布。
為了使輸入能夠被神經(jīng)網(wǎng)絡(luò)處理,Payload 生成器要將輸入進(jìn)行向量化,轉(zhuǎn)換成適合處理的結(jié)構(gòu)。首先,需要將字符串映射為數(shù)字。設(shè)X={x1,x2,…,xN}為輸入序列,其中xt∈N|1 ≤t≤N表示輸入序列中位置t處字符的自然數(shù)。然后,將xt轉(zhuǎn)換為N維的one-hot 向量,定義為:
通過上述向量化方法得到一個(gè)高維的向量,從而獲得訓(xùn)練所需的特征。在此基礎(chǔ)上,使用GRU 神經(jīng)網(wǎng)絡(luò)模型解決RNN 面臨的梯度消失或梯度爆炸的問題。模型的輸出層包含了一個(gè)前饋網(wǎng)絡(luò),其輸入為循環(huán)神經(jīng)網(wǎng)絡(luò)的輸出。本文應(yīng)用softmax 函數(shù)為預(yù)測(cè)輸入序列的下一個(gè)值提供概率分布。最后,使用交叉熵誤差函數(shù)作為優(yōu)化目標(biāo)對(duì)GRU 模型進(jìn)行優(yōu)化,此部分采用ADAM 優(yōu)化算法[23],其為一種基于梯度的優(yōu)化算法,與其他算法相比只需要一階梯度,并且內(nèi)存占用較少。
簽名生成器的作用是生成匹配惡意攻擊的加固簽名。該模塊接收繞過WAF 的惡意Payload 作為輸入。簽名被廣泛用于防御攻擊,簽名系統(tǒng)都有相同的基本假設(shè):Payload 存在一個(gè)子字符串,該子串在過程中保持不變,并且具有足夠的唯一性,可以用作簽名而不會(huì)導(dǎo)致誤報(bào)。由于人工生成加固簽名通常需要花費(fèi)大量的時(shí)間,因此本文選擇使用繞過WAF的Payload 來自動(dòng)生成WAF 加固簽名。
由于可能會(huì)有巨大的搜索空間,因此應(yīng)找到對(duì)WAF 判別有最重要影響的字符串。使用4 個(gè)能夠正確反映字符串對(duì)判別重要性且計(jì)算效率較高的評(píng)分函數(shù),來評(píng)估對(duì)目標(biāo)WAF 做出決策最重要的token,如圖2 所示,其中,WAF 判別結(jié)果可以為0 或1,結(jié)果為1 表明實(shí)線部分和虛線部分的判別結(jié)果不同。
圖2 以SQL 為例的評(píng)分函數(shù)說明Fig.2 Description of scoring function taking SQL as an example
假設(shè)輸入序列X={x1,x2,…,xN},其中xi表示第i個(gè)位置的token。為根據(jù)重要性進(jìn)行排序,需要衡量第i個(gè)位置的token 對(duì)判別的影響。使用4 個(gè)評(píng)分函數(shù)來評(píng)估Payload 中每個(gè)token 對(duì)WAF 判別的重要性,以f代表WAF 的判別結(jié)果。下面將分別對(duì)4 個(gè)評(píng)分函數(shù)進(jìn)行解釋說明。
刪除函數(shù)比較刪除token 前后的Payload 語句,以評(píng)估xi對(duì)WAF 的影響,便于直觀地理解其重要性。刪除函數(shù)表達(dá)式如下:
替換函數(shù)將xi替換為另一個(gè)字符串,通過評(píng)估替換的影響來衡量token的重要性。替換函數(shù)表達(dá)式如下:
由于token 前后的字符串是相關(guān)的,可以按順序衡量token 的重要性,因此定義頭部函數(shù)比較x1到xi之間的字符串與x1到xi-1之間的字符串,定義尾部函數(shù)比較xi到xn之間的字符串與xi+1到xn之間的字符串。這2 種函數(shù)的表達(dá)式如下:
上述4 個(gè)函數(shù)的結(jié)果以0 和1 表示,表明token 發(fā)生變化時(shí)是否對(duì)判別結(jié)果產(chǎn)生影響。綜合4 個(gè)評(píng)分函數(shù)的結(jié)果,評(píng)估所有token,選擇若干個(gè)頻繁出現(xiàn)且對(duì)判別影響較大的字符串token,然后使用正則表達(dá)式生成簽名,每個(gè)簽名由一個(gè)或多個(gè)這樣的token 組成。正則表達(dá)式在靈活性、準(zhǔn)確性和效率方面對(duì)于攻擊檢測(cè)具有顯著的優(yōu)勢(shì)。但是,完整的正則表達(dá)式過于復(fù)雜,而簽名不需要其眾多的語法規(guī)則。因此,本文引入簡(jiǎn)化正則表達(dá)式作為表示簽名的方式。簡(jiǎn)化正則表達(dá)式簽名是正則表達(dá)式的簡(jiǎn)化形式,其中只包含一個(gè)限定符“S*”,表示任意非空白字符。
通過編輯距離對(duì)token 進(jìn)行聚類,將相似的token 劃分為一個(gè)組,在一組中隨機(jī)查找2 個(gè)字符串的公共子序列。2 個(gè)字符串的公共子序列是2 個(gè)字符串中相同順序的字節(jié)序列,雖然它不一定是連續(xù)的,如在字符串“xxabxxxcx”和“abyyyyycyy”中,最長的公共子序列是“abc”。然后,使用此子序列來不斷地匹配和產(chǎn)生新的子序列。當(dāng)某組的子序列不再匹配時(shí),迭代查找不同組子序列的公共子序列。對(duì)于結(jié)果,在每2 個(gè)字符之間添加“S*”,生成一個(gè)簡(jiǎn)化的正則表達(dá)式,即加固簽名。
通過檢測(cè)SQL 注入、XSS 攻擊和命令注入這3 種典型網(wǎng)絡(luò)攻擊來評(píng)估方案的有效性,并將本文方案與現(xiàn)有基于突變的解決方案和主流測(cè)試工具進(jìn)行比較。此外,實(shí)驗(yàn)還將評(píng)估簽名生成器的有效性。
在ModSecurity、Naxsi、Safedog、Xwaf 這4 款WAF 上進(jìn)行實(shí)驗(yàn)。根據(jù)以下標(biāo)準(zhǔn)選擇WAF:首先,WAF 來自商業(yè)公司或者是GitHub 上的高評(píng)分項(xiàng)目,并且在安裝過程中不會(huì)報(bào)告錯(cuò)誤;其次,WAF 可以禁用對(duì)挑戰(zhàn)黑洞(Challenge Collapsar,CC)攻擊的保護(hù),因?yàn)檫@種保護(hù)會(huì)阻止系統(tǒng)有效地測(cè)試WAF。
在實(shí)驗(yàn)中,Web 應(yīng)用系統(tǒng)部署在帶有Intel?Xeon?CPU E5-2680 和32 GB RAM 的Linux 工作站上運(yùn)行。所選WAF 部署在相同配置的Linux 工作站或Windows 工作站上。分別在Linux 工作站和Windows 工作站上安裝Ubuntu 18.04 和Windows 7。深度學(xué)習(xí)模型是使用Google 的TensorFlow 框架[24]實(shí)現(xiàn)的,該框架提供了必要的優(yōu)化算法和損失函數(shù)。
本文選擇自行生成部分?jǐn)?shù)據(jù)集,以及在WAF 服務(wù)器上收集到的數(shù)據(jù)作為實(shí)驗(yàn)所用的惡意數(shù)據(jù)集,主要是基于以下原因:一方面,這類數(shù)據(jù)集大多都是內(nèi)部數(shù)據(jù)集,由于隱私問題而無法公開共享;另一方面,很多數(shù)據(jù)集高度匿名或無法滿足測(cè)試需求。此外,“惡意”和“良性”的定義依賴于具體的應(yīng)用程序,不存在通用的定義。
在生成的這部分?jǐn)?shù)據(jù)集中,對(duì)于SQL 注入攻擊,選擇使用隨機(jī)查詢生成器生成數(shù)據(jù)并運(yùn)行相應(yīng)腳本,使其變?yōu)閻阂釶ayload。隨機(jī)查詢生成器是SQL Server 的官方測(cè)試工具,給定語法,該工具返回一組該語法所表示的Payload,然后從現(xiàn)有的滲透測(cè)試工具SQLMap 中提取惡意腳本來生成SQL 注入的Payload。對(duì)于命令注入攻擊,修改了Commix 來根據(jù)實(shí)驗(yàn)需要生成惡意Payload。Commix 是一個(gè)開源滲透測(cè)試工具,能夠自動(dòng)檢測(cè)和利用命令注入漏洞。對(duì)于XSS 攻擊,使用XSStrike 來生成惡意Payload.XSStrike 是一個(gè)流行的跨站腳本檢測(cè)套件,在Github上擁有9 000 多個(gè)Star。
為獲得WAF 自身以及加固后的誤報(bào)率,本文使用來自公共數(shù)據(jù)集HTTP CSIC 2010[25]的數(shù)據(jù)作為良性數(shù)據(jù)集。數(shù)據(jù)集HTTP CSIC 2010 包含針對(duì)電子商務(wù)Web 應(yīng)用程序生成的流量,其中有36 000 個(gè)正常請(qǐng)求。
繞過目標(biāo)WAF 的Payload 數(shù)量是衡量WAF 安全防護(hù)能力的重要指標(biāo)。當(dāng)惡意攻擊Payload 繞過WAF 時(shí),表明WAF 中存在安全防護(hù)問題。
表1 列出了WAF 安全測(cè)試結(jié)果。本文并沒有針對(duì)3 種攻擊測(cè)試所有4 款WAF,這是因?yàn)槟承¦AF不能保護(hù)應(yīng)用程序免受特定攻擊,當(dāng)同時(shí)滿足低攔截率和高通過率時(shí),筆者認(rèn)為WAF 不提供針對(duì)此種攻擊的保護(hù)。由表1 可以看出,在測(cè)試的4 款WAF中,只有ModSecurity 和Naxsi 可以防止命令注入,這可能是因?yàn)槊钭⑷牍粼赪eb 應(yīng)用程序中相對(duì)較少,通常需要與其他攻擊結(jié)合使用。由表1 還可以看出,一些WAF 有過于嚴(yán)格的規(guī)則,不僅阻止惡意攻擊,而且阻止良性請(qǐng)求,這在現(xiàn)實(shí)條件下是不可行的,Naxsi 就是這種WAF,其提供了攔截閾值選項(xiàng),因此,需要修改參數(shù)使其攔截能力達(dá)到較為合理的水平來進(jìn)行測(cè)試。
表1 WAF 安全測(cè)試結(jié)果Table 1 WAF security test results %
表1 中的第3 列描述了使用原始數(shù)據(jù)集中惡意Payload 測(cè)試WAF 時(shí)的攔截率,其中被攔截的惡意Payload 將作為Payload 生成器的輸入,第3 列這一指標(biāo)顯示了WAF 的攔截能力。可以看出,4 款WAF 應(yīng)對(duì)一般的惡意攻擊,均展現(xiàn)出了較高的攔截率。
表1中的第4列描述了使用良性Payload測(cè)試WAF的結(jié)果??梢钥闯隼@過率很高,這表明WAF 的誤報(bào)率很低。然而,并非所有良性數(shù)據(jù)繞過率都達(dá)到了高水平,以Naxsi為例,這款WAF 選擇犧牲誤報(bào)率來換取攔截率,因此對(duì)于惡意數(shù)據(jù)和良性數(shù)據(jù)的攔截率都達(dá)到了較高的水平,但對(duì)于被WAF 攔截的良性Payload,也選擇其作為Payload 生成器的輸入。
表1 中的第5 列描述了WAF 對(duì)生成的惡意Payload 的攔截率。在實(shí)驗(yàn)中,對(duì)每類攻擊都生成數(shù)千個(gè)惡意Payload 來進(jìn)行測(cè)試。圖3~圖5 直觀顯示了WAF 對(duì)生成的惡意攻擊Payload 的攔截情況,其中每個(gè)直方圖對(duì)應(yīng)一種攻擊,直方圖長度表示攔截率??梢钥闯?,所有3 種攻擊的攔截率都大幅降低,這意味著生成了成功的繞過攻擊。由圖4 可以看出,所有受測(cè)試WAF 對(duì)原始惡意XSS 攻擊的攔截率都高達(dá)90%。然而,以Safedog 為例,對(duì)于生成的惡意Payload,WAF 僅攔截到其中的26%,而未防護(hù)到其中大多數(shù)的攻擊,說明本文提出的方案成功生成了大量惡意繞過攻擊。
圖3 SQL 注入攻擊Payload 的攔截率變化Fig.3 The change of Payload interception rate during SQL injection attack
圖4 XSS 攻擊Payload 的攔截率變化Fig.4 The change of Payload interception rate during XSS attack
圖5 命令注入攻擊Payload 的攔截率變化Fig.5 The change of Payload interception rate during command injection attack
SQL注入攻擊是一種常見的攻擊,目前已經(jīng)有許多成熟的應(yīng)對(duì)方案和工具。因此,以SQL 注入攻擊為基準(zhǔn),將本文提出的方案與基于突變的方案[7](下文簡(jiǎn)稱突變方案)以及SQLMap工具在ModSecurity和Safedog這2款WAF上進(jìn)行實(shí)驗(yàn)比較。突變方案通過反復(fù)隨機(jī)應(yīng)用一些預(yù)定義的突變操作來生成惡意攻擊Payload。SQLMap是一個(gè)面向SQL的開源滲透測(cè)試工具,利用其繞過腳本來生成Payload。選擇SQLMap是因?yàn)榇斯ぞ吣壳胺浅A餍?,被知名機(jī)構(gòu)和安全專家廣泛使用。
1)與突變方案的比較。突變操作是一個(gè)函數(shù),其改變Payload 并保留原始語義。表2 中定義了多種突變操作,包括大小寫變換、空格替換、注釋插入、注釋重寫等。以大小寫交換操作為例,其隨機(jī)更改Payload 中關(guān)鍵字的大小寫,由于SQL 不區(qū)分大小寫,因此語義不受影響。將這些突變操作應(yīng)用于原始數(shù)據(jù)集以生成繞過Payload。為了防止隨機(jī)應(yīng)用突變操作造成的隨機(jī)性,生成10 組數(shù)據(jù),并計(jì)算最終繞過率的平均值。
表2 突變操作定義Table 2 Definition of mutation operation
2)與SQLMap 的比較。SQLMap 是一種廣泛使用的開源滲透測(cè)試工具,能夠自動(dòng)檢測(cè)和利用SQL 注入漏洞。SQLMap 可以生成大量不同的SQL 注入攻擊,涵蓋了所有常見的SQL 注入攻擊技術(shù)。本文選用的工具版本1.4.2.38 包含57 個(gè)繞過腳本。在實(shí)驗(yàn)中,舍棄了其中一些與編碼相關(guān)的腳本,因?yàn)檫@些腳本是為特定的后端設(shè)計(jì)的,將對(duì)WAF 檢測(cè)的準(zhǔn)確性產(chǎn)生較大影響。本文將其他繞過腳本應(yīng)用于原始數(shù)據(jù)集,同時(shí),執(zhí)行與突變方案相同的操作以減少隨機(jī)性干擾。
在ModSecurity 和Safedog 上使用本文方案、突變方案和SQLMap 進(jìn)行實(shí)驗(yàn)。在相同的環(huán)境中,測(cè)試3 種方案并對(duì)結(jié)果與原始繞過率進(jìn)行比較,如表3所示。由表3 可以看出:所有方案都可以產(chǎn)生繞過WAF 的Payload,這表明WAF 普遍沒有提供足夠的保護(hù);對(duì)于ModSecurity,突變方案和SQLMap 都能有效提高WAF 的繞過率,但本文方案能夠得到最大的提高幅度,且遠(yuǎn)高于其他2 個(gè)方案;對(duì)于Safedog情況類似,但可以看到,使用突變方案后繞過率出現(xiàn)了降低,這可能是因?yàn)閃AF 提供了針對(duì)突變的專門保護(hù),因?yàn)橥蛔儤颖九c良性SQL 樣本的差異很大,最初能夠繞過的樣本在突變后反而被攔截,導(dǎo)致繞過率降低,這也表明突變方案對(duì)于WAF 不是通用的;整體上,本文方案效果優(yōu)于其他2 種方案,生成的數(shù)據(jù)具有較高的繞過率,且生成了更多繞過WAF 的惡意攻擊。
表3 3 種方案生成Payload 的繞過率比較Table 3 Bypassing rate comparison of Payload generated by three schemes %
在本節(jié)中,將評(píng)估輸出加固簽名的效率。為了生成加固簽名,使WAF 能夠有效攔截繞過的惡意攻擊,需要實(shí)現(xiàn)以下2 個(gè)目標(biāo):最大化攔截的惡意攻擊數(shù)量和最小化攔截的良性請(qǐng)求數(shù)量。在實(shí)驗(yàn)中,將使用攔截率和誤報(bào)率這2 個(gè)指標(biāo)作為檢測(cè)結(jié)果的評(píng)價(jià)標(biāo)準(zhǔn),攔截率表示惡意Payload 被判別為惡意Payload 的比例,誤報(bào)率表示良性Payload 被判別為惡意Payload 的比例。本文使用原始數(shù)據(jù)集中的繞過樣本以及良性Payload 來評(píng)估生成的加固簽名。在實(shí)驗(yàn)中,需要檢驗(yàn)這些簽名的效率,即應(yīng)用加固簽名后的誤報(bào)率和繞過率。
表4 體現(xiàn)了應(yīng)用加固簽名后WAF 攔截率的變化。簽名需要在誤報(bào)率和攔截率之間保持平衡,如果誤報(bào)率過高,那么無論攔截率有多高都是沒有意義的,因?yàn)檫@將導(dǎo)致良性和惡意Payload 的無差別攔截。從表3 的最后2 列可以看出,本文方案得到的加固簽名實(shí)現(xiàn)了較高的攔截率。在應(yīng)用加固簽名后,攔截率高達(dá)90%甚至100%,表明簽名阻止了多數(shù)惡意繞過攻擊。此外,使用良性Payload 對(duì)其進(jìn)行誤報(bào)率評(píng)估,沒有一條良性Payload 被攔截,表明加固后的WAF 對(duì)正常流量不會(huì)產(chǎn)生影響。筆者對(duì)誤報(bào)率都為0 的情況也進(jìn)行了分析,認(rèn)為可能原因是惡意Payload 與良性Payload 區(qū)別很大,因此加固簽名很難匹配到良性Payload。而現(xiàn)實(shí)情況也確實(shí)如此,與惡意Payload 相似或與良性Payload 不同的流量更有可能來自潛在攻擊者,正常網(wǎng)絡(luò)流量中不會(huì)出現(xiàn)與惡意Payload 相似的情況??傮w而言,與應(yīng)用加固簽名之前的情況相比,應(yīng)用加固簽名后WAF 的防護(hù)能力有了較大的提高,攔截率保持在90%以上。
表4 加固簽名評(píng)估結(jié)果Table 4 Evaluation result of reinforcement signature %
本文提出的WAF 加固方案通過RNN 模型生成惡意Payload,并用于測(cè)試WAF,以發(fā)現(xiàn)WAF 存在的安全問題,同時(shí)還設(shè)計(jì)了一個(gè)簽名生成器,利用評(píng)分函數(shù)找到關(guān)鍵字符串來生成加固簽名,保護(hù)WAF 免受后續(xù)類似攻擊,解決了傳統(tǒng)方案依賴專業(yè)知識(shí)的問題。實(shí)驗(yàn)針對(duì)3 種攻擊類型評(píng)估4 款WAF,結(jié)果表明本文方案發(fā)現(xiàn)了大量惡意繞過Payload,生成的加固簽名也有效地防止了這些攻擊,并且誤報(bào)率為0。后續(xù)將基于強(qiáng)化學(xué)習(xí)方法優(yōu)化本文方案,通過從WAF 獲得反饋來指導(dǎo)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),進(jìn)一步改善Payload 的質(zhì)量并提高繞過率。