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

    AWSコンソール用の安全なユーザーの作成方法

    AWSに最初にアカウントを作るとルートユーザーというものが作られます。…

  2. AWS

    AWSで大規模障害発生時に被害を最小限にする方法

    先日、AWSで大規模障害が発生し、多くのサービスが影響を受けました。こ…

  3. AWSでCloudFrontを導入する際に注意する点

    AWS

    AWSでCloudFrontを導入する際に注意する点

    前回の記事でAWSでシステムを構築する際にはCloudFrontを利用…

  4. AWS

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

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

  5. AWS

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

    AWSでLinuxサーバ上のApacheのアクセスログやアプリケーショ…

  6. AWSで安全なネットワーク設計を行うポイント

    AWS

    AWSで安全なネットワーク設計を行うポイント

    今回は、AWSにおいて安全なネットワーク設計を行いポイントについて…

最近の記事

  1. PCI DSSの12要件とAWSにおける対応方法

    AWS

    PCI DSSの12要件とAWSにおける対応方法
  2. AWS

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

    PCI DSSでデータを暗号化して保存する際の4つのポイント
  4. AWS

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

    AWSでCloudFrontを使った方が良い理由
PAGE TOP