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>
0 Comments.