プライバシーポリシー

2013年6月18日火曜日

多発するWeb改ざんに備えてinotifywaitによる改ざん検知を導入した

Webサイトの改ざん事件が多発しています。Webサイトに対する基本的なセキュリティ施策を実施していればまず被害にあうことはないとは思うものの、全ての手口が公開されているわけではないので、何となく「嫌な感じ」もします。

【参考】
当方のサイト(会社個人)は、一通りのセキュリティ施策は実施しているつもりですが、絶対に改ざんされないかというと、改ざんされることは想定しておかなければならないと考えています。

当方のセキュリティ施策の例
  • FTPをやめ、sshのみで管理運用
  • sshのパスワード認証を禁止し、鍵認証のみとする
  • sshサーバーのIPアドレス制限
  • 脆弱性管理
上記のセキュリティ施策を講じていても、例えば以下のような侵入シナリオが考えられます。
  • サイトの管理用PCがゼロデイ脆弱性でマルウェアに感染し、管理用PCを踏み台として、管理用PCに保存された秘密鍵によりsshからログインされる
  • サーバーソフトのゼロデイ脆弱性により侵入される
  • VPSのコントロールパネルに脆弱性がある場合、コントロールパネルに侵入され、シングルユーザーモードからrootパスワードを変更された後、コントロールパネルのリモートコンソールからログインされる
私自身としても、サイトに侵入されてしまうかもしれないという想定は心情的には受け入れにくいものではありますが、冷静に考えれば侵入されるという事態はあり得るわけで、仮に侵入された場合に素早く対処できる施策を施しておきたいと考えるようになりました。と言っても、何分にも個人経営のサイトですので、掛けられる予算も限られています。そこで、無償で利用できる改ざん検知ツールについて検討しました。
検討したツールは以下の通りです。
  • Tripwire(オープンソース版)
  • inotifywait
実際には両方を導入して運用していますが、本稿ではinotifywaitについて報告します。

inotifywaitによる改変検知

Linux 2.6.13から、ファイルシステムのイベント監視APIとして、inotifyが組み込まれています。これを利用して、ファイルの改変検知を行うことにしました。inotifyを簡単に利用するためのコマンドとしてinotifywaitがあり、Ubuntuの場合下記によりインストールできます。
$ sudo apt-get install inotify-tools
inotifywaitを用いて、/etc以下を監視する場合の起動例を下記に示します。
$ sudo inotifywait -m -e create,delete,modify,move,attrib --format '%T %w %f %e' -r --timefmt '%F %T' /etc
オプションパラメータは以下の通りです。

-mイベント後も継続する
-rディレクトリを再帰的に監視する
-e監視するイベントを指定
-format出力形式を指定
-timefmt時刻の表示形式を指定

この状態で、以下のように、/etc以下にファイルを作成してみましょう。
$ sudo touch /etc/xxxxx
以下の出力が得られます。
2013-06-16 22:36:57 /etc/ xxxxx CREATE
2013-06-16 22:36:57 /etc/ xxxxx ATTRIB
inotify(inotifywait)はリアルタイムに上記の表示が得られます。一方、オープンソース版のTripwireは定期的なバッチ処理による監視なので、リアルタイム性はありません。

ファイル改変の監視対象は以下としました。
  • /etc/ 以下の設定ファイル
  • バイナリ
  • Webコンテンツ(.htaccess等含む)
  • その他
これらのディレクトリにおける、ファイル新規作成、更新、削除、移動、属性変更が起こる度にメール通知するスクリプトを書きました。inotifywaitはリアルタイムにファイルに対するイベントを監視できますが、イベントの度にメールを送信すると、1度に何通ものメールが送信されるのでうれしくありません。そこで、こちらを参考にして、イベント発生後5秒の間に発生したイベントをまとめてメール通知しました。参照したエントリはシェルスクリプトによる方法を紹介していますが、私はPerlにより記述して、デーモンとして常駐させています。

攻撃側の対抗策として、侵入に成功後 inotifywait プロセスを止めてしまうというシナリオも考えられます。そこで、inotifywait の死活監視も実施することにしました。inotifywaitを呼び出すPerlスクリプトから、定期的にハートビートのメールを別サーバーに送信し、一定時間メールが来ない場合、別サーバーからメール通知するようにしています。

効果・まとめ

inotifywaitによるリアルタイム改ざん検知の導入について報告しました。
導入の効果ですが、改ざんのことは忘れて他の業務に専念できる点が大きいと思いました。また、tripwire(オープンソース版)によるバッチの改ざん検知と比べてCPU負荷が軽いのもメリットです。

IPAの注意喚起では、Webコンテンツの改ざん有無をチェックするように呼びかけており、具体的な手段としては、(1)原本との比較、(2)セキュリティソフトによるスキャン、(3)FTPアクセスログの確認、という3種類の方法を紹介しています。これら手法は、一般的なツールだけで実現可能という理由から採用されたものだと思いますが、確実性や即時性という点で課題があります。リアルタイムにファイルの改変を直接監視することで、コンテンツが改ざんされていないという安心を得ることができます。
導入前は、誤検知(フォルス・ポジティブ)を心配していましたが、運用上問題ないレベルだと思います。ただし、これは私が一人で運用しているからであって、コンテンツを更新する人と監視をする人が別の場合は、運用ルールを定めないと、「コンテンツが変更されたが、正規の更新か、攻撃か分からない」という事態も起きそうです。

トータルで見て、小規模な企業ホームページなどで、多大な費用を掛けずに実施できるセキュリティ施策として、ファイル改ざん検知は有望な方法だと感じました。

※18:55修正 CPU負荷について追記、タイトルを微修正

0 件のコメント:

コメントを投稿