MiracleJobLogo
エンジニアのエンジニアによるエンジニアのためのサイト
News 07/19 おすすめ情報に 『 【資格取得者速報】 Aさん 「 Microsoft Security, Compliance, and Identity Fundamentals」 』 を追加しました。
会員登録するとキャリア診断やサイトに参加することができます。
あなたにおすすめな技術情報、資格、仕事などをお知らせします。

無料会員登録


パスワードを忘れた場合
LINEで送る
MiracleJobBanaLeft1
MiracleJobBanaLeft2


セキュリティソフト「Trend Micro Deep Security」の機能を模倣してみる
profile-img
投稿者: ktamoiさん
投稿日:2023/03/09 19:33
更新日:
like-img
分類
技術
テクノロジー
セキュリティ
キャリア
テクニカルサポート
投稿内容

六回目の投稿です。今回は、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」があります。

これらの導入には様々なパターンが考えられますが、数台の物理サーバから構成される

ネットワークを保護する場合だと、次のようなパターンが考えられます。


・あるサーバをウイルス対策サーバとし、Deep SecurityマネージャとDeep Security 

 Relay、Deep Securityエージェントをインストールする。残りのサーバに対しては、

 Deep Securityエージェントだけをインストールする。これにより、エージェントが

 インストールされたサーバのログをウイルス対策サーバで一元的に管理したり、

 ウイルス対策サーバから各サーバに最新のウイルス定義ファイルを配信したりする

 ことができる。


より詳細な内容については、参考リンク先【1】が分かりやすいです。



◆ファイル、ディレクトリの変更検出のシナリオ

Deep Securityの機能の一つである変更検出を模倣してみます。今回は簡単のため、

特定のディレクトリのタイムスタンプが変更されるタイミング、つまり、ディレクトリ

内でファイルが作成/削除されたタイミングを検出することを目指します。具体的な

シナリオとしては、監視側で変更検出用のスクリプトを実行中に、不正アクセスしてきた

攻撃者が特定のディレクトリ内でファイルを新規作成したことを想定します。

※ ディレクトリ内にあるファイルそのものの編集は検出しない



◆変更検出用スクリプトの紹介

今回用いるスクリプトは、参考リンク先【2】のものをほぼそのまま使用させて

いただきました。スクリプトを任意のディレクトリに任意のファイル名(例として

「detect.sh」)で保存し、実行可能なパーミッションに変更します。その後、引数に

検出対象のディレクトリを指定して実行することで監視が始まります。

コマンド例:$ ./detect.sh <検出対象のディレクトリ名>


--- detect.sh ---

#!/bin/sh
if [ $# -ne 1 ]; then
  echo "実行するには1個の引数が必要です。"
  exit 1
fi
echo "監視対象ディレクトリ $1"
echo ""
INTERVAL=1 #監視間隔, 秒で指定
last=`ls -da --full-time $1 | awk '{print $6"-"$7}'`
while true; do
  sleep $INTERVAL
  current=`ls -da --full-time $1 | awk '{print $6"-"$7}'`
  if [ $last != $current ] ; then
    echo "updated: $current"
    last=$current
  fi
done
-------------------


このスクリプトのポイントは、次の箇所です。

-------------------

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



以上です。

コメント


MiracleJobBanaRight1
MiracleJobBanaRight2
MiracleJobBanaRight3