CentOS7でTripwireのインストール

不正アクセスによる被害、なかなか馬鹿にはできません。対策をとってもさらに上回られることもあり、いたちごっこになることも多々あります。こんばんわ、Web担当 神凪です。
ノーガード戦法なんてやった日には情報漏洩の記念日になりかねません。古今セキュリティに配慮が必要なこの時代ではそぐわない話です。

実際にガードすることもそうですが、今回はファイルの改竄を検知するシステムを導入します。
ここでは、ファイル改竄検知システムにホスト型IDS(IDS=Intrusion Detection System)のTripwireを採用しました。
Tripwireは、導入時のファイル状態をデータベース化し、そのデータベースとファイルの現状を比較することにより、ファイルの追加/変更/削除を検知します。そのためLinuxインストール後の初期の段階で導入しておいたほうがよいでしょう。

目的

  • 管理者権限やセキュリティ設定を監視し、セキュリティ設定を改ざんされても検知できるようにする。
  • 情報の漏えいを目的とした不正なツール(キーロガーやパケットダンプ等)の導入(インストール)を検知する

環境

  • CentOS 7.3

準備

手順

Tripwireのインストールと初期設定

# tripwireのインストール
yum -y install tripwire

# tripwireの初期設定
tripwire-setup-keyfiles

初期設定コマンドを実行した後、”site keyfile passphrase”と”local keyfile passphrase”の設定、および入力を求められます。
文字列は任意ですが、この後も使用しますのでメモしておきましょう。

tripwireの設定

tripwireの設定

# テキスト版tripwire設定ファイルの作成
vi /etc/tripwire/twcfg.txt

# tripwire設定ファイルの暗号化
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
# Site Passphraseの入力を求められるので入力する

# テキスト版tripwire設定ファイルの削除
rm -f /etc/tripwire/twcfg.txt

尚、設定変更が必要になる等でtripwireテキスト版設定ファイルの復元が必要な場合、以下のコマンドで復元可能です。

twadmin -m f -c /etc/tripwire/tw.cfg > /etc/tripwire/twcfg.txt

ポリシーファイルの設定

前述のとおり、tripwireはデータベースとファイルの現状を比較することにより、ファイルの追加/変更/削除を検知します。
しかしデフォルトのポリシーファイルでは存在しないファイルのチェックが有効になっていたり、逆に存在するファイルのチェックが無効になっていたりします。
これを修正するため、修正用Perlスクリプトを使用して、ポリシーファイルを最適化させます。

# ポリシーファイル最適化スクリプト作成
cat << EOT > /etc/tripwire/twpolmake.pl
#!/usr/bin/perl
# Tripwire Policy File customize tool
# ----------------------------------------------------------------
# Copyright (C) 2003 Hiroaki Izumi
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
# ----------------------------------------------------------------
# Usage:
#    perl twpolmake.pl {Pol file}
# ----------------------------------------------------------------
#
$POLFILE=$ARGV[0];

open(POL,"$POLFILE") or die "open error: $POLFILE" ;
my($myhost,$thost) ;
my($sharp,$tpath,$cond) ;
my($INRULE) = 0 ;

