現今的資安問題,其實有很大的問題都發生在網站上面,網站程式若沒有開發好就有可能遭到駭客入侵與攻擊

而網路上的使用者若不小心瀏覽了被駭的網站,也是有可能在不知覺的情況發生中毒或資料遭竊取

網站程式應該如何被檢核呢?簡單來說可分為黑箱 ( 實際模擬駭客攻擊行為 ) 或白箱 ( 檢核原始碼 ) 測試,詳細的資訊可以參考 iThome 這一篇靜態程式碼安全性檢核說明

若對資安有些了解的朋友,針對 WAF ( Web Application Firewall ) 這個字眼應該不會很陌生,在程式尚未改寫已知的漏洞時,這時 WAF 就可以跳出來幫忙擋一下了

不過還是要說,利用 WAF 來擋並不是治本的方法,它只是能就所知的攻擊手法進行防護,程式有哪些 Bug 還是得花時間改寫才能夠確保沒問題

而市面上其實也是有一些 Commercial WAF,不過就是得花$$買,這篇教學是用免錢的方式直接在 Web Server 上架起 WAF 的防護功能

以我的 FreeBSD 環境來說,利用 Ports 就可以很輕易的將 ModSecurity 安裝起來

# cd /usr/ports/www/mod_security
# make install clean

裝好之後來去將設定檔放上去 Apache 裡的 httpd.conf

# cd /usr/local/etc/apache22
# vi httpd.conf

加入下面幾行

# 載入 mod_security
LoadModule security2_module libexec/apache22/mod_security2.so
Include /usr/local/etc/modsecurity.conf

# 將自己假裝成 IIS,等等測試用
<IfModule mod_security2.c>
SecServerSignature "Microsoft-IIS/5.0"
</IfModule>

接下來去產生 modsecurity.conf

# cd /usr/local/etc/
# cp modsecurity.conf-example modsecurity.conf

modsecurity.conf 產生出來之後,可以去做一些適度的修改,以下是我有改的地方

SecRuleEngine DetectionOnly
SecAuditLog /var/log/mod_security/modsec_audit.log
SecDebugLog /var/log/mod_security/modsec_debug.log

好了之後重新啟動 Apache 即可,至於要改 modsecurity 有沒有生效呢?可以透過剛才我們加入假裝成 IIS 的設定來檢驗

# telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get http:1.1 / (輸入左邊的指令)

HTTP/1.1 400 Bad Request
Date: Thu, 24 Jan 2013 07:31:43 GMT
Server: Microsoft-IIS/5.0
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
Connection closed by foreign host.

到這邊就算安裝完成了,接下來要來設定一些常用的 Rule,在 ModSecurity 的網站上有提供二個版本

一個是 OWASP ModSecurity Core Rule Set ,這是不用錢的,而另一個是 Commercial Rules ,能擋的東西就不少了

本篇的教學既然是以免費的為主,那當然是用 OWASP ModSecurity Core Rule Set 來設定囉 ~~ 先下載 Core Rule Set 設定檔並解開到 Apache 的目錄底下

# cd /tmp
# tar -zxvf SpiderLabs-owasp-modsecurity-crs-2.2.7-0-ga77c1a1.tar.gz
# mv SpiderLabs-owasp-modsecurity-crs-a77c1a1 /usr/local/etc/apache22/Includes/crs

接下來我們要將要啟用的規則與設定都 copy 過去 activated_rules 目錄

# cd /usr/local/etc/apache22/Includes/crs
# cp modsecurity_crs_10_setup.conf.example activated_rules/modsecurity_crs_10_setup.conf
# cd activated_rules
# cp ../base_rules/* .
# cp ../optional_rules/* .

這時再回頭去改一下 Apache 的 httpd.conf 的設定,改這下面這樣

<IfModule mod_security2.c>
SecServerSignature "Microsoft-IIS/5.0"
Include "/usr/local/etc/apache22/Includes/crs/activated_rules/*.conf"
</IfModule>

接下來重新啟動一下 Apache,不過此時會發現一直啟動不了,會有 Error 訊息如下

Syntax error on line 52 of /usr/local/etc/apache22/Includes/crs-bak/activated_rules/modsecurity_crs_20_protocol_violations.conf: Error parsing actions: Unknown action: ver

原因在這裡可以看到,因為目前我在 Ports 安裝的 ModSecurity 是 2.6.6 版,而下載回來的 Core Rule Set 是 for 2.7.0 用的,因為版本不相容的關係所以會無法使用

所以請重新下載舊版的即可,從這邊就可以下載了,再重新啟動一次 Apache ~~ 大功告成!

[1] ModSecurity

[2] 以 ModSecurity 實作 Webapp Firewall

[3] How to install apache2 mod_security and mod_evasive on Ubuntu 12.04 LTS server

arrow
arrow
    全站熱搜

    Bojack 發表在 痞客邦 留言(0) 人氣()