開源WAF(mod_security)的搭建和分析
背景
最近需要測試關於waf的工具,要知道waf是怎麼回事,必須搭建waf環境,同時才能看懂關於繞過waf的一些技術。
OWASP ModSecurity核心規則集(CRS)是一組用於ModSecurity或相容的Web應用程式防火牆的通用攻擊檢測規則。CRS旨在保護Web應用程式免受各種攻擊,包括OWASP十大攻擊,並提供最少的虛假警報。
專案地址: https://github.com/SpiderLabs/owasp-modsecurity-crs
因為經常使用kali,因此環境全是在kali上面搭建,也不會再重新下載別的系統。
版本
~# cat /proc/version
Linux version 4.19.0-kali3-amd64 ([email protected]) (gcc version 8.2.0 (Debian 8.2.0-16)) #1 SMP Debian 4.19.20-1kali1 (2019-02-14)
安裝modsecurity
apt-get install modsecurity-crs
它會自動載入相關元件
配置modsecurity
修改/etc/modsecurity/下的modsecurity.conf
mv /etc/modsecurity/modsecurity.conf-recommended modsecurity.conf
將檔案中
SecRuleEngine DetectionOnly修改為SecRuleEngine On
測試SQL注入
在上面的配置啟用之前也就是預設是僅檢測( DetectionOnly ),我們先來看看效果
使用DVWA中sql注入測試即可,可看到存在sql注入
啟用 安全規則引擎SecRuleEngine (SecRuleEngine On)之後,需重啟apache2
顯示403 Forbidden錯誤,可見waf已經生效。
工作原理
我們回過頭分析下它的一個配置
1.首先我們安裝了modsecurity-crs,它會自動安裝apache2的庫
跟進這個檔案,我們看到它包含了剛才我們配置的檔案,並且和它自己的安裝目錄
跟進安裝目錄,又包含了owasp-crs.load這個檔案
繼續跟進這個owasp-crs.load檔案,它包含了自己目錄下rules下的所有檔案
規則檔案
由此可以看出: 規則檔案一共有如下幾類
1. request 請求
2. response 響應
3.錯誤 有iis的 java的php的
4.掃描類 sannner
5.unix-shell類,也就是木馬類
我們重新梳理下剛才的邏輯,也就是呼叫過程:
首選我們發了一個sql注入的請求給apache2 ,apach2發現庫中又引用security2.conf這個配置,於是呼叫所有與mod-security相關的規則集。最後經過一些列處理,返回了403錯誤,這個mod-security就這樣被呼叫起來了。
規則分析
我們開啟apache2的日誌目錄,在/var/log/apach2下
發現存在一個mod-security的日誌,這個就是waf審計的日誌,它記錄了了所有攻擊日誌
我們發起一個sql注入探測攻擊之後,本應該返回給我們一個You have an error in your SQL syntax; check the manual tha…….等等的sql查詢錯誤的,為什麼返回給我們一個403呢
我們跟進下面的Pattern match,意思就是,它匹配到了如下規則目錄中的一些資訊
我們可以看到好多Pattern match,開啟其中一個response的規則
根據顯示第373行,我們開啟該規則檔案中的373行
可見,正是匹配到了該響應,它是由多個分隔符形成的,也就是它匹配到了規則其中的一個分隔符中的資料,所以才認為這是一個攻擊行為。
看了幾個規則檔案和命名之後,至此,我們大概知道了它的一個檢測過程,至少分為以下3步
1.它首先會去檢測請求頭Request-Headers
2.它會去檢測請求Request
3.檢測響應response
如果以上三步都沒有問題,那麼會認為這是一個正常訪問,而非攻擊,只要其中有一個匹配上,那麼它將會返回403錯誤。