mod_securityとAuditConsoleを使ってみる

OSSなWAFがどんなものか気になったのでmod_securityとAuditConsoleを使ってみた。
また、両者の連携のためにmlogcが必要なため、併せて入れる。

おおむねこちらの記事を参考にした。
AuditConsoleを設定 - あるシステム管理者の日常

差分としては、AuditConsoleをyumにてインストールしたことくらい。
ちなみに、Javaのバージョンは特に意識しなくても問題なかった。
(1.8系のJavaが依存パッケージとしてインストールされていた)

環境

OS: CentOS Linux release 7.4.1708 (Core)
httpd: apache 2.4.6-67

mod_security

install / setup

epelのリポジトリからインストールする。
yum install mod_securityで入る。あわせて、mod_security_crsも入れてみる。
crsはCore Rule Setのこと。
初期設定は/etc/httpd/conf.d/mod_security.confに記載してあるので、インストール後httpをリスタートすれば動く。

AuditConsole

AuditConsoleはtomcatで動くmod_securityのログの監視用Webインターフェースである。
mod_securityのコンソールはAuditConsoleとWAF-FLEの2種類あるようであるが、
今回はAuditConsoleを動かしてみる。WAF-FLEもそのうち試してみたい。

..:: jwall.org ::..

install / setup

こちらもyumで入れる。
標準のリポジトリには入っていないため、jwallのリポジトリを追加する。
手順はjwallのUser Guideに記載してある。
サービス開始前に
/etc/default/auditconsoleに
JAVA_HOMEを追記する。
JAVA_HOMEの確認は
readlink $(which java)
で出来る。
(設定時はbin/javaを除く。例えば、/usr/lib/jvm/java-1.6.0-openjdk)

ポート番号を変えたい場合にはここの設定で変えておく(デフォルトでは8080と8443)。

# systemctl start auditconsole
http://localhost:8080にアクセスして初期設定をする。
設定内容を変更する必要は特になかった。

mlogc

ソースからコンパイルする。
mod_securityのソースに含まれているのでダウンロードして、
./configure
make
する。
mlogcだけ欲しいのでmake installはしない。
mlogc.con及びmod_security.confを設定する。

なお、iusのリポジトリであればyumでインストールできるが、httpdもiusのものを入れる必要があるため、今回は却下。

エラー対応

mlogc-error.logに
Invalid entry (failed to match regex)
が出て、ログが正常にAuditConsoleに連携しない事象が発生。

mod_security.conにて
SecAuditLogType Serial
になっているのが原因であった。
SerialをConcurrentに変更して解消。

動作確認

curl http://localhost/?name="><script>alert(document.cookie)</script><!--

とかしてみる。
403 Forbiddenが帰ってきて、AuditConsoleのイベントにログが表示されれば正常。


とりあえずhttpdのお守りに入れておくにはいいのではないでしょうか。
ただ、AuditConsole(tomcat)を動かすと常時200MB程度メモリ確保してるので、攻撃を検知したらメール通知して、定期的にAuditConsoleを確認するとかが良さそう。