在宗派林立的檢測技術武林中,語義化檢測引擎近兩年已成熱門絕學。它的力量在于,讓攻擊檢測更精确、更聰明、更人性化。目前,硬體waf中,國内已經有數家廠商部署了該技術;雲waf中,阿裡雲雲盾也在上周釋出了語義智能檢測引擎的選項。
“智能語義檢測”這門武藝的江湖故事,要從它的前輩“基于規則的檢測引擎”開始說起。
10幾年裡,基于規則的引擎一統江湖。直到現在,江湖上大多數的waf是基于規則的waf。其原理是每一個會話都要經過一系列的安全檢測,每一項檢測都由一個或多個檢測規則組成,比對了檢測規則,請求就會被認為非法而拒絕。
聽起來很簡單?其實對于運維者和企業客戶來說,規則檢測的軟肋就在于他的“道法複雜,不變通”。
<b>基于規則的</b><b>waf能有效的防範已知安全問題。</b>但安全運維者首先必須知道攻擊的全部特點,根據這些特點制定規則。是以基于規則的waf需要一個強大的規則庫支撐,并且規則庫需要及時更新來應對最新的攻擊。
對于安全運維人員來說,規則的條目就會變得繁多而複雜,導緻規則庫維護起來相當困難。并且,運維人員經常發現,過了一段時間後,都不知道某些規則的含義以及當初為什麼這麼寫的了。例如下邊這條規則:

