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でS3の利用料を節約するためにやって置いた方がよいこと

    AWS

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

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

  2. AWS

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

    今回はAWSでCloudFrontを使用する際に、設定しておいた方が良…

  3. PCI DSS

    PCI DSSに準拠するためにまず最初にやるきべこと

    今回はあなたのシステムでPCI DSSに準拠すると決めた時、まず最初に…

  4. AWS

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

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

  5. AWS

    AWSを利用してPCI DSS準拠のシステムを構築する3つのメリット

    今回はAWSを利用してPCI DSS準拠のシステムを構築す…

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

    AWS

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

    今回は、AWSを使ってクレジットカード業界のセキュリティ基準であるPC…

最近の記事

  1. AWS

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

    AWSを利用してPCI DSS準拠のシステムを構築する3つのメリット
  3. AWS

    AWSでOSの脆弱性対策をする方法
  4. PCI DSSの12要件とAWSにおける対応方法

    AWS

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

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