14 セキュリティ向上 その2/3 ファイル改竄検知 ( tripwire の導入)

セキュリティ対策 第2弾
今回はファイル改竄(かいざん)検知ができるtripwireを導入します。
ファイルが変更されると教えてくれるので、仮にサーバーに侵入されてファイルを改竄されてもわかります。
侵入された後じゃ遅いんじゃない?と思いますが、本当に怖いのは侵入に気づかず他のサーバーへの攻撃の踏み台にされたり、個人情報やパスなどがダダ漏れになることなので、侵入された時点でそれに気づくことは重要です。

参考URL
sa-sa-ki.jp
Linuxめも
CentOSで自宅サーバー構築
@IT
Studio ODIN

スポンサーリンク
レクタングル(大)広告

【導入の流れ】

1.インストール
2.設定ファイルテキスト版修正
3.設定ファイル暗号署名版作成
4.ポリシーファイル最適化スクリプト作成
5.スクリプトを使ってポリシーファイルテキスト版作成
6.ポリシーファイル暗号署名版作成
7.データベース作成
8.定期自動実行スクリプト作成とスケジューラ登録
9.動作確認とテキスト版設定ファイル&ポリシーファイルの削除

結構大変そうですがさっそくはじめましょう。

【1.インストール】

sudo apt-get install tripwire

コンフィグ画面が立ち上がる。
サイトキーについての説明が表示されるのでOK

サイトキーを作成するか聞かれるのでYES
サイトキーはTripwireの設定ファイルとポリシーファイルを暗号化するのにつかわれます。

次にローカルキーの説明が表示されるのでこれもOK(画像は割愛)

ローカルキーを作成するか聞かれるのでYES
ローカルキーはデータベースとレポートファイルの暗号化に使われます。

サイトキーに合わせて設定ファイルを再構築するか聞かれるのでYES

同じくポリシーファイルも再構築するか聞かれるのでYES (画像は割愛)

サイトキーのパスフレーズを聞かれるので入力してOK

サイトキーのパスフレーズの再入力を求められるので入力してOK(画像は割愛)

ローカルキーのパスフレーズを求められるので入力してOK

ローカルキーの再入力。入力してOK (画像割愛)

終了の表示とファイル配置の情報。OK
プログラム:/usr/sbin
データベース:/var/lib/tripwire
詳細情報:/usr/share/doc/tripwire/README.Debian

以上でインストール終了。

設定ファイルの一覧は以下で表示。
ls -al /etc/tripwire

total 44
drwxr-xr-x 2 root root 4096 Apr 27 13:42 .
drwxr-xr-x 106 root root 4096 Apr 27 13:37 ..
-rw——- 1 root root 931 Apr 27 13:42 raspberrypi-local.key
-rw——- 1 root root 931 Apr 27 13:39 site.key
-rw-r–r– 1 root root 4586 Apr 27 13:42 tw.cfg
-rw-r–r– 1 root root 510 Jun 16 2012 twcfg.txt
-rw-r–r– 1 root root 4159 Apr 27 13:42 tw.pol
-rw-r–r– 1 root root 6057 Jun 16 2012 twpol.txt

【2.設定ファイルテキスト版修正】

暗号署名版の設定ファイルを作成するために、まずテキスト版の設定ファイルを修正します。
設定ファイル自体の改竄を防ぐ為にこんなめんどくさい手順になっていると思われます。

sudo vi /etc/tripwire/twcfg.txt

【変更内容】
参考URL
@IT ここの2ページ目がくわしい

7行目付近
インタラクティブモードで使用するエディタ。デフォルトの/usr/bin/editorだとnanoになるので、vimにするため/usr/bin/vimに変更。お好みで。
EDITOR = /usr/bin/vim

8行目付近
パスフレーズのプロンプト表示を遅くする。メモリ上にパスワードが保存される期間を短くできる。falseからtrueに変更して有効化
LATEPROMPTING = true ←falseをtrueに変更

9行目付近
監査対象のディレクトリ内でファイルが変更された際に、ファイルとディレクトの変更両方を検知してしまうのを防ぐ。falseからtrueに変更して有効化
LOOSEDIRECTORYCHECKING =true

11行目付近
メールで送付されるレポートの詳細レベル。3から最高の4に変更
EMAILREPORTLEVEL =4

12行目付近
レポートの詳細レベル。3から最高の4に変更
REPORTLEVEL =4

メールの設定はそのままにして送れるかチェックすることにする。

【3.設定ファイル暗号署名版作成】

上記で作成したテキスト版を暗号署名版に変更します。
sudo twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt

Please enter your site passphrase: ←サイトキーのパスフレーズを入力
Wrote configuration file: /etc/tripwire/tw.cfg

テキスト版の削除は設定が完了して正常に動作するのを確認してからにする。
※設定ファイルテキスト版を復元する場合は以下コマンド。
sudo twadmin -m f -c /etc/tripwire/tw.cfg > /etc/tripwire/twcfg.txt

【4.ポリシーファイル最適化スクリプト作成】

Tripwireはポリシーファイルを元に作成したデータベースと現在のファイル状態を比較することでファイル変更を監視します。デフォルトのポリシーファイルは自分のマシンのファイル構成と合っていないので、存在しないファイルのチェックを無効化し存在するファイルのチェックを有効化するPerlスクリプトを作成して最適化します。(Perlはプログラミング言語の一種)
ちなみにこの最適化スクリプトはGNU GPLライセンスのフリーソフトです。無料のほうの意味でも自由のほうの意味でも好きです、フリーソフト。

スクリプトを作成します。
sudo vi /etc/tripwire/twpolmake.pl

viエディタで以下のテキストを入力というかコピペ
(コピペする前にinsertモードにしましょう。また、オートインデントが有効になっていると余計にインデントが入ってしまうので無効にしておきます。無効化は:set noaiでできます。有効化は:set ai)

#!/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 (
) {
chomp;
if (($thost) = /^HOSTNAMEs*=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) ;

保存して終了。

【5.スクリプトを使ってポリシーファイルテキスト版作成】

先ほど作成したスクリプトを使ってポリシーファイルを最適化します。
su –
Password: ルートパスワード入力
cd /etc/tripwire
perl twpolmake.pl twpol.txt > twpol.txt.new
exit

【6.ポリシーファイル暗号署名版作成】

最適化したポリシーファイルテキスト版から暗号化署名版を作成します。
sudo twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
Please enter your site passphrase: ←サイトキーのパスを入力
Wrote policy file: /etc/tripwire/tw.pol

ポリシーファイルテキスト版も削除は動作確認後に実施。
※ポリシーファイルテキスト版を復元する場合は以下コマンド
sudo twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt

【7.データベース作成】

データベースを作成します。
実行に結構時間がかかるのでしばらく待ちます。
sudo tripwire -m i -s -c /etc/tripwire/tw.cfg
### Warning: File system error.
### Filename: /var/lib/tripwire/raspberrypi.twd
### No such file or directory
### Continuing…
Please enter your local passphrase: ←ローカルキーのパスを入力

ワーニングが出てしまいました。
ファイルシステムエラーとファイルが無いと言っているので、パーミッション関係か?と推測。sudoではなく、ルートで実行してみる。

su –
tripwire -m i -s -c /etc/tripwire/tw.cfg
Please enter your local passphrase: ←ローカルキーのパスを入力

今度はワーニングも出ず正常に終了しました。

試しにファイルチェックを実行してみます。
ルートのまま、以下を実行
tripwire -m c -s -c /etc/tripwire/tw.cfg

Open Source Tripwire(R) 2.4.2.2 Integrity Check Report

Report generated by: root
Report created on: Sun Apr 27 16:17:23 2014
Database last updated on: Never

===============================================================================
Report Summary:
===============================================================================

Host name: raspberrypi
Host IP address: 127.0.1.1
Host ID: None
Policy file used: /etc/tripwire/tw.pol
Configuration file used: /etc/tripwire/tw.cfg
Database file used: /var/lib/tripwire/raspberrypi.twd
Command line used: tripwire -m c -s -c /etc/tripwire/tw.cfg

===============================================================================
Rule Summary:
===============================================================================

——————————————————————————-
Section: Unix File System
——————————————————————————-

Rule Name Severity Level Added Removed Modified
——— ————– —– ——- ——–
Invariant Directories 66 0 0 0
Tripwire Data Files 100 0 0 0
Other binaries 66 0 0 0
Tripwire Binaries 100 0 0 0
Other libraries 66 0 0 0
Root file-system executables 100 0 0 0
System boot changes 100 0 0 0
Root file-system libraries 100 0 0 0
(/lib)
Critical system boot files 100 0 0 0
* Other configuration files 66 0 0 1
(/etc)
Boot Scripts 100 0 0 0
Security Control 66 0 0 0
Root config files 100 0 0 0
Devices & Kernel information 100 0 0 0
(/dev)

Total objects scanned: 23323
Total violations found: 1

===============================================================================
Object Summary:
===============================================================================

——————————————————————————-
# Section: Unix File System
——————————————————————————-

——————————————————————————-
Rule Name: Other configuration files (/etc)
Severity Level: 66
——————————————————————————-

Modified:
“/etc/fake-hwclock.data”

===============================================================================
Error Report:
===============================================================================

No Errors

——————————————————————————-
*** End of report ***

Open Source Tripwire 2.4 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use –version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.

/etc/fake-hwclock.dataが修正されたと言っています。
調べてみるとRaspberry Piでは(というかDebianでは)このファイルに定期的に時間情報保存しているようです。うっとうしいのでチェックから外します。

残しておいたポリシーファイルテキスト版を開きます。
vi /etc/tripwire/twpol.txt.new

227行目付近以降に”Other configuration files”の設定がありそうです。
234行目に/etc -> $(SEC_BIN) ;とあります。/etcディレクトリをSEC_BINでチェックしています。
SEC_BINの定義を探すと34行目付近にSEC_BIN=$(ReadOnly) ;とあります。
ReadOnlyは読み取り専用ファイル用にあらかじめ定義されたプロパティ(何をチェックするかを指定する)の組み合わせのようです。
この辺は細かくいじれそうもありません。

234行目付近の/etcディレクトリを検索するときに例外の指定ってできないのかな?
検索してみると以下のサイトが見つかりました。
プログラム備忘録 tripwire のエラー

検索対象外にしたいファイルのパスを””で囲って頭に!、お尻に;をつければよいようです。

対策してみます。
234行目付近を修正します。

#
# Other configuration files
#
(
rulename = “Other configuration files”,
severity = $(SIG_MED)
)
{
/etc -> $(SEC_BIN) ;
!”/etc/fake-hwclock.data”; ←追加
}

保存終了して、再度暗号化版の作成とデータベースの更新を実施。(どっちもルートで実行)
twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
tripwire -m i -s -c /etc/tripwire/tw.cfg

ファイルチェックを実行してみます。
tripwire -m c -s -c /etc/tripwire/tw.cfg

総検索ファイル数が1減って変更の報告も出なくなりました。うまくいったようです。

そういやメールで送る設定ってしてない。
メール送付は別スクリプトで実施することにして、設定はここまでにします。

【8.定期自動実行スクリプト作成とスケジューラ登録】

Tripwireを定期実行するスクリプトを作成します。(ルートのホームディレクトリで実施)
vi tripwire.sh

viが開くので以下のスクリプトを入力

#!/bin/bash

PATH=/usr/sbin:/usr/bin:/bin:

# Passphrase
LOCALPASS=xxxxxxxx # local key
SITEPASS=xxxxxxxx # site key

cd /etc/tripwire

# Tripwire check
tripwire -m c -s -c tw.cfg|mail -s “Tripwire(R) Integrity Check Report in `hostname`” root

# Policy file update
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

# database update
tripwire -m i -s -c tw.cfg -P $LOCALPASS
rm -f /var/lib/tripwire/*.bak

——— ここまで ———

ファイルのパーミッションを変更して実行権限を与えます。
chmod 700 tripwire.sh

さて、このスクリプトは以下のように動作します。
・Tripwireのチェックを実行、結果をメールでroot宛に送付
・ポリシーファイルを最新化
・最新化されたポリシーファイルでデータベースを最新化

メールの設定ちゃんとしてないと心配してましたが、
このスクリプトで結果をメール送付しているので無問題ですね。

定期実行するためにcronに登録します。
crontab -e

設定変更していないとnanoが立ち上がる。
以下の行を最後に追加します。(この設定では毎日AM6:00に実行する設定です)
# m h dom mon dow command
00 06 * * * /root/tripwire.sh

Ctrl+Oで保存、Ctrl+Xで終了します。

【9.動作確認とテキスト版設定ファイル&ポリシーファイルの削除】

最後に作成したスクリプトからtripwireを実行してみます。
ルート権限のまま以下を実行
/root/tripwire.sh

このコマンドは先ほど書いた3つの操作を実行するため結構時間がかかりますので気長に待ちます。

これでルート宛にメールが送られていればOK。
私の場合は転送設定しているので個人のメアドにも同様にメールが送付されてきました。

ただし、元の実行スクリプトだと途中でファイルシステムエラーが出力されました。
### Warning: File system error.
### Filename: /var/lib/tripwire/raspberrypi.twd
### No such file or directory
### Continuing…

たぶんデータベース最新化前に元のデータベースファイルを削除しているのが原因です。気持ち悪いので改良してみます。
更新前にデータベースの元のファイルを残してデータベースをアップデートして、同時に作成されるバックアップファイルを削除するようにします。
最後のデータベース更新部を以下のように変更しました。

# database update
rm -f /var/tripwire/lib/tripwire/*.twd*
tripwire -m i -s -c tw.cfg -P $LOCALPASS

# database update
tripwire -m i -s -c tw.cfg -P $LOCALPASS
rm -f /var/lib/tripwire/*.bak

これでエラーが消えるはず。もう一度実行してエラーが出ないことを確認。
なお、上記のスクリプトは対応済みのものを記載しているので、新しく作る人は大丈夫なはずです。

最終動作確認ができたのでテキスト版の設定ファイルを削除してしまいます。
rm -f /etc/tripwire/twcfg.txt

なおポリシーファイルのテキスト版は自動実行スクリプトによって削除されてました。

以上でファイル改竄検知システムの導入は終了です。
次回、ルートキット検出システムを導入してセキュリティ向上はひと段落の予定。

2014年4月27日作成
2014年5月5日草稿公開

スポンサーリンク
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル(大)広告