mod_security と ModSecurity_Core_Rule の導入

mod_securityをアップデートしたら色々とひどい目にあったのでメモしておきます。

リポジトリ”Atomic”が必要となるので事前に導入しておいてください。
新規インストールする人はmod_securityをインストールします
# yum –enablerepo=atomic install mod_security

アップデートの場合、古いModSecurity_Core_Rule(1系)を使用しているとid周りの書式が違うらしくエラーを吐きます
そのためにApacheを再起動する前に設定ファイルの文法エラーがないか必ず確認しておいてください
# service httpd configtest

ModSecurity_Core_Ruleをダウンロードして下さい
# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master
ダウンロードしたファイルを展開します
# tar zxvf master
ディレクトリ名を変更します
# mv SpiderLabs-owasp-modsecurity-crs-9a715d8 modsecurity.d

念のためApacheの設定ファイル関連を一式バックアップします。
# cp /etc/httpd /etc/httpd_backup

ModSecurity_Core_Ruleをインストールします
# mv modsecurity.d /etc/httpd/
設定ファイルのテンプレートをコピーします
# cp /etc/httpd/modsecurity.d/modsecurity_crs_10_setup.conf.example\
/etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf

ModSecurity_Core_Ruleを設定します
# vi /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf
下記の項目を設定します。項目がない場合は自分で記述します。

SecAuditEngine RelevantOnly
SecRuleEngine On

SecAuditLogType Serial
SecAuditLog logs/audit_log

#SecDefaultAction "phase:1,deny,log"
SecDefaultAction "phase:2,log,deny,status:406"

mod_securityの設定を確認します
# vi /etc/httpd/conf.d/00_mod_security.conf
多分、デフォルトでは下記の様になっているとおもいます。

# ASL mod_security Template: /var/asl/data/templates/template-00_mod_security.conf
#
LoadModule security2_module modules/mod_security2.so
LoadModule unique_id_module modules/mod_unique_id.so
#
<IfModule mod_security2.c>
        # Basic configuration goes in here
        Include modsecurity.d/tortix_waf.conf

        # Rule management is handled by ASL
        Include modsecurity.d/00*exclude.conf
        Include modsecurity.d/*asl*.conf
        Include modsecurity.d/99*exclude.conf

</IfModule>

これを下記のように書き換えます。
※ Include modsecurity.d/base_rules/*.conf の部分は各自の用途に合わせて設定してください。ちなみに全部読むと多分エライことになると思います。

# Debug Log.
SecDebugLog logs/modsec_debug_log
SecDebugLogLevel 1

# Log File.
#SecAuditEngine On
#SecAuditEngine RelevantOnly
#SecAuditLog logs/mod_security_audit_log
#SecAuditLogType Serial
LogFormat "%V %h %t %{UNIQUE_ID}e \"%r\" %>s %X | %I %O | %<{mod_security-time1}n %<{mod_security-time2}n %<{mod_security-time3}n %D" mperformance
CustomLog logs/modsec_performance_log mperformance

# ASL mod_security Template: /var/asl/data/templates/template-00_mod_security.conf
#
LoadModule security2_module modules/mod_security2.so
LoadModule unique_id_module modules/mod_unique_id.so
#
<IfModule mod_security2.c>
        # Basic configuration goes in here
        #Include modsecurity.d/tortix_waf.conf
        Include modsecurity.d/modsecurity_crs_10_config.conf

        Include modsecurity.d/base_rules/*.conf

        # Rule management is handled by ASL
        Include modsecurity.d/00*exclude.conf
        Include modsecurity.d/*asl*.conf
        Include modsecurity.d/99*exclude.conf

</IfModule>

なお、2バイト文字を含むデータを渡すと”modsecurity_crs_40_generic_attacks.conf”内に定義されている”Heuristic Checks”の”Repeatative Non-Word Chars”に引っかり406エラーを返すため下記のようにコメントアウトします。
# vi /etc/httpd/modsecurity.d/base_rules/modsecurity_crs_40_generic_attacks.conf

#
# -=[ Heuristic Checks ]=-
#
# [ Repeatative Non-Word Chars ]
#
# This rule attempts to identify when multiple (4 or more) non-word characters are repeated in sequence
#
#SecRule ARGS "\W{4,}" "phase:2,capture,t:none,t:urlDecodeUni,block,id:'960024',rev:'2',ver:'OWASP_CRS/2.2.7',maturity:'9',accuracy:'8',msg:'Meta-Character Anomaly Detection Alert - Repetative Non-Word Characters',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',setvar:tx.anomaly_score=+%{tx.warning_anomaly_score},setvar:'tx.msg=%{rule.msg}',setvar:tx.%{rule.id}-OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%{tx.0}"

これまでの設定の文法が正しいか確認します
# service httpd configtest
問題がなければmod_securityを有効化するためApacheを再起動します
# service httpd restart

下記のようなURLへアクセスするとこで406エラーが出れ正常に動作している事が確認できます。
ディレクトリトラバーサル攻撃
http://サーバのURL/index.html?q=/etc/passwd
ヌルバイト攻撃
http://サーバのURL/index.html?q=./%00
OSコマンドインジェクション攻撃
http://サーバのURL/index.html?p=|traceroute
SQLコマンドインジェクション攻撃
http://サーバのURL/index.html?p=2%20order%20by%201
クロスサイトスクリプティング攻撃
http://サーバのURL/index.html?q=<script>alert(0)</script>

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(Spamcheck Enabled)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)