201501281210Apache 阻擋路徑攻擊 ../../etc/passwd - Insecure Direct Object Reference - 使用 mod_security

被前一篇所說的「原來這麼簡單就...」驚恐到,原來我也是無知的管理者...Orz...。問題出現就要解決,於是參考「就是資安 Simply Security」大所說的 mod_security 解決方法,來避免被放上惡意的程式片段,並且洩漏了系統的相關資訊。

前因:只要系統裡存在一小段程式(2行 php code),使用者就可以透過這程式來瀏覽系統內的檔案,並且觀看裡頭的內容。

解決方法:使用 mod_security 來強化 apache 的檢查資訊安全能力。

安裝方式:
sudo apxs -i -a -c mod_unique_id.c     // 安裝 mod_security 需要 mod_unique_id ,安裝方式請參考:http://blog.xuite.net/tolarku/blog/302215098 
sudo yum install -y mod_security        // 以 yum 套件方式安裝

安裝好之後,其檢驗規則的路徑在「/etc/httpd/modsecurity.d/activated_rules/」 預設裡頭沒有任何檔案 conf & data,設定檔的副檔名需要為  xx.conf

假設你要阻擋 Request URI 裡頭包含了 passwd 這個關鍵字,並且給予 Forbidden 的錯誤訊息,你可以在 xx.conf 裡使用底下這一行

sudo vi /etc/httpd/modsecurity.d/activated_rules/deny.conf
SecRule REQUEST_URI "passwd" "phase:1,t:urlDecode,log,deny,status:403,id:1001" 

然後重新載入 apache 的設定檔

sudo service httpd reload  或是  sudo service httpd restart

這樣當有人使用 http://your_domain_or_ip/test.php?path=/etc/passwd 就會出現 403 forbidden 訊息,當然要顯示 404 或是 500 就隨你改囉~

在系統記錄裡也會留下一筆 /var/log/httpd/error_log 錯誤記錄

[Wed Jan 28 12:05:34 2015] [error] [client 140.112.1.1] ModSecurity: Access denied with code 403 (phase 1). Pattern match "passwd" at REQUEST_URI. [file "/etc/httpd/modsecurity.d/activated_rules/deny.conf"] [line "1"] [id "1001"] [hostname "140.114.1.1"] [uri "/jerry.php"] [unique_id "VMhgDox@A24AAD4XGP8AAAAA"]

-----------------------------------------------------------------------

學會了基本阻擋的機制,你會說網路攻擊那麼多種,我哪會知道該用何種 pattern 來阻擋呢?

所幸 SpiderLabs 提供了很多樣式的阻擋模式,可以連接到「https://github.com/SpiderLabs/owasp-modsecurity-crs/」去觀看,或直接下載 https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip 

mkdir ~/tmp ; cd tmp; 
wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip
unzip master.zip

解壓縮之後,SpiderLabs-owasp-modsecurity-crs-ebe8790 目錄下有 4 個子資料夾「base_rules、experimental_rules、optional_rules、slr_rules」

base_rules:generic_attacks、outbound_malware、bad_robot、sql_injection_attack....等通用基本的  rule。
experimental_rules:proxy_abuse、dos_protection、brute_force、bayes_analysis....等
optional_rules:有 session_hijacking、username_tracking、header tagging、csrf_protection ....等
slr_rules:裡有針對 phpbb、joomla、xss、wordpress、sqli ... 等特定套件做防範的 pattern

有些阻擋模式所載入的 xx1.conf 會搭配使用 xx1.data,像 modsecurity_crs_40_generic_attacks.conf 就另有一個 modsecurity_40_generic_attacks.data 檔,裡頭記錄了一些駭客可能會使用的系統指令與可能有問題不應該存取的關鍵字

把 modsecurity_40_generic_attacks.conf 與 modsecurity_40_generic_attacks.data  放到 /etc/httpd/modsecurity.d/activated_rules/ 目錄下,並且重新載入httpd 就可以讓你的 apache web server 具有基本的安全防護了

sudo cp owasp-modsecurity-crs-master/base_rules/modsecurity_crs_40_generic_attacks.conf  /etc/httpd/modsecurity.d/activated_rules/
sudo cp owasp-modsecurity-crs-master/base_rules/modsecurity_40_generic_attacks.data  /etc/httpd/modsecurity.d/activated_rules/
sudo cp owasp-modsecurity-crs-master/base_rules/modsecurity_crs_45_trojans.conf  /etc/httpd/modsecurity.d/activated_rules/
sudo servuce httpd reload

但是...............

資料檔案 modsecurity_40_generic_attacks.data  裡頭定義了許多關鍵字,其限制範圍會不會太嚴謹或是太寬鬆,這必須配合貴單位的 web server 真實的使用情況
set-cookie
.cookie
expiressys.user_objects
sys.user_triggers
@@spid
msysaces
instr
sys.user_views
mysql.
sys.tab

就跟導入 WAF 一樣,必須仔細的慢慢調整,務使系統能正常運作,又能抵擋外來的攻擊,不然一個簡單的關鍵字可能就會讓你的網站,無法正常的運作。

Reference:
http://cyrilwang.blogspot.tw/2014/01/apache-modsecurity.html
https://github.com/SpiderLabs/owasp-modsecurity-crs/
http://www.netadmin.com.tw/article_content.aspx?sn=1402240001&jump=3


~End

回應
Google Search
Google
累積 | 今日
loading......
平均分數:0 顆星
投票人數:0
我要評分:
Google