ModSecurity(mod_security) の Core Rule Set(CRS)を読み解く【その1:global_config, config】
Apache モジュールである ModSecurity*1 の Core Rule Set(CRS)*2となっていた。
- 確認したバージョン
- modsecurity-crs v2.0.2(2009年10月2日現在)
CRS v2.0.2 の tar 玉をダウンロードし展開すると、以下のような構成となっている。解凍したディレクトリ直下にある、modsecurity_crs_10_global_config.conf と modsecurity_crs_10_config.conf の 2 つのファイルが、ModSecurity全体の設定ファイルとなる。この日記では、この 2 つの conf ファイルを ModSecurity Reference Manual*3 を基に読み解いてみる。
# tar xzvf modsecurity-crs_2.0.2.tar.gz # cd modsecurity-crs_2.0.2 # ls -1R .: CHANGELOG LICENSE README base_rules modsecurity_crs_10_config.conf modsecurity_crs_10_global_config.conf optional_rules util ./base_rules: modsecurity_40_generic_attacks.data modsecurity_41_sql_injection_attacks.data modsecurity_46_et_sql_injection.data modsecurity_46_et_web_rules.data modsecurity_50_outbound.data modsecurity_crs_20_protocol_violations.conf modsecurity_crs_21_protocol_anomalies.conf modsecurity_crs_23_request_limits.conf modsecurity_crs_30_http_policy.conf modsecurity_crs_35_bad_robots.conf modsecurity_crs_40_generic_attacks.conf modsecurity_crs_41_phpids_filters.conf modsecurity_crs_41_sql_injection_attacks.conf modsecurity_crs_41_xss_attacks.conf modsecurity_crs_45_trojans.conf modsecurity_crs_46_et_sql_injection.conf modsecurity_crs_46_et_web_rules.conf modsecurity_crs_47_common_exceptions.conf modsecurity_crs_48_local_exceptions.conf modsecurity_crs_49_enforcement.conf modsecurity_crs_50_outbound.conf modsecurity_crs_60_correlation.conf ./optional_rules: modsecurity_crs_20_protocol_violations.conf modsecurity_crs_21_protocol_anomalies.conf modsecurity_crs_40_generic_attacks.conf modsecurity_crs_42_comment_spam.conf modsecurity_crs_42_tight_security.conf modsecurity_crs_55_marketing.conf ./util: httpd-guardian.pl modsec-clamscan.pl runav.pl
modsecurity_crs_10_global_config.conf
ModSecurity 全体に関連する設定が 5 つ定義されていた。ちなみにここでの設定値は CRS の初期値である。
### HTTP レスポンスの Server ヘッダの変更 # 初期値のままだと、Server ヘッダそのものが出力されない # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10BEE SecServerSignature " " ### ModSecurity 検知ルールのシグネチャ(デバック用) # ModSecurity の Audit Log に出力される # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N104DA SecComponentSignature "core ruleset/2.0.2" ### POST リクエストで送信された form データの分割文字の定義 # 通常は「&」なので、特に変更する必要なし # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N101DE SecArgumentSeparator "&" ### initcol アクションで定義したデータの保存ディレクトリの定義 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10566 SecDataDir /tmp ### 必ず実行される Action の定義 # Apache が HTTP リクエストヘッダを読み取った段階で実行される(phase:1) # global, 変数 remote_addr が保存されるらしいが、ドキュメントに大した情報がないな # initcol # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N11847 # SecAction # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N101AD SecAction "phase:1,t:none,pass,nolog,initcol:global=global,initcol:ip=%{remote_addr}"
modsecurity_crs_10_config.conf
詳細なModSecurity に関連する設定が 24 定義されていた。ちなみにここでの設定値は CRS の初期値である。
## -- Configuration ---------------------------------------------------------- ### ModSecurity の Rule エンジンの動作設定 # On = Rule エンジンの有効化 # Off = Rule エンジンの無効化 # DetectionOnly = Rule エンジンの有効化(Request, Response の intercept なし) # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10AD4 SecRuleEngine On ### HTTP リクエスト・ボディ検査設定 # この設定を有効にすることで、Rule にて POST_PAYLOAD、REQUEST_BODY 変数を指定できる # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N107D5 SecRequestBodyAccess On ### HTTP レスポンス・ボディ検査設定 # この設定を有効にすることで、Rule にて RESPONSE_BODY 変数を指定できる # ただし有効にしたとしても、バッファリング対象である、SecResponseBodyMimeType で # 指定した MIME タイプしか、HTTP レスポンス・ボディを検査できない # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N1094B SecResponseBodyAccess On ### バッファリングする HTTP レスポンス の MIME タイプの指定 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N108E4 SecResponseBodyMimeType (null) text/html text/plain text/xml ### バッファリングする HTTP レスポンスの上限バイト値 # この上限値以上の HTTP レスポンスをバッファリングしようとすると、 # SecResponseBodyLimitAction で指定したアクションを実行する模様。 # ハードウェアコーディングにより、上限値は 1GB。 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N1088D SecResponseBodyLimit 524288 ### バッファリング上限値以上の HTTP レスポンスを受信した時の処理 # Reject、ProcessPartial に関して、ドキュメントに大した記述がない。 # SecResponseBodyLimitAction の description を読む限りでは、以下と推測。 # Reject = 500 Internal Server Error を発生させ、Reject する # ProcessPartial = SecResponseBodyLimit で指定した値まで検査する # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N108B9 SecResponseBodyLimitAction ProcessPartial ### HTTP リクエスト処理時における XML プロセッサの有効化 # Content-Type: text/xml の場合のみ、XML プロセッサを有効にする # 初期設定ではコメントアウトされているため、無効 # ctl # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N116EB #SecRule REQUEST_HEADERS:Content-Type "text/xml" \ #"phase:1,pass,nolog,ctl:requestBodyProcessor=XML" ### Rule のデフォルトアクションの設定 # SecRule にて Action が何も定義されていなかった場合に # 設定されるデフォルトアクションの定義 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10610 SecDefaultAction "phase:2,pass" ## -- File uploads configuration ----------------------------------------------- ### intercept されたファイルの保存先ディレクトリの定義 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10C3C SecUploadDir /tmp ### intercept したファイル削除の定義 # ModSecurity で HTTP トランザクションの検査が完了した後で、 # intercept したファイルを削除するか否かを定義する # On = 削除しない # Off = 削除する # RelevantOnly = 関連なしを判断された(Rule に一致しない?)ファイルのみ削除する # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10C95 SecUploadKeepFiles Off ### アップロードファイルの検査 Rule # アップロードされたファイルを外部スクリプトで検査する Rule # 初期設定ではコメントアウトされているため、無効 # inspectFile # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N11C5B # SecRule FILES_TMPNAMES "@inspectFile /opt/apache/bin/inspect_script.pl" \ # "t:none" ## -- Logging ---------------------------------------------------------------- ### ModSecurity audit logging engine の設定 # audit log に記録する HTTP トランザクションを設定する # On = すべての HTTP トランザクションを audit log に記録する # Off = すべての HTTP トランザクションを audit log に記録しない # RelevantOnly = 警告やエラーとなった HTTP トランザクションや # SecAuditLogRelevantStatus で定義した HTTP トランザクションのみ # audit log に記録する # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10213 SecAuditEngine RelevantOnly ### audit log を記録する HTTP レスポンス・ステータスの定義 # SecAuditEngine RelevantOnly の場合、ここで定義した # ステータスコードに合致する HTTP トランザクションのみ # audit log に記録する # 初期値:404 を除く 4xx、および 5xx # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N103B1 SecAuditLogRelevantStatus "^(?:5|4(?!04))" ### audit log の保存形式の定義 # Serial = すべての audit log entry を 1 つのファイルに保存する # Concurrent = audit log entry をそれぞれ別のファイルに保存する # SecAuditLogStorageDir にて、保存先ディレクトリの指定が必要 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N1040B SecAuditLogType Serial ### audit log のメインファイルの定義 # SecAuditLogType Serial の場合、すべての audit log の保存先 # SecAuditLogType Concurrent の場合、各ファイルの Index 情報が保存される模様 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10260 SecAuditLog logs/modsec_audit.log ### audit log の保存先ディレクトリの定義 # SecAuditLogType Concurrent の各ファイルを保存するディレクトリ # 初期設定ではコメントアウトされているため、無効 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N103E2 # SecAuditLogStorageDir logs/modsec_audit ### audit log entry の定義 # audit log に記録する entry を定義する。 # 各 entry はアルファベットに対応している。 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N1031E SecAuditLogParts "ABIFHKZ" ### パフォーマンス測定目的のログファイルの定義 # LogFormat、CustomLog はそれぞれ Apache で定義されているディレクティブ # http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/06-special_features.html # Performance measurement を参照 # 初期設定ではコメントアウトされているため、無効 # # 以下、Apache HTTP サーバ バージョン 2.2 のドキュメント # LogFormat ディレクティブ # http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html#logformat # CustomLog ディレクティブ # http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html#customlog # # 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 ## -- Tuning and debugging --------------------------------------------------- ### Cookie フォーマットの定義 # 0: version 0 cookie(Netscape 形式) # 1: version 1(RFC2109 で定義されているバージョンと推測) # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10530 SecCookieFormat 0 ### メモリに保存する HTTP リクエストの上限バイト値 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10861 SecRequestBodyInMemoryLimit 131072 ### ModSecurity debug log の定義 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10589 SecDebugLog logs/modsec_debug.log ### ModSecurity debug log に記録するログレベルの定義 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N105B0 SecDebugLogLevel 3 ### 一時ファイルの保存先ディレクトリの定義 # http://www.modsecurity.org/documentation/modsecurity-apache/2.5.10/modsecurity2-apache-reference.html#N10C15 SecTmpDir /tmp
【収集用メールアドレス】:q1w2e3w2@gmail.com