是不是看得頭大?維護龐大的規則庫對營運人員來說,确實是個很大的挑戰。這是因為,基于規則的waf,因為規則的描述能力有限,有些攻擊方法和攻擊場景無法通過規則來描述完備。我們舉一個大家能懂的例子,
如果“大道至簡!”是一串攻擊請求,當waf成功防禦過一次後,就會更新一個規則
——但凡包含“至”、“簡”“!”這三個特征的,就可能是攻擊!—— 但如果下次接到了一個正常請求:“至繁歸于至簡!”,waf也會把它歸到攻擊那一類,這就産生了我們所謂的<b>誤報</b>。
同時,攻擊者會通過複雜的變形來完成攻擊。這時,規則又是無法窮盡所有的攻擊變形的。還是剛才那個例子,當上次的攻擊者做了一個“變體”,将攻擊請求變成了“大道無為”,那麼waf就檢測不到了,也就是所謂的<b>漏報</b>了。
在很多攻防對抗的場景下,會發現正則的缺陷和短闆。以一個簡單的sql注入攻擊請求為例:
這個sql注入攻擊請求是讀取資料庫版本資訊的攻擊請求,能夠描述這個攻擊的正規表達式,可以寫為:
union\s+select\s+version\(\)\s+from\s+dua
\s+的作用是比對一個或多個不可見字元,如空格、換行等符号。顯然的,熟悉sql語句的攻擊者,可以利用一些資料庫特性繞過這個正則的檢查,例如:用注釋符/*11*/替換空格、利用注釋符号--%0替換空格,根據這個特性,完善後的正規表達式可以寫為:
union(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a)select(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a)version\(\)(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a)from(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a)dual
可以明顯看到,更新之後的正規表達式的複雜度已經明顯提高了,邏輯看起來也不是非常直覺明了,更重要的是,這樣的防護規則,仍然可以被繞過!
經過簡單的fuzz挖掘,可以發現mysql新的“特性”,在mysql函數調用中,正常結構為function_name() 這樣的格式,同時還支援其他的文法特性,function_name/*111111*/()、function_name () 、function_name`()、function_name--%0a()、function_name/**/ ()
、function_name/*111*/--11%0()這樣都是等價的寫法!
于是上述正則規則又有了更新版:
union(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a)select(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a)version(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a|`)\(\)(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a)from(\s+|/\*[\s\s]*\*/|--[\s\s]*?\x0a)dual
從這個簡單的例子可以看出,使用正規表達式去描述sql注入這樣的攻擊,存在明顯的短闆:維護成本高、邏輯性低、條理性低。往往一個新”特性”的發現,意味着營運人員需要批量更新上百條的規則,這是一個相當艱難的過程,是以使用正則作為檢測方式的引擎,或多或少存在被繞過的風險。
總而言之,基于規則的檢測不能有效防禦未知的威脅,比如攻擊變體,0day攻擊。除此之外,對于企業安全運維人員來說,正則引擎的維護壓力大,成本高,各派武林人士都在yy:“有沒有一種檢測引擎和算法,不需要人去維護規則,也可以應對千變萬化的攻擊!?”
智能引擎檢測這個武林絕學,就在這樣的江湖背景下,千呼萬喚始出來。
語義檢測引擎的内功在于,會把自然語言中的語義、順序和場景,納入考慮範圍;知道一個特征,在這個場景、順序下可能是攻擊,在另一個中則不是。延續剛才“大道至簡”的例子:
<b>規則引擎:</b>
隻用“至”、“簡”“!”來判定一個請求是否是攻擊。漏報誤報率高
<b>智能語義檢測引擎:</b>
1、“大道至簡!”是攻擊
2、“至繁歸于至簡!”因為場景和順序不對,不是攻擊
3、通過機器學習,能分辨出“大道無為”是“大道至簡”的變體
這樣一來,大家就可以一目了然看出二者的根本差別了。智能化語義檢測引擎,<b>就像手握一把離門劍,“每一招中皆能在刹那間作二十五種變化,獨步劍林。”</b>(參考蕭逸《十二神拳》)。對于防範未知威脅,0day攻擊尤其有效。
那麼,智能語義化檢測的武功究竟如何使出來?我們再往下探究。
<b>第一招,歸一</b>
把同類攻擊行為的<b>同類行為特征歸并起來</b>。即,同一類的攻擊行為和攻擊特征聚合為一個攻擊特征,這就是歸一化的過程。攻擊的多個行為特征組成特定的排列組合,來表示同一類攻擊,<b>這樣我們就可以用自然語言的語義來了解并且描述同一類攻擊。攻擊特征的排列組合就是攻擊的語義化。</b>
這樣就能抛卻各種複雜的攻擊和它們的變形,把攻擊行為語義化了。
以下是一個sql注入攻擊實作語義化的例子,先對sql語句進行歸一化的語義分析,<b>然後在異常攻擊集中查找分析結果,若找到說明是</b><b>sql注入攻擊。</b>
<b></b>
比如以下這條規則:
(select|from|\band|\bor|\bxor|=|,|;)[\s\+\(`)*?(sleep[\s\+`]*?\(|version[\s\+`]*?\(|pg_sleep[\s\+`]*?\(|extractvalue[\s\+`]*?\(|updatexml[\s\+`]*?\(|dbms_pipe.receive_message\(|st_latfromgeohash\(|st_longfromgeohash[\s\+`]*?\(|analyse[\s\+`]*?\(|gtid_subset[\s\+`]*?\(|gtid_subtract\(|st_pointfromgeohash\(|convert[\s\+`]*?\(|md5[\s\+`]*?\(|count[\s\+`]*?\(|char[\s\+`]*?\(|benchmark[\s\+`]*?\(|hex[\s\+`]*?\(|@@version|db_name[\s\+`]*?\(|user[\s\+`]*?\(|cast[\s\+`]*?\(|concat[\s\+`]*?\(|unhex[\s\+`]*?\(|floor[\s\+`]*?\(|length[\s\+`]*?\(|ascii[\s\+`]*?\(|substring[\s\+`]*?\(|substr[\s\+`]*?\(|substring_index[\s\+`]*?\(|instr[\s\+`]*?\(|left[\s\+`]*?\(|right[\s\+`]\()
通過歸一化後可以描述為:select from 敏感關鍵字 函數運算(),可以用“abcde”五個字元表示,即這類攻擊用語義可描述為:<b>具有敏感關鍵字和函數運算的</b><b>sql類型表達式。複雜的規則維護,瞬間變得簡單了。</b>
<b> </b>
<b>第二招,攻異</b>
僅僅防範已知的web安全問題,是被動且滞後的,基于異常的防護會更加有效。
異常防護這一招的基本觀念是:根據合法應用資料檢測建立統計模型,以此模型為依據判别實際通信資料是否是攻擊。
理論上,此招一出,系統就能夠探測出任何的異常情況。這樣,就不再需要規則庫,0day攻擊的檢測也不再是問題了。
例如,阿裡雲雲盾的waf智能語義異常攻擊集,是基于雲盾自己的營運資料,對正常的web應用模組化,從正常的模型裡邊區分出異常的情況,再從繁多的web攻擊中提煉出來的異常攻擊模型,形成異常攻擊集。
未來,智能語義化檢測引擎這門絕學,将進化成實時大資料分析引擎。招式進化的關鍵,就在于算法的優化,計算的能力和成本,還有資料聚類和清洗的技術,等等。
<b>基于上述的理念和檢測原理,阿裡雲研發了全新的雲盾</b><b>waf智能檢測引擎。該智能引擎通過攻擊行為語義化和基于異常的防護,來檢測各種web攻擊。</b>各類攻擊語義化後,雲盾waf智能檢測引擎能應對各種攻擊及其複雜的變形。基于異常統計檢測所建立的安全模型,不僅僅可以防範已知的web安全威脅,也可以防範未知的安全威脅。
江湖風雲變幻,大資料的時代已經成為主流。waf防禦的技術如果想要繼統治武林,向智能化、語義化的方向發展則是必然。未來,可以預見大部分的waf檢測和防禦都會通過機器學習自動來完成,再加上很少的人工确認工作,就可以确定異常攻擊集 —— 從容應對現實中的安全威脅以及未來的安全威脅,從根本上解決web服務系統所面臨的各種安全挑戰。
<b>大道至簡,大有可為。</b>
<b>了解阿裡雲雲盾産品和服務</b>
<b>https://www.aliyun.com/product/yundunall?spm=5176.8142029.388261.22.83ye8g</b>