Amazon Linux2でOSS版tripwireを使って改ざん検知する方法

AWS

Amazon Linux2でOSS版tripwireを使って改ざん検知する方法

改ざん検知は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関数を使って日時でチェックをするなどすると良いかなと思います。

関連記事

  1. AWS

    AWSでEC2インスタンスを安全に使うための3つの注意点

    今回はAWSでEC2インスタンスを起動した際に、安全に使うために行った…

  2. AWS

    CloudFrontでLambda@Edgeを本番運用してわかった注意点

    CloudFrontでLambda@Edgeを一年間運用しまして、気づ…

  3. AWSでS3の利用料を節約するためにやって置いた方がよいこと

    AWS

    AWSでS3の利用料を節約するためにやって置いた方がよいこと

    AWSでファイルや画像などを配置する場所として利用する場所はS3ですが…

  4. AWS

    AWSでS3を安全に使うための2つのポイント

    今回は、AWSのS3(ストレージサービス)を安全に使うためのポイン…

  5. AWSをセキュリティを高めて安全に使う方法

    AWS

    AWSをセキュリティを高めて安全に使う方法

    今回はAWSを安全に使うための方法についてご説明します。AWSは簡…

  6. AWS

    AWSでRDSに安全にデータを保存するための5つのポイント

    今回はAWSのRDSにデータを安全に保存する方法についてお話したい…

最近の記事

  1. AWS

    AWSでLinuxサーバ上のログを自動的にS3に保存する方法
  2. AWS

    AWSでコンプライアンスのための監査ログを取得する方法
  3. AWS

    AWSでS3を安全に使うための2つのポイント
  4. PCI DSS

    PCI DSSに準拠するためにまず最初にやるきべこと
  5. AWSでS3の利用料を節約するためにやって置いた方がよいこと

    AWS

    AWSでS3の利用料を節約するためにやって置いた方がよいこと
PAGE TOP