對不起,現在才讓你了解XSS語義分析!

長亭雷池(SafeLine)防護系統是新一代基於智能語義分析技術的WAF產品,其核心檢測引擎包含多個語義分析子引擎,之前我們介紹SQL注入語義檢測比較多,其實XSS 語義檢測引擎也是其中非常重要的組成部分。
在目前市面可見的 WAF 系列產品中,長亭是唯一一家正式在WAF產品中使用語義分析方法來進行 XSS 檢測的,下面我們就着重介紹一下XSS語義分析引擎的工作原理以及實測效果。
XSS攻擊概況
XSS(Cross Site Scripting) 即跨站腳本執行,它指的是惡意攻擊者向Web頁面中插入惡意Javascript代碼,當用戶瀏覽該網頁時,嵌入其中的Javascript代碼會被執行,從而達到惡意攻擊、盜取個人信息資料、拿下整個網站的管理權、控制企業數據等目的。
XSS檢測及防御困難
XSS具備極大的編碼靈活性。
相信很多人都已經了解到 jsfuck,它只用6個字符即可實現任何Javascript語義,即任意一段Javascript代碼都可以轉換成用 “[]()+!” 所寫的“天書”。(如下圖)
除此之外還有 aaencode 可以完全把 Javascript 編碼成表情,這點真的讓人感到十分無奈。因此,要想將 XSS 檢測做好非!常!難!
Javascript 有很多不同的版本
不同的瀏覽器對於同一Javascript的解讀都會存在或多或少的差異,導致Javascript形成不同的版本,而這種差異無疑加大了對於XSS檢測的難度。
XSS自從2000年正式提出以來,已經有快 20 年的歷史了。然而直到今天,前端技術已經迅猛發展、花樣翻新,但是幾乎所有大型互聯網公司以及大流量網站,幾乎都曾受到過XSS攻擊,無一幸免,因為……
傳統基於規則的防御太脆弱
目前傳統的XSS檢測方式是使用XSS Filter、輸入過濾、輸出編碼、黑名單和白名單……
前面提到XSS編碼具有靈活多變的特點,而傳統檢測防御方法都是基於規則的,無法覆蓋所有的XSS語句,很容易造成誤報和漏報。這又該如何是好?
XSS語義分析來了
長亭科技頂尖技術團隊憑借多年的攻防研究和技術積累,研發出新一代智能Web應用防火牆——雷池(SafeLine),雷池(SafeLine)防護系統的智能威脅識別引擎,采用目前最先進的語義分析原理,不僅能夠檢測復雜的Web應用攻擊,而且能夠識別未知的安全威脅和攻擊。
其中,長亭的技術人員在對海量數據的積累和分析的基礎上,結合計算機編譯原理與自動機技術,研究出了一種不基於規則的XSS檢測與防御引擎。通過針對XSS的語義分析可以非常精准地檢測到攻擊行為,並進行有效攔截。
XSS 語義檢測的原理是什么?
XSS 的本質脫離不了通過 HTML/Javascript 片斷引入惡意代碼這個基本行為。因此語義分析的對象就是 HTML/Js 代碼(CSS在某種情況下也能引入Js,這里不做討論)。
常見XSS代碼注入示例:
/post_reply.html?content=%3CIMG+SRC%3D%2F+onerror%3D%E2%80%9Calert%28String.fromCharCode%2888%2C83%2C83%29%29%22%3E%3C%2Fimg%3E
與 SQL 注入檢測的語義分析方法類似,XSS 語義檢測同樣是如下圖四個步驟:
一
編碼處理
主要作用是把代碼外層包裹編碼去除,暴露出攻擊 payload,方便分析。
由此得到:
<IMG SRC=/ onerror=“alert(String.fromCharCode(88,83,83))"></img>
二
詞法提取
這個步驟與 SQL 注入完全不同,要先分析提取 html,再處理 Javascript。
分析結果如下:
HTML結構分析:
Tag_name = IMG
Tag_value[src] = /
Tag_value[onerror] = “alert(String.fromCharCode(88,83,83))"
Javascript詞法序列分析:
<bareword alert><left paren><bareword String><dot><bareword fromCharCode><left paren><number><comma><number><comma><number><right paren><right paren>
三
語法檢測
html 的部分沒有必要進行語法分析,語法分析只針對 Javascript。
大家都知道 Javascript 標准也已經有了很多版本,為了能夠處理足夠多的情形,我們直接支持到最新的 ECMAScript2017。
在以上詞法分析的基礎上,根據由Javascript語法規范定義出來的自動機可以檢查語法結果,如下:
alert(String.fromCharCode(88,83,83)) 的 token 序列符合 ECMAScript2017 標准
四
語義判斷
目標是在語法解析成功的基礎上,判斷其危害程度,最終根據危害程度,給出評級。
當然前面是最簡單情形的分析,這里已經略過了 HTML Entity編碼、空白字符繞過、半開閉處理問題、svg 特殊處理、HTML attribute parsing 等一堆頭痛的問題,相信做過 XSS 檢測的人都會感同身受。
實測效果
基於這樣的原理,雷池(SafeLine)對於XSS的檢測更加智能,方便使用,無需對規則進行維護,檢測時間不再冗長,誤報率、漏報率不再居高不下,能夠有效攔截0day攻擊。
以下為XSS語義分析引擎針對不同XSS語句進行檢測的實際效果:
普通XSS:
文藝XSS:
二逼XSS:
CSS Expression:
混淆繞過:
注釋繞過:
再來一波表情:
可以看到,無論XSS語句穿着怎樣的外衣,被包裹得有多隱蔽,通過對語義的精准分析都可以判斷出其具有攻擊性。
杜絕誤報:
有興趣的同學可以把上面這兩句話扔給傳統的基於規則的防護WAF,看看會不會被誤攔。
此外在我們已經部署的客戶中,經常能發現直接傳整段 HTML 的情況,很難說這里面有多少 XSS 會發生,而語義檢測是在 XSS 發生前找到所有這些 HTML 傳遞情況,所以能在攻擊發生之前就辨別出攻擊行為,從而進行有效攔截。
長亭雷池(SafeLine)防護系統中的XSS注入檢測模塊能檢測出分別存在於鏈接中、CSS中、事件中、特定屬性內、特定標簽內部、外部js導致、js的XSS攻擊,還支持對包括但不限於IE、Chrome、Firefox、Safari在內的特定瀏覽器的繞過方式的檢測。
歡迎大家直接到長亭線上 Demo 體驗更多效果:
https://xsschop.chaitin.cn/demo/
Tips:亦可點擊“閱讀原文”進入
除XSSChop之外,雷池(SafeLine)防護系統的智能威脅識別引擎還包含SQLChop、PHPChop、JAVAChop等基於語法詞法分析的無規則子引擎以及規則子引擎,不但能夠檢測復雜的Web應用攻擊,更能夠識別未知的安全威脅和攻擊。
此外,雷池(SafeLine)集成了長亭雲巡檢系統,對系統內部的漏洞進行實時的檢查。一旦在后續持續跟進監控中發現漏洞,長亭雲將在第一時間將結果通過微信、郵件等多種方式發送給用戶,7×24小時保護企業安全。
歡迎掃描二維碼申請試用~