#author("2025-10-25T19:55:00+09:00","default:k1rou","k1rou") #author("2025-11-06T11:44:46+09:00","default:k1rou","k1rou") *ModSecurity [#ca781adf] -[[OSS]]の[[WAF]] -ホスト型[[WAF]] -https://modsecurity.org/ **バージョン [#qccff2ac] -V2 --Apacheをサポート --[[Apache]]をサポート -V3 --libModSecurity --Nginx のConnectorモジュールがサポート(2021時点) *CRS [#b15cf7ac] -Core Rule Set -攻撃の検知に使うシグネチャ **OWASP CRS [#k01eaf33] -https://owasp.org/www-project-modsecurity-core-rule-set/ *Apache [#i57d2430] -mod_security -mod_security_crs -mod_security-mlogc *設定ファイル(RHEL系) [#k9d67fbe] **mod_security.conf [#x592e317] ***基本設定 [#q856f423] -SecRuleEngine ※ルールエンジンの動作設定 SecRuleEngine On ※有効(遮断・ログの記録) SecRuleEngine Off ※無効(マッチング処理停止) SecRuleEngine DetectionOnly ※有効(ログの記録のみ) -SecDataDir ※データの保存場所 SecDataDir /var/log/httpd/mod_security ***検査設定 [#q856f423] -SecRequestBodyAccess ※リクエストボディの検査(有効/無効) SecRequestBodyAccess On ※有効 SecRequestBodyAccess Off ※無効 -SecResponseBodyAccess ※レスポンスボディの検査(有効/無効) SecResponseBodyAccess On ※有効 SecResponseBodyAccess Off ※無効 -SecRequestBodyLimit ※HTTPリクエストボディのサイズ上限 SecRequestBodyLimit 13107200 ※13MB -SecRequestBodyNoFilesLimit ※HTTPリクエストボディ(ファイルを除く)のサイズ上限 SecRequestBodyNoFilesLimit 131072 ※120KB -SecRequestBodyInMemoryLimit ※HTTPリクエストボディをメモリ上で検査するサイズ上限 SecRequestBodyInMemoryLimit 131072 ※120KB -SecRequestBodyLimitAction ※SecRequestBodyLimitで指定したサイズを超過した場合の処理 SecRequestBodyLimitAction Reject ※遮断 SecRequestBodyLimitAction ProcessPartial ※SecRequestBodyLimitで指定したサイズまでは検証する -SecPcreMatchLimit ※正規表現でマッチングを行うサイズ上限 SecPcreMatchLimit 1000 ※1KB -SecPcreMatchLimitRecursion ※再帰的に正規表現でマッチングを行う回数上限 SecPcreMatchLimitRecursion 1000 ***デフォルトアクション設定 [#seedffd3] -SecDefaultAction ※マッチするルールがあった場合のデフォルトのアクション SecDefaultAction [phase:X] [action1,action2,...] ※構文 SecDefaultAction "phase:2,log,auditlog,deny,status:403" ※例:リクエストボディのフェーズで処理停止、Apacheのエラーログに記録、ModSecurityの監査ログに記録、ステータス403を返す | Phase | 設定の記述 |説明 | 備考 |h | 1 | phase:1 |リクエストヘッダー受信時 | リクエストのリクエストライン・ヘッダーを検査 | | 2 | phase:2 |リクエストボディ解析後 | リクエストのパラメータ・フォームデータを検査 | | 3 | phase:3 |レスポンスヘッダー送信前 | レスポンスのヘッダーを検査 | | 4 | phase:4 |レスポンスボディ送信前 | レスポンスのヘッダーを検査 | | 5 | phase:5 |ロギングフェーズ | | --Processing Phases~ https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-%28v2.x%29#user-content-Processing_Phases | Action | 説明 |h | allow | マッチしたルール以降の処理をスキップして許可 | | pass | 検知はするがブロックしない | | deny | 条件にマッチしたらアクセスを拒否(HTTP 403ステータスを返す等) | | log | Apacheのエラーログに記録する | | nolog | Apacheのエラーログに記録しない | | auditlog | ModSecurityの監査ログに記録する | | status:403 | 拒否時のHTTPステータスを指定する | | t:none | トランスフォーメーション(入力変換)を無効化 | ***ログ:監査ログ [#fb439a7f] -SecAuditEngine ※監査ログのエンジン SecAuditEngine On ※全リクエストを出力 SecAuditEngine Off ※出力しない SecAuditEngine RelevantOnly ※重要なリクエストのみ記録(ルールにマッチしたリクエストやエラー発生時など) -SecAuditLog ※監査ログの出力先 SecAuditLog /var/log/httpd/modsec_audit.log -SecAuditLogParts ※監査ログに出力する情報の種類(パート) SecAuditLogParts ABCFHZ | Part | 説明 |h | A | 監査ログヘッダー(必須) | | B | リクエストヘッダー | | C | リクエストボディ(SecRequestBodyAccessの有効化が必要) | | D | レスポンスヘッダー(予約済みで未実装) | | E | レスポンスボディ(SecResponseBodyAccessの有効化が必要)。インターセプトした場合、実際のレスポンス本文にはエラーメッセージが含まれる。 | | F | レスポンスヘッダー(DateヘッダーとServerヘッダーを除く) | | G | レスポンスボディ(予約済みで未実装) | | H | 監査ログトレーラー | | I | "C"の代替部分 | | J | multipart/form-data エンコーディングでアップロードされたファイルに関する情報 | | K | 一致した全ルールの完全なリスト(1行に1ルール) | | Z | 最終境界。エントリの終了を示す(必須) | ***ログ:デバッグログ [#yfae2106] -SecDebugLog ※デバッグログの出力先 SecAuditLog /var/log/httpd/modsec_debug.log -SecDebugLogLevel ※デバッグログの詳細レベル SecDebugLogLevel <レベル> | Level | 説明 |h | 0 | 出力なし | | 1 | 重大なエラーのみ出力 | | 2 | エラー・警告を出力 | | 3 | 主要な処理の情報を出力 | | 4〜5 | 詳細なリクエスト情報、ルール判定情報を出力 | | 6〜9 | 非常に詳細(内部変数、PCREマッチ詳細など) | ***検査ルール [#ab2b93ca] -SecRule SecRule 変数 オペレータ [変換関数] アクション --変数 ---https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v2.x)#user-content-Variables ---ARGS ※リクエストパラメータ(URL/ボディ) ---ARGS_GET ※リクエストパラメータ(URL) ---ARGS_POST ※リクエストパラメータ(ボディ) ---REQUEST_HEADERS ※リクエストヘッダのKey-Value値 --オペレータ ---https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v2.x)#Operators ---@contains ※指定した文字列が含まれるか検査 ---@rx ※正規表現による検査 ---@detectSQLi ※SQLインジェクションの検査 ---@detectXSS ※XSSの検査 --変換関数 ---https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v2.x)#Transformation_functions --アクション ---https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v2.x)#Actions ---id ※定義したルールのID[id:xxxxx] ---phase ※処理するフェーズ(1〜5)[phase:x] ---deny ※リクエストをブロックする(403エラー) ---log ※監査ログを出力する ---nolog ※監査ログを出力しない ---msg ※ログに追加で出力するメッセージ ---status ※レスポンスステータスコード[status:403] ---ctl ※ModSecurityの設定をトランザクション単位で指定する ***その他 [#w1da1643] -SecAction ※指定された処理を実行する SecAction アクション -SecRuleRemoveById ※指定したIDのルールを無効化する SecRuleRemoveById <ルールID> ※単一指定 SecRuleRemoveById <ルールID> <ルールID> ※複数指定 SecRuleRemoveById <ルールID>-<ルールID> ※範囲指定 -SecRuleUpdateActionById ※指定したIDのルールのアクションを変更する SecRuleRemoveById <ルールID> <変更後のアクション> *crs-setup.conf [#g9ba16f9] *関連サイト [#l7d4c5e6] -GitHub~ https://github.com/owasp-modsecurity/ModSecurity -Wiki~ https://github.com/owasp-modsecurity/ModSecurity/wiki -OWASP CRS~ https://owasp.org/www-project-modsecurity-core-rule-set/ *関連用語 [#af8b3122] -[[OWASP]] -[[WAF]]