六回目の投稿です。今回は、Linux系サーバにおけるディレクトリの変更検出について
紹介します。ディレクトリの変更検出を実施することで、不正アクセスが行われた際
などに、機微情報を含むディレクトリ内でのファイル操作を検出することができるように
なります。参画中の運用保守案件では、セキュリティソフト「Trend Micro Deep Security」
(以降Deep Securityと表記)を用いてこれを実現しており、本投稿ではその機能をシェル
スクリプトにて模倣してみます。
※ Deep Securityは、今回紹介する内容で動作しているわけではありません
◆Deep Securityとは
まずはDeep Securityについて説明します。Deep Securityは、Trend Micro社による
セキュリティソリューションであり、ファイルなどの変更検出や内部ネットワークへの
侵入検知/侵入防止、ウイルス対策といった機能を提供します。Deep Securityの
ライセンスには、監視/保護対象のサーバに導入する「Deep Security エージェント」と
「Deep Security Virtual appliance」ならびにそれらが導入されたサーバを管理する
サーバに導入する「Deep Securityマネージャ」と「Deep Security Relay」があります。
これらの導入には様々なパターンが考えられますが、数台の物理サーバから構成される
ネットワークを保護する場合だと、次のようなパターンが考えられます。
Relay、Deep Securityエージェントをインストールする。残りのサーバに対しては、
Deep Securityエージェントだけをインストールする。これにより、エージェントが
インストールされたサーバのログをウイルス対策サーバで一元的に管理したり、
ウイルス対策サーバから各サーバに最新のウイルス定義ファイルを配信したりする
ことができる。
より詳細な内容については、参考リンク先【1】が分かりやすいです。
◆ファイル、ディレクトリの変更検出のシナリオ
Deep Securityの機能の一つである変更検出を模倣してみます。今回は簡単のため、
特定のディレクトリのタイムスタンプが変更されるタイミング、つまり、ディレクトリ
内でファイルが作成/削除されたタイミングを検出することを目指します。具体的な
シナリオとしては、監視側で変更検出用のスクリプトを実行中に、不正アクセスしてきた
攻撃者が特定のディレクトリ内でファイルを新規作成したことを想定します。
※ ディレクトリ内にあるファイルそのものの編集は検出しない
◆変更検出用スクリプトの紹介
今回用いるスクリプトは、参考リンク先【2】のものをほぼそのまま使用させて
いただきました。スクリプトを任意のディレクトリに任意のファイル名(例として
「detect.sh」)で保存し、実行可能なパーミッションに変更します。その後、引数に
検出対象のディレクトリを指定して実行することで監視が始まります。
コマンド例:$ ./detect.sh <検出対象のディレクトリ名>
--- detect.sh ---
#!/bin/sh
このスクリプトのポイントは、次の箇所です。
-------------------
ls -da --full-time $1 | awk '{print $6"-"$7}'
-------------------
スクリプト実行時の引数に、例としてディレクトリ「/etc/cron.d」を与えると、$1には
「/etc/cron.d」が与えられます。「ls -da --full-time /etc/cron.d」の実行結果を示します。
この結果をawkに渡し、日付と時刻を「-」で結んで表示しています。
上図より、ディレクトリのタイムスタンプが取得できていることが分かります。
スクリプトでは、1秒ごとにタイムスタンプを取得し、1秒前のものと比較することで
変更検出を行っています。
◆変更検出のデモンストレーション
実際に、作成したスクリプトの振る舞いを観察してみます。
まずは監視側(左のプロンプト)にて、スクリプトを実行しておきます。
次に、不正アクセスを想定したユーザ側(右のプロンプト)で検出対象の
ディレクトリに移動し、任意のファイルを作成します。
ファイルが新規作成されると、ディレクトリのタイムスタンプが変更されます。
監視側にて変更日時が表示され、正しく検出できていることが分かります。
図では示していませんが、ファイルを削除した場合も同様に検出されます。
監視が不要になれば、ctr+cなどでスクリプトを停止します。単純ではありますが、
僅か十数行のスクリプトで、変更検出機能を実装することができました。
◆感想など
ディレクトリのタイムスタンプの変更検出といった限定的なものでしたが、少しの
拡張で、ファイルの変更検出/ログファイルへの出力/特定のメールアドレスへの
メール通知など、実際の製品に近い挙動を実現することができそうです。今後とも、
案件で扱うミドルウェアの動作背景/原理に対して興味を持つようにしていきたいです。
◆参考
【1】https://www.asgent.co.jp/products/host-based/deep-security.html
【2】https://mizti.hatenablog.com/entry/2013/01/27/204343
以上です。