基于追蹤標記的WAF設計思路
一、相關背景
目前,市面上的WAF產品通常采用”發現即阻斷“的策略,以防護針對業務系統的Web攻擊行為。雖然該策略可及時阻斷攻擊,但形式上過于簡單,并不能有效掌握攻擊者進一步的攻擊意圖,也不能有效提高攻擊者的成本投入。本文借鑒蜜罐的思想,構思一種融合欺騙技術的WAF系統,目的是為現有WAF提供一種設計思路。相對于傳統WAF,本文所述WAF不僅具有傳統WAF的功能,同時可識別并追蹤攻擊者。
如圖1所示,WAF系統以串聯方式部署在業務系統的前面,用于對來自互聯網的流量進行檢測:當發現客戶請求為正常流量時,則將其轉發給業務服務區部署的“真實業務系統”,從而為正常用戶提供所需的互聯網服務;當發現客戶請求為惡意流量時,則會對攻擊源進行唯一性標記,并把該客戶端的流量通過NGINX集群牽引到鏡像服務區部署的“鏡像業務系統”。
圖1 WAF部署模式和運行流程
1.業務服務區:部署有“真實業務系統”,用于處理正常用戶的訪問請求。如果“潛在攻擊者”不對系統發起攻擊,那么其訪問請求會被轉發到真實的業務服務區。只是一旦其發起攻擊行為,便會被WAF標記為“攻擊源”,并進行唯一性標記,那么其當前、及后續訪問請求都會被牽引到鏡像服務區。由于“鏡像業務系統”的前端展示和業務功能與“真實業務系統”沒有區別,所以整個牽引過程對攻擊者是無感的。
2.鏡像服務區:部署有“鏡像業務系統”,用于處理攻擊者的訪問請求。如前所述,該系統的前端展示和業務功能與“真實業務系統”沒有區別,在使用過程中很難區分,同時做了數據脫敏處理、偽造了一些常見漏洞點。此外,為了防止攻擊者在獲取鏡像服務區的機器權限后,以此為跳板,對業務服務區發起攻擊,部署時要求鏡像服務區與業務服務區需完全隔離,最好是物理層面的隔離。
3.欺騙服務區:部署有各種“欺騙性系統”,用于引誘黑客在內網橫行滲透過程中的攻擊。“欺騙服務區”本質是一個蜜網,其目的是為了更長時間的浪費攻擊者的時間與精力,更多的掌握攻擊者的行為、手段、技能,更大程度上使攻擊者漏出馬腳、從而溯源其身份。比如:在數據庫中存儲一些偽造的、帶有標記性特征的“高價值客戶數據”,一旦被攻擊者拿到并在網上售賣,則可對攻擊者做進一步的溯源;在系統中放置一些偽造的、帶有木馬功能的“敏感文件”,一旦被攻擊者拖回并打開,則可反向控制攻擊者的客戶端。
備注:鏡像服務區、欺騙服務區可部署在阿里云、騰訊云等公有云平臺上(或者其它隔離環境),本地IDC通過NGINX集群將識別到的攻擊流量轉發到這些區域。
二、系統設計
本文所述WAF的核心功能包括五個模塊,分別是:流量檢測模塊、終端標記模塊、流量分發模塊、漏洞配置模塊、指紋采集模塊。(只是個人想法,可根據實際擴展)
圖2 WAF概要設計和核心模塊
1.流量檢測模塊:不僅具備常規WAF的通用功能,如:SQL注入檢測、XSS漏洞檢測、代碼執行檢測、文件上傳檢測等,同時還具備“攻擊源標記查驗”功能,目的是判斷請求流量中是否帶有“終端標記模塊”下發的攻擊源標記字段。如果請求流量中帶有攻擊源標記字段, 表明該請求是“已被標記為攻擊源”的客戶端發起的,則直接將該請求經NGINX集群牽引至“鏡像業務系統”;如果請求流量中沒有攻擊源標記,表明該請求是正常的客戶端發起的,則會繼續判斷是否帶有攻擊特征。
2.終端標記模塊:用于對發起惡意請求的客戶端進行標記。當流量檢測模塊發現當前請求為惡意請求時,便會調用終端標記模塊在HTTP響應包中插入標記字段,以對發起該請求的客戶端進行唯一性標記。其中,插入標記字段的功能是通過set-cookie實現的,該特征字符串會反向到達、并存儲在攻擊者的瀏覽器中。由于該cookie值的過期時間設置為永久,因此只要不手動清除,瀏覽器隨后訪問目標網站的所有請求都會帶上該字段。(格式: trackid=32位隨機字符串,形如:trackid =92f4ac47-527b-11eb-ba1b-f45c89c42263)
3.流量分發模塊:用于根據“流量檢測模塊”的判定結果信息、以及WAF系統中配置的路由信息,將訪問請求分發到“真實業務系統”或“鏡像業務系統”。其中,如果是“已知攻擊源發起的請求”或“某客戶端初次發起的惡意請求”,則將其經NGINX集群牽引到“鏡像業務系統”;如果是 “正常客戶端發起的請求”,則將其牽引到“真實業務系統”。對客戶端而言,整個過程是完全透明的,且需要攻擊者通過瀏覽器發起請求。
4.漏洞配置模塊:用于在“鏡像業務系統中”中以“插件化”形式配置偽造的漏洞點,目的就是讓黑客發現并對其攻擊。其中,在部署漏洞前,可通過虛擬機鏡像手段將業務系統從“業務服務區”克隆到了“鏡像服務區”,并做好數據脫敏工作。在配置漏洞點的時候,漏洞配置模塊可將事先構建好的漏洞文件下發到“鏡像業務系統”服務器。(該功能可作為WAF的一部分,或者獨立于WAF部署)
5.指紋采集模塊:用于采集攻擊者的客戶端設備指紋信息,攻擊者的第三方平臺賬號、鍵盤記錄、訪問過的網站等信息。其中,整個過程是通過在“鏡像業務系統”的返回頁面中插入溯源腳步(JavaScript代碼)實現的。當溯源腳本反向到達攻擊源客戶端、并被瀏覽器解析執行后,便會將相關的指紋信息回送給WAF系統。其中,采集信息的豐富度一定程度上依賴于攻擊者的操作。
三、運行流程
WAF在對互聯網邊界流量處理的過程,其主要流程如圖3所示,具體步驟如下:
圖3 WAF對網絡流量處理流程
1.基于“流量檢測模塊”查驗流量中是否帶有“攻擊源標記”。如果沒有,則進入步驟2;如果有,則表明當前請求是已被標記為攻擊源的客戶端發起的,則跳轉到步驟4。
2.基于“流量檢測模塊”檢測流量中是否帶有攻擊行為特征。如果沒有,則表明當前請求是正常用戶發起的,則跳轉至步驟5;如果有,則進入步驟3。
3.基于“終端標記模塊”對當前網絡請求進行標記,并在對應的響應報文中通過set-cookie的方式插入攻擊源標記字符串。
4.基于“流量分發模塊”模塊將網絡流量轉發至“鏡像業務系統”。其中,該步驟處理的流量為“已知攻擊源”與“新的攻擊源”發起的網絡請求。
5.基于“流量分發模塊”模塊將網絡流量轉發至“真實業務系統”。其中,該步驟處理的流量為正常用戶使用的客戶端發起的網絡請求。備注:對于攻擊源而言,一旦被WAF標記,其當前請求以及后續發起的網絡請求,無論是否帶有惡意特征,都會被轉發到“鏡像業務系統”。
四、總結歸納
整體而言,本文所述WAF從“潛在攻擊識別、溯源取證分析"等方面彌補了傳統WAF的不足,即保護了業務系統的安全性,又具備一定的溯源取證的能力。其優點在于:
1.可以避免攻擊者對業務系統的潛在攻擊:當識別到攻擊流量后,WAF可基于“終端標記模塊”對攻擊源進行唯一性標記,進而將同一攻擊源的當前流量、以及后續流量牽引到“鏡像業務系統”,從而避免攻擊者對真實業務系統的潛在攻擊行為。
2.可消耗攻擊者的時間以及攻擊者的精力:無論何種目的、何種手段,所有的攻擊行為都是需要投入時間和精力的。由于攻擊行為被識別、牽引到了“鏡像業務系統”,使得攻擊者將時間、精力消耗在對“鏡像業務系統”的攻擊上,因此整個攻擊過程對真實的業務系統是無效的,相對降低了黑客的有效攻擊成果。
備注:本文所描述的思路需要一定的先驗條件,即:攻擊者使用瀏覽器(或配合Burp)對目標系統進行測試(目的是在Cookie中設置追蹤ID)。除了基于追蹤ID來判斷請求是否由攻擊者發起之外,也可基于“時間、源IP、目標IP”的方式進行判斷,這樣就不用考慮是否使用瀏覽器的問題了,只是有一定的誤報。當然,沒有一種技術是完美的,本文只是描述一種Web防護的思路。