セキュリティ強化対策(Swatch編)セキュリティ強化対策(Swatch編)ログ情報のチェックは、セキュリティ管理の基本として重要ですが、膨大な情報の中から問題を検出するのはなかなか大変なことであり、実際のところ見つかれば儲けものというのが現実です。このツールは、Perlベースの不正アクセス監視ソフトです。Swatchでは指定されたsyslog等のログファイルをリアルタイムに監視し、予め設定しておいたルールに従い異常を検知するとbeep音やメールで管理者に通知したり、その情報を別の場所に書き出したり、はたまた、外部プログラムを起動するというようなことができます。最後の外部プログラムの起動は、使い方しだいではいろいろな応用ができ、今回はこの外部プログラム起動機能を使用してFTPサーバへの不正ログインの試みを検出して、当該アドレスからのFTPアクセスを遮断してみました。Perlベースのスクリプトであり、それを動かすにはいくつかのPerlモジュールが必要です。これらのモジュールはデストリには用意されていないものがあり、デストリによってインストール方法が異なるので以下を参考に実施してください。おやじが扱ったデストリに関しては、今回は全てRPMでインストールしました。デストリに用意されているRPMを使用するほうが管理上よいと思いますが、RPMがない場合はソースから入れてください。ソースインストールについては、ググルってください。必要なモジュールは以下のとおりです。言われる4つのモジュール以外に芋ずるで必要になるモジュールがあり、下記が全てです。Swatchが直接リンクしているモジュール。SuSEでは3項はperlのベースモジュールでインストールされてるので、別途インストールは不要。2〜5項の関連モジュールである。7項は実際には使用されないが、RPMの関係でCentOSを含むRedHat系だけで要求されSuSEでは要求されない。8項は実行時に必要であり、RedHat系はデフォルトで入っているので問題ないが、CentOSやSuSEはインストールされておらずSwatchを動かした際にエラーが出るので要注意。Core)RedHat系はDAGのリポリトジを使用すれば、一発でSwatch本体からSwatch関連のPerlモジュールまで全てインストールできます。以下を参考に実施してください。Core2)では、一部のモジュールが標準では用意されていないことやSwatchそのものをRPMから入れるためDAGのリポリトジを使用することにした。こちらを参考にyumまたはaptの設定をする。おやじはyumを使用しているので、その例を以下に示す。下記のように追記しサイトを設定する。Corebaseurl=http://apt.sw.be/fedora/$releasever/en/$basearch/daggpgcheck=1enabled=1SwatchのインストールyumでSwatchをインストールする。[Enter]"と入力するだけで関連するperlモジュールも全てインストールされるので、いとも簡単である。Complete◆CentOS4.0CentOS4.0は、Swatchを含め標準ではサポートされていないモジュールがかなりありますが、CentOS4.0はRHEL4.0のクローンなので、DAGにあるSRPMをコンパイルしなおせば使用できます。従って、CentOSでサポートされているもの(上表のNo.2/3/6/8の4モジュール)はyumなりでインストールし、不足しているものはDAGからSRPMを持ってきて、以下のように再コンパイルしてインストールすれば大丈夫です。以下を参考に実施してください。Swatchをリビルドする前に関連モジュールのインストールは済ませておいてください。/usr/src/redhat/RPMS/noarch/swatch-3.1-1.dag.noarch.rpm◆SuSE9.0/9.2SuSEの場合、Swatchを除き全てのモジュールが標準でサポートされているので、YaSTでインストールしてください。3項のTime-HiResは見つかりませんが、SuSEの場合、このモジュールはperlのベースモジュールでインストールされているので改めてのインストールは不要です。問題なのが本命のSwatchです。例によってRPMが見つかりません。ソースから入れようかとも思ったのですが、奮起してRPMを自分で作成しました。ダウンロードに置いておきますので、適当なところにダウンロードしてインストールしてください。SuSE9.0と9.2用のみです。SuSEは癖があり、少なくとも9.0と9.2ではソース互換はないので、SuSE9.1ではどちらのソースをリビルドしてもうまくいかない可能性が大です。SuSE9.2の場合は下記の緑字のところを9.2とすること。続いて、Swatchを動作させるための設定ファイルを作成しますが、設定ファイルは監視対象とするログファイル毎に作成する必要があります。設定ファイルのデフォルトは、~/.swatchrc、即ち、Swatch起動ユーザのホームディレクトリ配下の「.swatchrc」という名前のファイルになっています。実際に監視するsyslog等のログファイルは通常rootしかアクセスできないので、/root/.swatchrcファイルを作成することになります。Swatch起動時に設定ファイルのパスや名前は指定できるので実際は何でも良いし、複数のログファイルを監視するなら当然設定ファイルも複数になるので、自分の環境に合わせて作成すればよいということになります。して監視ファイル毎に作成しました。設定ファイルの基本的な形式は以下のとおりで、パターンマッチさせる正規表現文字列は「/」で挟んでperlの正規表現で記述し、以下にマッチしたときのアクションを記述します。アクションは必要に応じて複数記述できます。この組み合わせを、パターン毎に列記していきます。このとき注意が必要なのが、perlにおける特殊記号の扱いです。これらの特殊記号はperlの制御記号として扱われるため、特殊記号がパターン上に存在すると制御情報として扱われてしまい、期待する動作ができません。これらをパターンとして認識させるには、その記号の前に「\」(Linux上は逆スラッシュ)をつけることで制御情報と区別できるようになります。これはパターンだけではなく、メールアドレスの「@」が配列を表す制御起動であるため、「\@」のようにする実用があります。@」などがあり、注意が必要です。/(パターンマッチさせる正規表現文字列)/アクション1アクション2:アクションxSwatchで使用できる主なアクションは以下のとおりです。その他はmanを参照してください。メッセージを画面に表示する。modesでは、画面表示の色等が指定可。コンソール表示だけでなく、Swatch起動時に検出ログを吐き出すファイルを指定しておくと、echoが指定されているパターン検出時に検出したログを吐き出してくれるので、後でこれをみるだけでまとめてチェックができる。beep音をN回鳴らす。自宅サーバでは突然鳴るのと、アタックを受けると鳴り通しになるので、家人がビックリするだけなのでやめたほうが無難。$Nでコマンドにパターンマッチで指定した文字列のN番目の要素を引数として渡すことができる。$0または$*の場合はパターンマッチで指定した文字列の全ての要素が渡される。(perlスクリプトしか確認していないが、何故か一時スクリプトのパスが飛んできて$0/$*は使えなかった。アドレスで指定した宛先にメール通知する。「:」で区切れば複数宛先に通知可。デフォルトはSwatchが走行しているユーザ。subjectで件名を変更可。Swatchはパターンマッチすると指定アクションをとって以降の検索を終了するが、continue指定されていると一致しても処理を継続する。設定例としては、/usr/share/doc/swatch(-3.1)/examples/配下に「swatchrc.monitor」と「swatchrc.personal」という設定例があるほか、ググレばいくらでもあるのでそちらを参考にしてください。ログパターンはデストリによっても異なるので、各自チューニングが必要と思います。設定例として、一般的にはメールを投げる例が多くありますが、今回はコマンド実行機能(exec)を使用して、FTPで指定回数以上ログインに失敗したら当該アドレスからのFTPアクセスをiptablesを使用してロックするようにしてみましたので、後述します。ログフォーマットを適切に設定すれば、いろいろ応用ができると思います。■Swatchの動作テスト以上で設定ファイルが作成できたので、想定した動作をするかテストします。「-c」オプションで設定ファイルのパス、「-t」オプションで監視対象のログファイルのパスを絶対パスで指定してSwatchを以下のように起動します。起動が成功すると2行目のようなメッセージが出力されますので、このままコンソールを閉じないでおきます。続けて、他のクラインアトやもう一つのコンソールから、設定ファイルに記述したルールにマッチするであろう操作を行い、元のコンソールに検出結果として対象のログが出力されること(echo設定要)を確認します。beep音やメール通知を設定しているなら、それもあわせて確認します。下記の3行目は、ProFTPDで認証を失敗した時の例です。デストリによってログフォーマットが異なりますので、各自で調整が必要です。全ての設定が確認できたら、Swatchを起動したコンソールで[Ctrl]+[c]を入力しSwatchを停止しておきます。4812◆Swatchの自動起動Swatchの動作テストが終了したら、システム起動時にコマンドを叩くわけにはいきませんから、自動起動できるようにしなければなりません。一般的には、rc.localなりにコマンドイメージを書いておく例が多いのですが、今回は起動/停止/再起動できる起動スクリプトを作ってみました。Swatchは子プロセスが複数起動しており、特に複数ファイル監視時にきれいにゴミを残さずに停止するのが難しいつくりになっています。デストリによって用意されているコマンドが異なるのと、同一コマンドでも細かいところで挙動が異なるため、最終的には、tailコマンドは他で使用していないことを前提にした作りになっており、やや怪しいつくりですが、特に問題はないはずです。