技術戦略部より、tipsやノウハウなど技術的な話題を発信いたします。by2019.12.19インフラセキュリティウェブOSSなWAF、ModSecurityの導入1【インストール編】ApacheDoSModSecurityWAFこんにちは。インフラ担当のいせです。ここ最近、弊社のサイトへサイバー攻撃と思わしき不審なアクセスが増えてきました。大半はOSSな脆弱性検査ツールなどを悪用した、いわゆるスクリプトキディによるもののようです。それらはあまり高度なものではなく、今のところは情報漏えいなど大きな被害はありませんが、このまま放置していてはいずれ致命的な脆弱性が発見されてしまわないとも限りません。そこで弊社ではApacheのモジュールとしてOSSで公開されているModSecuriyの導入を進めています。ついて解説していきます。今回はModSeucirtyの簡単な紹介とソースからインストールするところまでをご紹介します。ModSecurityとはModSecurityはApacheのモジュールとして公開されているOSSのWAFです。ModSecurityはいわゆるシグネチャ型のWAFですが、このタイプではシグネチャの精度と定期的なアップデートが検知精度に大きく関わってきます。(CRS)を利用することができます。CRSはおおよそ半年に1回程度アップデートがリリースされており、有名なCDNやCloudサービスでも利用されているなど実績が高いものになっています。リファレンスマニュアルについて今回参考にさせていただいたマニュアル等は以下のとおりです。Handbookは分厚い洋書でとっつきにくさはありますが、インストールや設定方法がかなり詳細に説明されているのでオススメです。前半の100ページ程は無料で公開されています。(Commit:e02b4a10b327aadd1a97b15cd32980d6a251bf3d)ModSecutiyの現時点での最新版は3.0.3ですが、今回は2.x系の最新版を利用しました。CRSプロジェクトとしてのリファレンスバージョンはまだ2.9系であったり2、3.x系はまだリファレンスが整備されていなかったりすることが理由です。現在でも2.x系は継続してメンテナンスが行われているようです。弊社ではApacheの前段にロードバランサーが入っているため、Apacheから見える送信元IPアドレスはロードバランサーに割り当てられたものとなってしまいます。X-Forwarded-Forヘッダに記載される本当のクライアントのIPアドレスをModSecurityに認識させるためにmod_remoteipを使用する必要がありますが、最近このモジュールで脆弱性が見つかったので3、この問題がFIX済みの2.4.41以降を使用するようにしてください。Storageを参照するためのツールです。このツールはなくてもModSecurityは動作しますが、テストや運用上あった方が便利なので一緒にインストールします。依存パッケージをインストールします。対象のパッケージはCentOS6.10の場合、EPELにありました。ソースをダウンロードして解凍します。ビルドとインストールを行います。--with-apuはパスが通っている場合は不要かもしれません。APR-Utilのパスを指定します。APR-UtilはApacheとは別に手動でビルド・インストールした場合は別のパスになっているかもしれません。必要なディレクトリを作成する以下のようなディレクトリを作成します。パスについては必ずしも下記のように設定する必要はなく、各組織のポリシーなどで管理しやすい場所を選定してください。Handbookに記載のパスになります。HTTPリクエストが大きすぎてメモリに乗り切らなかったときなどにSwap的に利用される。SecTmpDirディレクティブでパスを指定する。Storageの保存場所。SecDataDirディレクティブでパスを指定する。SecAuditLogディレクティブでパスを指定する。logは場合によっては正常な通信を誤って攻撃とみなしてログを残してしまうケースが考えられますが、その際にCookieやパスワードなどの機密情報が保存される可能性があるため、パーミッションを厳しく制限しています。4Apacheは一般的に親プロセスはrootで起動し、実際にリクエストを処理する子プロセスはapacheユーザーなどで動いています。logへ書き込みが行われますが、この設定をSerialとすることでrootで書き込みが行われます。今回は後者を採用したため、ディレクトリの所有者はrootとしました。CRSをダウンロードするCRSはバイナリではなく、ただの設定ファイルになっているのでダウンロードします。今回はApacheをインストールしたディレクトリのconf/配下にmodsecurityという名前で格納しました。ビルドに必要なツールをインストールします。ソースをダウンロードして解凍します。ビルドとインストールを行います。installまとめ今回はModSecurityのインストール方法までを紹介しました。次回はModSecurityの仕組みと設定方法などを紹介する予定です。↩こちらやこちらによると、CRSプロジェクトは2.x系推しのようです。↩sanitiseArgなどを利用して、特定のヘッダやパラメータを*(アスタリスク)に置換する機能はありますが、その設定が漏れていたとしてもすぐに問題にならないように、念の為の配慮です。Excel以外でネットワーク構成図を書きたくなったのでPlantUMLとnwdiagを試してみました。