XSS語義分析


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

長亭安全課堂 2017-11-01
 

長亭雷池(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 檢測做好非!常!難!

 

對不起,現在才讓你了解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 語義檢測同樣是如下圖四個步驟:

 

 

對不起,現在才讓你了解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))"

 

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

 

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:

 

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

 

二逼XSS:

 

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

 

CSS Expression:

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

 

混淆繞過:

 

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

 

 

注釋繞過:

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

 

再來一波表情:

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

 

可以看到,無論XSS語句穿着怎樣的外衣,被包裹得有多隱蔽,通過對語義的精准分析都可以判斷出其具有攻擊性。

 

杜絕誤報:

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

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

 

對不起,現在才讓你了解XSS語義分析! 有興趣的同學可以把上面這兩句話扔給傳統的基於規則的防護WAF,看看會不會被誤攔。對不起,現在才讓你了解XSS語義分析!

 

 

此外在我們已經部署的客戶中,經常能發現直接傳整段 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小時保護企業安全。

 

歡迎掃描二維碼申請試用~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM