Apache: ModSecurity (WAF) のインストール・設定方法 – Webアプリ脆弱性対策


本記事はWAF (Web Application Firewall)ソフトでApacheモジュールの一つである、ModSecurityのインストール及び簡易的な設定方法を記載する。本運用を考慮した設定は本記事では割愛するが、必要な参考リンクは適時記載するので参照されたし。

概要 (全体像)

ModSecurity:TrustWave社がGPLv2 ライセンスのもと提供しているOSSのWAF。

ModSecurity: Open Source Web Application Firewall

下記の資料にWAFの概要からModSecurityの導入〜運用までの検討ポイントが記載されている。

IPA 独立行政法人 情報処理推進機構:Web Application Firewall 読本

OWASP Core Rule Set:OWASP(Open Web Application Security Project)がGPLv2 ライセンスのもと提供しているModSecurityのルール(シグネチャ)。

Category:OWASP ModSecurity Core Rule Set Project – OWASP
Category:OWASP Best Practices: Use of Web Application Firewalls – OWASP
OWASP

当サイトを含む下手なブログ記事等を参照するよりも先ずは公式と上記のリンクを読んだ方が理解が早い。

前提環境

当記事ではVMWare上のDebian 6 (64bit)、Apache/2.2.16 (Debian)で実施。尚、当該仮想OSはホスト名「debian」で名前解決するよう設定しており、一部のブラウザのスクリーンショットで使用されている。

インストール方法

公式サイトをご参照。

ModSecurity: Open Source Web Application Firewall – Download
Reference Manual · SpiderLabs/ModSecurity Wiki – Installation for Apache · GitHub

最新のv2.7.7を使用したい場合は、ソースからmake installする。下記は当方環境でのapt-getでのインストール例。

私の環境だと公式とは指定パッケージ名が下記の通り異なった。
※ ‘libapache-mod-security’ instead of ‘libapache2-mod-security2’となる。

設定方法

設定の要領はApacheに対する設定と変わらず。以下にmodsecurityの動きを確認できる簡単なサンプルを示す。「←」以降はコメントである為、実際には打ち込まない。

各ディレクティブの説明は公式(大事!)のWikiを参照するとよい。上記のルールはあくまで動作確認用のものである為、

Reference Manual · SpiderLabs/ModSecurity Wiki · GitHub

因みに最近のバージョンだとidは4000000番以上を使用する用に言われている。。。以前は3000000以上で良かったのに。。。
尚、本体のconfを汚したくない人は下記の通り、設定ファイルを別途作成して、本体でIncludeさせるとよい。

設定ファイルの作成先↓

本体の設定ファイルから参照させる↓

設定が完了したら下記コマンドにて書式のチェックと反映。

コマンドが正常完了した場合は、この時点でSecAuditLogログファイルが作成されているので確認すると良い。

実行結果

ルールID (3000001, 3000002, 3000003)に対してブラウザからフィルタリングのテストをした結果が下記の通り。尚、当方環境ではマシンのホスト名を「debian」と設定・名前解決させているのでブラウザのアドレス欄は適時読み替えること。

指定文字列のフィルタ

modsecurity_result_dirty

SQLインジェクションのフィルタ例

modsecurity_result_sql_injection

XSSのフィルタ例

modsecurity_result_xss

ログのフォーマット等は下記リンクが参考になる。

ModSecurity 2 Data Formats · SpiderLabs/ModSecurity Wiki · GitHub
Modsecurity audit log – Atomicorp Wiki

次記事はiptablesの復習に戻る予定。

関連記事 (Related Articles):


コメントを残す