Amazon-CloudWatch

AIDEの改ざん検知結果をCloudWatchカスタムメトリクスで取得する

はじめに

こんにちは、omkです。
今回はAIDEを用いてサーバ内の改ざん検知を行い、その結果をCloudWatchのコンソール上で確認するためにカスタムメトリクスをプッシュするようにしましたので紹介いたします。

前提

CentOS7のEC2インスタンス上で行いました。

インストールするもの

  • AIDE
  • AWS CLI

内容

導入

まずAWS CLIをインストールします。

# yum -y install awscli

確認

# aws --version
aws-cli/1.14.28 Python/2.7.5 Linux/3.10.0-1062.12.1.el7.x86_64 botocore/1.8.35
# aws configure

クレデンシャルを入力します。

次にAIDEをインストールします。

# yum install aide

初期化

# aide --init

設定(検知するディレクトリを指定)

# vim /etc/aide.conf

DB差し替え

# cp -f $AIDEDIR/aide.db.new.gz $AIDEDIR/aide.db.gz

ここまでを導入とします。
この辺りは参考にしたサイトに詳しくあるので詳細はそちらをご覧ください(末にリンクがあります)。

シェルスクリプト

検知してカスタムメトリクスをプッシュする一連の操作をシェルスクリプトにします。
AIDEで検知できるのは「追加されたファイル」、「編集されたファイル」、「削除されたファイル」の3種類です。これらに変化がある場合はそれらを列挙し、なければ「Looks okay!」と表示されます。
なのでカスタムメトリクスに設定するのもこの3種類とします。

# vi AideDetect.sh

AideDetect.sh

#!/bin/bash
LOGFILE=/var/log/aide/aide.log
AIDEDIR=/var/lib/aide

/usr/sbin/aide  -u > $LOGFILE
\cp -f $AIDEDIR/aide.db.new.gz $AIDEDIR/aide.db.gz

isDifferent=$(grep "Looks okay" $LOGFILE | wc -l)
if [ $isDifferent -eq 1 ]
then
# OK
# Push Custom Metrics
aws cloudwatch put-metric-data --metric-name added --dimensions Instance=** --namespace "AIDE" --value 0
aws cloudwatch put-metric-data --metric-name changed --dimensions Instance=** --namespace "AIDE" --value 0
aws cloudwatch put-metric-data --metric-name removed --dimensions Instance=** --namespace "AIDE" --value 0
else
# DETECTED
# Shape data
added=$(cat $LOGFILE | grep "Added files:" | sed s/[^0-9]//g)
changed=$(cat $LOGFILE | grep "Changed files:" | sed s/[^0-9]//g)
removed=$(cat $LOGFILE | grep "Removed files:" | sed s/[^0-9]//g)

# Push Custom Metrics
aws cloudwatch put-metric-data --metric-name added --dimensions Instance=** --namespace "AIDE" --value $added
aws cloudwatch put-metric-data --metric-name changed --dimensions Instance=** --namespace "AIDE" --value $changed
aws cloudwatch put-metric-data --metric-name removed --dimensions Instance=** --namespace "AIDE" --value $removed
fi

ざっくりと説明すると、
ifまでで改ざん検知を実行し、ログを出してDBを更新します。

ifからelseまでは変化がなかった場合の処理です。aws cliを使用してカスタムメトリクスに0の値を送ります。
変化がない場合ログは以下のように出力されます。

AIDE, version 0.15.1
### All files match AIDE database. Looks okay!

なのでgrepで「Looks okay」が1行だけヒットする場合、「変化なし」としています。

elseからfiまでは変化があった場合です。
変化があった場合は

AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2020-08-11 17:33:49
Summary:
  Total number of files:        62414
  Added files:                  2
  Removed files:                1
  Changed files:                1
---------------------------------------------------
Added files:
---------------------------------------------------
added: /var/www/html/a.html
added: /var/www/html/b.html

---------------------------------------------------
Removed files:
---------------------------------------------------
(以下略)

と出るので「Summary」の検知数の数字部分のみ抽出してCloudWatchにプッシュします。
シェルスクリプトの設定が完了しましたので権限を与えてcronで実行します。

# crontab -e

*/5 * * * * /パス

対象が多いと時間がかかるので5分おきに設定しました。

確認

AWSコンソールにログインし、CloudWatchで確認します。
ちゃんと出力されていました。

まとめ

サーバに入らずに結果を確認できるのはいいですね。
SNSやLambdaを用いて何か発展させられると面白いかもしれません。

参考

https://hacknote.jp/archives/18027/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/cloudwatch-custom-metrics/

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA