mod_security

mod_security を epelリポジトリ から yum install

[root@localhost ~]# yum -y --enablerepo=epel install mod_security
Installed:
mod_security.i386 0:2.5.12-1.el5

Dependency Installed:
lua.i386 0:5.1.4-4.el5

Complete!

extra ディレクトリ掘り、httpd-modsecurity.conf 追記(httpd.conf)

[root@localhost ~]# mkdir /etc/httpd/conf/extra
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
[root@localhost ~]# tail /etc/httpd/conf/httpd.conf
Include /etc/httpd/conf/extra/httpd-modsecurity.conf
[root@localhost ~]#

subversion install, crs(core rule set) download

[root@localhost ~]# mkdir /opt/modsecurity
[root@localhost ~]# cd /opt/modsecurity/
[root@localhost modsecurity]# mkdir crs

[root@localhost modsecurity]# yum -y install subversion
Category:OWASP ModSecurity Core Rule Set Project - OWASPより
[root@localhost modsecurity]# svn co https://mod-security.svn.sourceforge.net/svnroot/mod-security/crs/trunk crs
A crs/optional_rules
A crs/optional_rules/modsecurity_crs_46_av_scanning.conf
A crs/optional_rules/modsecurity_crs_16_session_hijacking.conf
[中略]
A crs/activated_rules
リビジョン 1796 をチェックアウトしました。

「ModSecurity」用の設定ファイル(httpd-modsecurity.conf)作成

[root@localhost modsecurity]# vi /etc/httpd/conf/extra/httpd-modsecurity.conf
[root@localhost modsecurity]# cat /etc/httpd/conf/extra/httpd-modsecurity.conf
LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua-5.1.so
Include /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf
Include /opt/modsecurity/crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf
[root@localhost modsecurity]#

Apache 起動

[root@localhost modsecurity]# /etc/init.d/httpd start
httpd を起動中: [ OK ]
[root@localhost modsecurity]#

「ModSecurity」が出力するログファイルを事前に作成しておきます。

[root@localhost modsecurity]# touch /var/log/httpd/modsec_audit.log
[root@localhost modsecurity]# touch /var/log/httpd/modsec_debug.log

ログファイルの、ログ管理の設定

[root@localhost modsecurity]# vi /etc/logrotate.d/httpd
[root@localhost modsecurity]# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}

/var/log/httpd/modsec_audit.log /var/log/httpd/modsec_debug.log {
weekly
compress
rotate 5
create 600 httpd httpd
missingok
postrotate
/bin/kill -usr1 `cat /var/log/httpd/httpd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
[root@localhost modsecurity]#
[root@localhost modsecurity]# /etc/init.d/crond restart
crond を停止中: [ OK ]
crond を起動中: [ OK ]
[root@localhost modsecurity]#

検証
「ModSecurity 」の設定ファイル(mod_security_crs_10.config.conf)を下記に変更し、「Apache」を再起動します。

SecRuleEngine On

SecRuleEngine DetectionOnly

この設定を行うことで、「ModSecurity」は実際に遮断せず検知のみを行います。

パターンファイルが有効になっているか確認するため、ブラウザから
「ModSecurity」をインストールしたウェブサーバに対して、以下のURL でアクセスします。こ
のアクセスにおいて、パラメータ「id」に「SQL インジェクション」の脆弱性を悪用した場合に
含まれる「and 1=1;--」という文字列を設定しています。この文字列は(3)で設置した検出パタ
ーンファイルで検知できるものです。

http://ウェブサーバのIP アドレス/example.html?id=and 1=1;--

上記のようなアクセスを行うと、「ModSecurity」は「SQL インジェクション」の脆弱性を悪
用した攻撃と判定して、ログを出力します。「ModSecurity」の初期設定では、ログは下記のログ
ファイルに記録されます。このログファイルにて、「and 1=1;--」が検知できているか確認します。

[Sat Jun 11 17:26:48 2011] [error] [client x.x.x.x] ModSecurity: Warning. Operator LT matched 20 at TX:inbound_anomaly_score. [file "/etc/httpd/modsecurity.d/base_rules/modsecurity_crs_60_correlation.conf"] [line "31"] [msg "Inbound Anomaly Score (Total Inbound Score: 5, SQLi=, XSS=): Host header is a numeric IP address"] [hostname "x.x.x.x"] [uri "/favicon.ico"] [unique_id "co6n5n8AAAEAAA25CToAAAAB"]
[root@localhost modsecurity]#