while (<POL>) {
    chomp;
    if (($thost) = /^HOSTNAME\s*=\s*(.*)\s*;/) {
        $myhost = `hostname` ; chomp($myhost) ;
        if ($thost ne $myhost) {
            $_="HOSTNAME=\"$myhost\";" ;
        }
    }
    elsif ( /^{/ ) {
        $INRULE=1 ;
    }
    elsif ( /^}/ ) {
        $INRULE=0 ;
    }
    elsif ($INRULE == 1 and ($sharp,$tpath,$cond) = /^(\s*\#?\s*)(\/\S+)\b(\s+->\s+.+)$/) {
        $ret = ($sharp =~ s/\#//g) ;
        if ($tpath eq '/sbin/e2fsadm' ) {
            $cond =~ s/;\s+(tune2fs.*)$/; \#$1/ ;
        }
        if (! -s $tpath) {
            $_ = "$sharp#$tpath$cond" if ($ret == 0) ;
        }
        else {
            $_ = "$sharp$tpath$cond" ;
        }
    }
    print "$_\n" ;
}
close(POL) ;
EOT

# ポリシーファイル最適化
perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt > /etc/tripwire/twpol.txt.new

# Tripwireデータベース自体をチェック対象外に
echo ! "/var/lib/tripwire/`hostname`.twd ;" >> /etc/tripwire/twpol.txt.new

# Tripwireログをチェック対象外に
echo ! "/tmp/tripwire.log ;" >> /etc/tripwire/twpol.txt.new

# 暗号署名版ポリシーファイルの作成
twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
## サイトパスフレーズ応答

# テキスト版ポリシーファイルの削除
rm -f /etc/tripwire/twpol.txt*

他にもファイルを除外したい場合等、ポリシーファイルに記述する必要があります。
暗号署名版からテキスト版を復元するには以下のコマンドで行います。
テキスト版に記述後、再度暗号署名処理を行ってください。

twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt

データベース作成

# Tripwireデータベース作成
tripwire -m i -s -c /etc/tripwire/tw.cfg
## ローカルパスフレーズ応答

tripwire確認

# Tripwire実行
tripwire -m c -s -c /etc/tripwire/tw.cfg

レポートが表示されればOKです。

tripwire定期実行設定

# Tripwire定期自動実行スクリプト作成
cat << EOT > tripwire.sh
#!/bin/bash

# 既存のTripwire定期自動実行設定削除
rm -f /etc/cron.daily/tripwire-check

# パスフレーズ設定
LOCALPASS=xxxxxxxx # ローカルパスフレーズ
SITEPASS=xxxxxxxx  # サイトパスフレーズ

TRIPWIRE=/usr/sbin/tripwire
TWADMIN=/usr/sbin/twadmin
TWPRINT=/usr/sbin/twprint
cd /etc/tripwire

# Tripwireチェック実行
# ※ファイル変更を検知した場合のみroot宛にサマリをメールする
rm -f /var/lib/tripwire/report/`hostname`-`date +%Y%m%d`-*.twr
${TRIPWIRE} -m c -s -c tw.cfg > /tmp/tripwire.log
if [ $(grep "Total violations found" /tmp/tripwire.log | awk '{print $4}') -ne 0 ]; then
    ${TWPRINT} -m r --report-level 1 -c tw.cfg -r /var/lib/tripwire/report/`hostname`-`date +%Y%m%d`-*.twr | \
    mail -s "Tripwire Integrity Check Report from `hostname`" root
fi

# Tripwireチェック実行結果(過去分)削除
# ※過去90日分保管
tmpwatch -m 2160 /var/lib/tripwire/report

# ポリシーファイル最新化
${TWADMIN} -m p -c tw.cfg -p tw.pol -S site.key > twpol.txt
perl twpolmake.pl twpol.txt > twpol.txt.new
${TWADMIN} -m P -c tw.cfg -p tw.pol -S site.key -Q $SITEPASS twpol.txt.new > /dev/null
rm -f twpol.txt* *.bak

# データベース最新化
rm -f /var/lib/tripwire/*.twd*
${TRIPWIRE} -m i -s -c tw.cfg -P $LOCALPASS
EOT

# Tripwire定期実行スクリプトへ実行権限付加
chmod 700 tripwire.#!/bin/sh

# (一例)毎日0時にtripwire定期実行スクリプトを起動する
echo "0 0 * * * root /root/tripwire.sh" > /etc/cron.d/tripwire

ポリシーファイルメンテナンス

すこし前述で記述しましたが、あらかじめ変更がわかっているファイル等を検知対象外にする手順です。

# テキスト版ポリシーファイルの復元
twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt

# (例)/var/log/sa ディレクトリを対象外に
echo '!/var/log/sa ;' >> /etc/tripwire/twpol.txt
# (例)/etc/sysconfig/iptables ファイルを対象外に
echo '!/etc/sysconfig/iptables ;' >> /etc/tripwire/twpol.txt

# 暗号署名版ポリシーファイルの作成
twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
## サイトパスフレーズ応答

# テキスト版とバックアップのポリシーファイル削除
rm -f /etc/tripwire/twpol.txt /etc/tripwire/tw.pol.bak
rm -f /var/lib/tripwire/*.twd*

# Tripwireデータベース更新
tripwire -m i -s -c /etc/tripwire/tw.cfg
## ローカルパスフレーズ応答

まとめ

いかがでしたか?
ファイル変更検知のデファクトスタンダードとしての地位が確立されているtripwireの導入手順でした。
改竄されてしまったファイルをすぐに検知し、被害確認・原因追及するための一手になります。
もしものために導入を検討することも良いかと思います。

  • ファイル改竄検知にtripwire
  • tripwireはデータベースとファイルの比較で改竄検知する

参考元

Tripwire

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください