動態防禦WAF技術原理及編程實戰

本文帶給大家的內容是動態防禦WAF的技術原理及編程實戰。

將通過介紹ShareWAF的核心技術點,向大家展示動態防禦的優勢、實現思路,並以編程實戰的方式向大家展示如何在WAF產品開發過程中應用動態防禦技術。

動態防禦WAF技術原理及編程實戰

ShareWAF是一款動態防禦型WAF產品,其在反自動化攻擊、反爬蟲等領域應用了動態防禦技術。

相比於傳統WAF,動態防禦型的WAF,有非常顯著的優勢:

【動態防禦優勢、原理】

概括而言,優勢體現為兩個詞:主動防禦、不可預見

傳統WAF,是靜待攻擊來臨、識別攻擊,再抵禦攻擊。

應用動態防禦技術後,WAF將逆轉攻防模式:不再被動,而是時刻處於主動出擊、積極防護狀態。

舉個例子:

假如打開一扇門:

傳統WAF狀態下,門後的景象總是一樣的。

如果是動態防禦WAF,每次打開門看到的將是不同的景色,可能是草原、可能是麥田。即:隨機變化 、不可預測。

動態防禦WAF技術原理及編程實戰

動態防禦WAF技術原理及編程實戰

再舉個例子:

比如射箭:

傳統WAF狀態下,箭靶是固定的。

如果是動態防禦WAF,箭靶將是隨機移動的。即:動態變化,目標不可預測。

動態防禦WAF技術原理及編程實戰

動態防禦WAF技術原理及編程實戰

具體到WAF產品中。

比如反暴力破解,傳統WAF可能採用一套規則,例如:訪問者IP或設備指紋+持續登錄行為+連續嘗試登錄次數+登錄失敗次數,通過規則判斷是否屬於暴力破解行為。

這是正統的、中規中矩的防衛理念,是被動式的。

在這個進程中,攻擊者是可以發起持續攻擊的。而且,攻擊者可以通過使用代理、修改設備特徵等方式,規避WAF規則,嘗試對WAF進行Bypass。

動態防禦WAF技術原理及編程實戰

而如果是動態防禦

以ShareWAF為例,在對抗暴力破解這一功能點上,採取的方式是完全不同的:

ShareWAF會對被破解的某個關鍵點,進行動態封裝,比如:用戶名。

具體而言:保護前,用戶名在網頁中經常是username之類的固定元素名稱。暴力破解攻擊者會用自動化的工具或腳本,自動對其賦值,然後發起請求、嘗試登錄,反覆進行此操作即是攻擊過程。

ShareWAF會對username進行封裝,而且是動態的,用戶端發起訪問請求得到的將不再是username,每次得到的都是某個隨機數符串。

這樣,自動化的工具或腳本,就無法對關鍵的暴力破解點進行定位、賦值。攻擊行為在前端就被終結。

動態防禦WAF技術原理及編程實戰

ShareWAF的反爬蟲也採用類似的理念。

【動態防禦WAF編程實戰】

前面是理論,接下來是實戰,證明理論的可行性、演示如何在安全編程開發中應用動態防護技術。

將通過例程,分別演示ShareWAF的反自動化攻擊、反爬蟲功能的核心實現。

反自動化攻擊

這裡將通過一個例程,一個最簡單的登錄頁面,模擬ShareWAF如何利用動態防禦技術對暴力破解這類自動化攻擊進行防禦。

登錄頁而的關鍵內容,通常是這樣的:

展現在瀏覽器端是一個簡單的登錄頁,提供用戶名、密碼輸入,並進行登錄。

動態防禦WAF技術原理及編程實戰

攻擊者進行暴力破解時,可能採取的方式是:對username元素進行賦值,併發起登錄;或用Burp Suite等工具攔截數據並修改數據包進行枚舉破解。

這裡且不再談傳統WAF的應對手段,直入主題,看ShareWAF是如何進行動態防禦的。

例程代碼只有幾十行,展示最核心的"動態"概念。

動態防禦WAF技術原理及編程實戰

這是一段NodeJS代碼,實現了一個web服務,其中融入了ShareWAF的動態防禦理念。

代碼功能簡單分析:

重點一:動態變形池,用於存放username和動態變形內容的對應關係;

重點二:在頁面訪問時,進行username元素動態變形、將變形對應關係存儲到變形池,並將變形後的內容發送到瀏覽器端。這一步完成時,瀏覽器端原本一成不變的username元素將在每次訪問或刷新時發生動態變化:

動態防禦WAF技術原理及編程實戰

動態防禦WAF技術原理及編程實戰

留意上方的name值,原本應該是username,而這時隨機變化的字符串,兩張圖中name值是不同的,事實上,每次都是不同的。

假如攻擊者原本採用自動化破解腳本:document.getElementById("username").value="***",這時將失效,因為username不見了,而且不可預見。

Burp Suite之類的數據包嗅探、截取、修改工具也失效了,因為關鍵字段username不見了。

動態防禦的理念即是如此。當然,這並不是全部,只是動態防禦的一小部分應用。

重點三、動態變形過的username當然是需要還原的,否則將影響原有的業務功能。代碼中的"變形池"存放的是username和"變形碼(即:隨機變形的字符串)"對應關係。通過對應關係,可以很輕鬆的還原回username,在WAF功能中,這時該將還原後的數據再轉發給被保護網站,實現正常的業務流程。

如圖:username已被還原:

動態防禦WAF技術原理及編程實戰

反爬蟲

前一個例子是應用了針對內容的動態防禦,在反爬蟲領域,動態防禦又有所不同。

爬蟲有多種類型,下面要講的反爬蟲,準確的是說反內容爬蟲,防止內容被爬取,也可以理解為防止網頁內容被複制。

反內容爬蟲,慣用的一種方式是進行字體加密,即使用自定義字體。

但一般來說,自定義字體反爬容易被破解:攻擊者獲取字體後,很容易進行逆向分析,得出字碼對應邏輯,進而還原出原本內容。ShareWAF的反內容爬蟲,在自定義字體的基礎上,加入了"動態"概念:

使字體成為動態路徑、字體文件不可被下載。

這部分功能的實現,原理與之前類似,同樣是在將數據發往瀏覽器之前先對特定的內容:字體路徑,做動態變化處理,在收到請求時,再還原為原始正確路徑,使文件可讀取。

動態防禦WAF技術原理及編程實戰

有一點特殊之處是:為了防止從網頁源碼中查看字體路徑、下載字體文件,又對"動態"路徑增加了訪問時間限制、使用一次即失效功能。如此,達到了:加載網頁時文件可以正常讀取,但非法獲取文件路徑卻不能打開的目的。

效果展示:

動態防禦WAF技術原理及編程實戰

動態防禦WAF技術原理及編程實戰

在這兩張圖中可以看到:字體路徑是變化的、從瀏覽器打開文件地址,文件不能讀取和下載。

使字體成為動態字體,防止逆向分析。

動態自定義字體技術,在ShareWAF中稱其為:動態字體變碼加密。

如果是傳統的自定義字體加密,相當於一種密碼技術,也類似於傳呼臺數字代碼表:

動態防禦WAF技術原理及編程實戰

動態防禦WAF技術原理及編程實戰

即用某個或某幾個數字,代替某個或某幾個文字。

具體到網頁文字內容加密反爬,是如下的效果:

動態防禦WAF技術原理及編程實戰

動態防禦WAF技術原理及編程實戰

也就是網頁中顯示正常的"文字",但在源碼中實際並不存在,存在的是"文字"對應的密碼字符。

這種文字,是不可複製的,整體複製網頁中的文字時,"密碼文字"部分將會缺失:

動態防禦WAF技術原理及編程實戰

那麼,爬蟲也就無法複製、無法爬取內容。

這種技術的實現依賴於自定義字體,即網頁源碼中的css引入字體文件功能:

動態防禦WAF技術原理及編程實戰

也就是需要引入自定義的字體文件。

自定義字體文件的相關知識不是本文的重點,在此略過。我們的重點是實現"動態自定義自體文件"。

這樣做的原因是:

如果使用一個固定的自定義字體文件,字體和數字的對應關係是可以被分析得出的。如上面:

Ԕ;表示"我",ԕ;表示"你"等等。

為了防止被分析出對應關係,我們需要對字體的加密碼也進行動態處理。

在本例中,提供了一種方法,用於生成新的變碼字體:

動態防禦WAF技術原理及編程實戰

這是運行效果:

動態防禦WAF技術原理及編程實戰

可以看到,出現了新的對應關係,與之前Ԕ;表示"我",ԕ;表示"你"是不同的。

動態防禦WAF技術原理及編程實戰

這樣動態的改變字體編碼,就可以防止文字和數字編碼的對應關係被分析獲取。

以上,便是ShareWAF動態防禦技術在反自動化攻擊、反爬蟲場景中的應用。


分享到:


相關文章: