開源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錯誤。
開源WAF(mod_security)的搭建和分析