在12月20日—22日的第十一屆中國(guó)IDC產(chǎn)業(yè)年度大典上,長(zhǎng)亭科技高級(jí)研發(fā)工程師 李昌志發(fā)表了主題為《論正則防護(hù)系統(tǒng)的全自動(dòng)繞過(guò)與下一代防護(hù)方案》的精彩演講。 長(zhǎng)亭科技高級(jí)研發(fā)工程師 李昌志 背景 在防護(hù)方面目前業(yè)內(nèi)主要有兩種做法: 1.傳統(tǒng)方法,在一個(gè)通用的正則體系內(nèi)有很多規(guī)則,當(dāng)一個(gè)請(qǐng)求送達(dá)到一個(gè)規(guī)則,觸發(fā)WAF內(nèi)部的規(guī)則,在服務(wù)器后端解決攻擊。 2.新方案,基于沒(méi)有規(guī)則的無(wú)規(guī)則體系,匹配一整套規(guī)則文本,用這種方式會(huì)達(dá)到較高的準(zhǔn)確率和召回率。 傳統(tǒng)WAF的外部檢測(cè)流程包含以下幾個(gè)步驟: 一個(gè)傳統(tǒng)WAF拿到用戶的請(qǐng)求,會(huì)生成一個(gè)UIL。當(dāng)UIL被解析以后,會(huì)有Q參數(shù)。Q參數(shù)有編碼,普通的用戶無(wú)法使用。WAF會(huì)在下一步有輸入標(biāo)準(zhǔn)化模塊,我們可以把它理解為解碼的標(biāo)準(zhǔn)。 傳統(tǒng)的WAF并沒(méi)有很好的實(shí)現(xiàn)解碼功能。當(dāng)它去實(shí)現(xiàn)一些常規(guī)的解碼時(shí),往往會(huì)使用一系列比較古老的替換方案。 通過(guò)輸入標(biāo)準(zhǔn)化模塊,請(qǐng)求得到一條責(zé)任標(biāo)簽。而WAF在最后還有一個(gè)匹配的規(guī)則集,傳統(tǒng)的WAF會(huì)有傳統(tǒng)的規(guī)則系統(tǒng),根據(jù)黑客的攻擊特征,會(huì)抽象出很多的規(guī)則和特征。 當(dāng)WAF知道現(xiàn)在的請(qǐng)求已經(jīng)被匹配,系統(tǒng)判定攻擊,在最后它就會(huì)執(zhí)行一個(gè)相應(yīng)的策略,這個(gè)策略是由管理員來(lái)配置,這就是整個(gè)傳統(tǒng)WAF對(duì)流量的解析和攔截的過(guò)程。 RE就是正則表達(dá)式,F(xiàn)A是有限自動(dòng)機(jī)。它們之間有什么關(guān)系呢? 一個(gè)這樣的正則表達(dá)式,從起點(diǎn)開始它可以匹配一個(gè)大寫的HA;或者后面無(wú)限循環(huán)的小寫ha,最后可以匹配零到多個(gè)感嘆號(hào)。如果把它畫成一個(gè)有限自動(dòng)機(jī),它的初始狀態(tài)什么都沒(méi)有,接受一個(gè)大寫H和一個(gè)小寫h,一直循環(huán)。 兩種形式雖然表現(xiàn)的方式不一樣,但是它們表達(dá)的意思完全相同,這樣可以得出一個(gè)結(jié)論,正則表達(dá)式和有限自動(dòng)機(jī)完全等價(jià),可以互相表示。 另外一個(gè)概念就是CFG,把這種形式語(yǔ)言分為幾類,根據(jù)表達(dá)能力的強(qiáng)弱依次是,0型是圖文完備的語(yǔ)言,1型是上下文有關(guān),2型是上下文無(wú)關(guān),3型是正則文法。 RE和CFG的區(qū)別在于:RF使用的是正則文法,CFG使用的是上下文無(wú)關(guān)文法,CFG能表達(dá)的語(yǔ)言范疇、規(guī)則集遠(yuǎn)大于正則文法。每一種形式語(yǔ)言的文法都可以用一種自動(dòng)機(jī)來(lái)表示。 正則防護(hù)系統(tǒng)的弱點(diǎn) 基于正則防護(hù)系統(tǒng)存在的很明顯的弱點(diǎn)?,F(xiàn)在行業(yè)里邊存在的很多安全軟件,它去匹配一些攻擊特征時(shí),都使用RE描述的一些常見(jiàn)特征。但是常見(jiàn)的使用文法都是CFG,那么就會(huì)存在一系列的問(wèn)題。 SQR語(yǔ)言本來(lái)存在的語(yǔ)法結(jié)合是CFG,現(xiàn)在存在三種情況,一種是只保函RE,不包含CFG,或者重疊,或者只包含CFG不包含RE。當(dāng)一個(gè)WAF用RE的規(guī)則庫(kù)使用CFG時(shí),它們重疊的部分可以認(rèn)為是WAF所命中的攻擊。 只存在RE的地方不包含CFG,這整塊是誤報(bào)。根據(jù)上圖可見(jiàn),兩個(gè)圈重疊的部分是很小的,會(huì)存在大量的漏報(bào)和誤報(bào)。 首先,維護(hù)規(guī)則問(wèn)題,一個(gè)基于正則表達(dá)式的WAF,需要隨著時(shí)間、隨著事件一直有人維護(hù),但是這個(gè)維護(hù)的過(guò)程是非常費(fèi)心費(fèi)力的。 其次,一個(gè)人去維護(hù)這樣大的規(guī)則庫(kù)容易發(fā)生錯(cuò)誤,這是一件吃力不討好的事情。 再次,針對(duì)上圖做出的效果會(huì)存在大量的漏報(bào)和誤報(bào)。 自動(dòng)繞過(guò) WAF會(huì)存在這樣的繞過(guò)呢?有兩個(gè)根本的原因: 第一,特征不完備,因?yàn)樘卣鞑煌陚渌詡鹘y(tǒng)WAF需要人工手工持續(xù)地更新、持續(xù)地維護(hù)規(guī)則庫(kù)。 其次,一個(gè)正則表達(dá)式存在差異,RE想要匹配一個(gè)上下文無(wú)關(guān)的文法,只能無(wú)限的接近,永遠(yuǎn)不能等價(jià)。 以SQL語(yǔ)言為例,SQL語(yǔ)言使用的文法是CFG,正則表達(dá)式與CFG描述的語(yǔ)言存在差集,它存在的差集有兩部分,首先漏報(bào)、持續(xù)漏報(bào)。 當(dāng)找到一個(gè)存在點(diǎn),可以大概猜測(cè)定位到這點(diǎn)使用怎樣的敏感語(yǔ)法。并且我們使用CFG有效地編碼,使RE無(wú)法完全匹配CFG。當(dāng)發(fā)生這種情況的時(shí)候,攻擊者就找到了一種通用的WAF繞過(guò)方案。 我們想做事情,首先知道CFG匹配SQL,但是我們的WAF使用的是RE。當(dāng)二者發(fā)生碰撞,最后找出來(lái)的東西就是一個(gè)判斷有這樣的特征的語(yǔ)法。它存在于CFG,但是不存在于WAF匹配的RE所描述的語(yǔ)言。 針對(duì)其他攻擊,使用這種方案會(huì)更有利。因?yàn)槠渌Z(yǔ)言從理論上來(lái)講表現(xiàn)更靈活,因?yàn)檫@個(gè)SQL語(yǔ)言沒(méi)有辦法去執(zhí)行,很多常見(jiàn)的語(yǔ)言都提供一個(gè)像函數(shù)。你會(huì)傳給它一個(gè)字符串,它會(huì)去執(zhí)行,但是SQL不存在這個(gè)東西。 下一代防御方案 我們兩年前就提出一個(gè)的方案,使用詞法、語(yǔ)法合理的分析,對(duì)整個(gè)流量進(jìn)行整體的分析,經(jīng)過(guò)一個(gè)人工智能的打分,通過(guò)機(jī)器學(xué)習(xí)模型學(xué)習(xí)一整套匹配方案,會(huì)得出一個(gè)完備的模型。 WAF在保證準(zhǔn)確率首先首先體現(xiàn)在語(yǔ)法分析,傳統(tǒng)WAF使用的是RE,新的防御思路使用的是CFG。RE和CFG是完全無(wú)法等價(jià)的,RE只能無(wú)限地接近CFG,但是永遠(yuǎn)無(wú)法等價(jià)。當(dāng)無(wú)限地接近它的時(shí)候,存在的語(yǔ)言匹配的集會(huì)遠(yuǎn)大于CFG,這樣會(huì)存在大量的誤報(bào)。使用我們的方案以后,整個(gè)WAF的檢測(cè)準(zhǔn)確率就會(huì)得到非常大的提升。 首先是語(yǔ)義分析,當(dāng)語(yǔ)法通過(guò)了我們規(guī)定的CFG以后,我們認(rèn)為現(xiàn)在你的請(qǐng)求里存在某一段攻擊,但是語(yǔ)義分析可以精確地識(shí)別出有沒(méi)有無(wú)疑的語(yǔ)法片斷,如果有的話我們會(huì)對(duì)整個(gè)請(qǐng)求的惡意進(jìn)行打分。在我們現(xiàn)在的結(jié)果里面,可以看到的準(zhǔn)確率和召回率都達(dá)到99%以上,傳統(tǒng)的WAF很難達(dá)到80%以上。 再次是召回率。如果這樣做的話就需要寫一個(gè)億完整的引擎,我們可以根據(jù)一個(gè)流量特征精確地匹配出一個(gè)流量中使用了哪些編碼、哪些變形,通過(guò)這些解碼,以及解變形以后,我們就可以精確地提取出這個(gè)工具,或者這個(gè)請(qǐng)求里邊哪個(gè)片斷使用了什么樣的攻擊。 最后就是檢測(cè)性能,為什么說(shuō)使用了這種方法以后,一個(gè)WAF的檢測(cè)性能就會(huì)得到非常明顯的提升呢。CFG只需要用一套語(yǔ)法就可以解決所有事情,但是想讓RE和CFG無(wú)限期的接近,你需要寫很多的正則表達(dá)式,才能完成這樣的事情。 傳統(tǒng)的WAF和新的WAF存在的流量檢測(cè)時(shí)候的實(shí)現(xiàn)復(fù)雜度進(jìn)行對(duì)比,可以看到傳統(tǒng)WAF多了一個(gè)M,為什么會(huì)多一個(gè)M,其實(shí)新的也是存在一個(gè)M,但是它的M永遠(yuǎn)是1,但是舊的M是好幾百,甚至好幾千。分析一些比較大型的防火墻的時(shí)候,可以發(fā)現(xiàn)它里邊其實(shí)有好幾萬(wàn)條規(guī)則。當(dāng)N和L完全相同的時(shí)候,使用新的方案效率是老的方案的好幾萬(wàn)倍。 |
|
來(lái)自: yi321yi > 《網(wǎng)絡(luò)》