改ざん検知はPCI DSSなどセキュリティを強化する際には、必ず必要になります。
例えば侵入者にサーバに侵入されがWebコンテンツを改ざんなどの被害を受けてしまうことがあります。
そのような場合に、早期に改ざんを検知し、被害を最小限に食い止める必要があるためです。
改ざん検知用ソフトウェアとして有名なのはTripwireですが、有料版のTripwire Enterpriseと無料で利用できるOSS版Tripwireがあります。
今回は、Amazon Linux2上でOSS版のtripwireを使うための手順について説明します。
工夫したところは、通常のOSS版のtripwireだと、メールでレポートを送信する機能はあるのですが、ログに出力することができません。サーバ台数が多くなると一台一通メールが送られるとチェックするだけでかなり時間がかかってしまい煩わしいです。そのため、スクリプトを使って改ざん検知の結果をログに出力するようにしました。
ちなみにAmazon Linuxでも同じ手順で使用できました。
EPELリポジトリの有効化
amazon-linux-extras enable epel yum clean metadata yum install epel-release
Tripwireのインストール
yum install tripwire Importing GPG key とメッセージが表示される。 Is this ok [y/N]: と聞かれるので yと入力しEnterを押す
サイト鍵を生成する
twadmin --generate-keys --site-keyfile /etc/tripwire/site.key --site-passphrase (任意のサイトパスワード) Generating key (this may take several minutes)...Key generation complete.
ローカル鍵を生成する
twadmin --generate-keys --local-keyfile /etc/tripwire/`hostname`-local.key --local-passphrase (任意のローカルパスワード) Generating key (this may take several minutes)...Key generation complete.
設定ファイルを修正する
vim /etc/tripwire/twcfg.txt ROOT =/usr/sbin POLFILE =/etc/tripwire/tw.pol DBFILE =/var/lib/tripwire/$(HOSTNAME).twd REPORTFILE =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr SITEKEYFILE =/etc/tripwire/site.key LOCALKEYFILE =/etc/tripwire/$(HOSTNAME)-local.key EDITOR =/bin/vi LATEPROMPTING =false LOOSEDIRECTORYCHECKING =false MAILNOVIOLATIONS =true EMAILREPORTLEVEL =3 REPORTLEVEL =1 # 改ざん検知したファイル名だけを表示させたいのでREPORTLEVELを一番低い1にする MAILMETHOD =SENDMAIL SYSLOGREPORTING =false MAILPROGRAM =/usr/sbin/sendmail -oi -t
設定ファイルを生成する
echo (設定したサイトパスワード) | twadmin --create-cfgfile --site-keyfile /etc/tripwire/site.key /etc/tripwire/twcfg.txt Please enter your site passphrase: Wrote configuration file: /etc/tripwire/tw.cfg
ポリシーファイルを生成する
echo (設定したサイトパスワード) | twadmin -m P --site-keyfile /etc/tripwire/site.key /etc/tripwire/twpol.txt
データベースの初期化
echo (設定したローカルパスワード) | tripwire -m i -L /etc/tripwire/`hostname`-local.key Wrote database file: /var/lib/tripwire/(ホスト名).twd The database was successfully generated.
テストファイルの配置
検知されるか確認するためテスト用のファイルを配置してみます。
touch /root/dummy.txt
ファイルチェックの実行
改ざん検知のチェックをコマンドを実行します。
tripwire --check -s -n
レポートの生成
改ざん検知のレポートを生成します。先ほど配置したファイルが検知されることを確認します。
Added: "/root/dummy.txt"
チェック用スクリプトの作成
OSSのtripwireだと改ざんチェックの結果を良い感じでログに出力してくれないので、下記のスクリプトを作成してタイムスタンプ付きでログを出力してくれるようにします。
#!/bin/bash LOG_FILE=/var/log/tripwire/tripwire.log.$(date + %Y%m%d) mkdir -p /var/log/tripwire /usr/sbin/tripwire --check -s -n TIMESTAMP=$(date --iso-8601=seconds) RESULT=$(/usr/sbin/twprint -m r -r `find /var/lib/tripwire/report/ -type f | sort | tail -n 1` -s) echo -ne "$RESULT" | while read line do formatted_line=$(echo -n $line | tr -d '":') echo "$TIMESTAMP $formatted_line" >> $LOG_FILE done
CRON設定
下記のようなスクリプトを作成して、1時間に一回改ざんチェックをするようにします。
crontab -e 0 * * * * (チェックスクリプトのパス) > /dev/null 2>&1
あとは出力されたログをkinesisエージェントを使ってS3に送り、Lambda関数を使って日時でチェックをするなどすると良いかなと思います。