カテゴリー
Linux

★2★インストールから設定まで【Tripwire】わたくしだって WordPress サーバの改ざん検知したい!【CentOS】

インストールのやり方や、操作の詳細、裏側などは以前の投稿でまとめました。

そこで次のページを参考にしながらインストール、そしていろいろ設定まで行なって運用開始まで行いたいと思います。

インストールは yum で自動的に行えるので難しくありません。インストール後のいろいろ設定して運用開始するまでが慣れない操作で大変です。少しずつ、何度も確認して進めて行きたいと思います。

次第〜おおまかな流れ

  1. Tripwire インストール ← yum で簡単♪
  2. 2 つのパスワード設定 ← サイト、ローカルの 2 種類
  3. 設定ファイルの作成 ← テキスト twcfg.txt 作って 暗号化 tw.cfg
  4. ポリシーファイルの作成 ← 最適化して暗号化 tw.pol
  5. ベースラインデータベースの作成 ← これで準備完了
  6. 整合性チェック ← はじめての改ざんチェック
  7. レポートのチェック ← 整合性チェックでできるファイル

運用を開始するまでには、インストールしてから、設定ファイル tw.cfg、ポリシーファイル tw.pol、ベースラインデータベースの作成、とさらに3つの段階を経ねばなりません。

設定ファイル tw.cfg、ポリシーファイル tw.pol、の違いがイマイチわかりません。調べましょう。さらに、どちらも暗号化剃る必要があり、手順は複雑です。一歩一歩ゆっくり進めて行きたいと思います。

  • 設定ファイル → Tripwire の設定を記述。Tripwire 自身について書きます。
  • ポリシーファイル → CentOS の改ざん検知対象、その詳細を記述。改ざん検知実行時の振る舞いを書きます。

1.Tripwire インストール 〜 EPEL yum で簡単♪

Tripwire は yum で簡単にインストール可能ですけれども、そのためには EPEL リポジトリが導入済みである必要があります。EPEL リポジトリを入れる方法については、以前の投稿で行っております。

では実際にインストールを行います。

yum --enablerepo=epel install tripwire

インストールされたバージョンは 2.4.1.1-1.el5、サイズは 1.7 M でした。

2.2 つのパスワード設定 〜 サイトとローカル、1つのコマンドで♪

参考サイトを見ておりますと、ソースから configure そして make してインストールした時点で2つのパスワード入力を求められておりました。また、別のサイトでは rpm でインストールした後、「/etc/tripwireディレクトリにあるtwinstall.sh」の実行で設定しておりました。

さて、yum でインストールしましたが、パスワード入力は求められませんでした。ここまでは予想通りです。

[root@oki2a24 ~]# ll /etc/tripwire/
合計 52
-rw-r--r-- 1 root root   603 12月 17  2008 twcfg.txt
-rw-r--r-- 1 root root 46536  7月 27 09:09 twpol.txt
[root@oki2a24 ~]#

あら?twinstall.sh がございませんわ?どういたしましょう?でも大丈夫です♪「tripwire-setup-keyfiles」コマンドで、サイトパスフレーズ、ローカルパスフレーズの設定が可能です。

tripwire-setup-keyfiles

ちなみに調べてみましたところ、Tripwire 関連のコマンドは、次のものがあるようです。頭の片隅に置いておきましょう。

  • /usr/sbin/tripwire-setup-keyfiles
  • /usr/sbin/tripwire
  • /usr/sbin/twadmin
  • /usr/sbin/twprint

作業に戻りまして、実際の設定風景は次のようになりました。

まずサイトパスフレーズの設定、次にローカルパスフレーズの設定です。

まだ続きまして、設定ファイルにサインニング(Signing configuration file…)するために、サイトパスフレーズの入力を、そしてポリシーファイルにサインニング(Signing policy file…)するために、再びサイトパスフレーズの入力を求められました。

----------------------------------------------
The Tripwire site and local passphrases are used to sign a  variety  of
files, such as the configuration, policy, and database files.

Passphrases should be at least 8 characters in length and contain  both
letters and numbers.

See the Tripwire manual for more information.

----------------------------------------------
Creating key files...

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the site keyfile passphrase:
Verify the site keyfile passphrase:
Generating key (this may take several minutes)...Key generation complete.

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the local keyfile passphrase:
Verify the local keyfile passphrase:
Generating key (this may take several minutes)...Key generation complete.

----------------------------------------------
Signing configuration file...
Please enter your site passphrase: 
Wrote configuration file: /etc/tripwire/tw.cfg

A clear-text version of the Tripwire configuration file:
/etc/tripwire/twcfg.txt
has been preserved for your inspection.  It  is  recommended  that  you
move this file to a secure location and/or encrypt it in place (using a
tool such as GPG, for example) after you have examined it.

----------------------------------------------
Signing policy file...
Please enter your site passphrase: 
Wrote policy file: /etc/tripwire/tw.pol

A clear-text version of the Tripwire policy file:
/etc/tripwire/twpol.txt
has been preserved for  your  inspection.  This  implements  a  minimal
policy, intended only to test  essential  Tripwire  functionality.  You
should edit the policy file to  describe  your  system,  and  then  use
twadmin to generate a new signed copy of the Tripwire policy.

Once you have a satisfactory Tripwire policy file, you should move  the
clear-text version to a secure location  and/or  encrypt  it  in  place
(using a tool such as GPG, for example).

Now run "tripwire --init" to enter Database Initialization  Mode.  This
reads the policy file, generates a database based on its contents,  and
then cryptographically signs the resulting  database.  Options  can  be
entered on the command line to specify which policy, configuration, and
key files are used  to  create  the  database.  The  filename  for  the
database can be specified as well. If no  options  are  specified,  the
default values from the current configuration file are used.

結果、次の2つのキーファイルが作成されました。

  • /etc/tripwire/site.key ← サイトパスフレーズより
  • /etc/tripwire/oki2a24.com-local.key ← ローカルパスフレーズより

作業終わってから振り返ってみますと、パスワードの設定時点で、設定ファイルとポリシーファイルの暗号化も行なっているようです。

ですから、この「2 つのパスワード設定」は次とその次の設定ファイルとポリシーファイルのテキスト作成が終わってから行えば、手順が簡略化できたと思います。

3.設定ファイルの作成 〜 テキスト作ってサイトパスフレーズで暗号化し tw.cfg 作る!

3−1.クリアテキストの設定ファイル(twcfg.txt)の作成

インストール時点で基となるとなる設定ファイル twcfg.txt がすでにできておりますので、次の部分のみ修正します。

  • LOOSEDIRECTORYCHECKING → 監査対象のディレクトリでファイルの追加/削除などがあるときに、ファイルとディレクトリの変更を両方検知する場合は false
  • EMAILREPORTLEVEL → メールで通知するレポートのレベル指定(0~4)
  • REPORTLEVEL → レポートの内容を表示する際のレベル指定(デフォルトは3)

最初に挙げた参考ページ以外に、次のページも項目の内容を把握するのに役に立ちました♪ありがとうございます。

では実際に編集していきます。

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 =true
MAILNOVIOLATIONS       =true
EMAILREPORTLEVEL       =4
REPORTLEVEL            =4
MAILMETHOD             =SENDMAIL
SYSLOGREPORTING        =false
MAILPROGRAM            =/usr/sbin/sendmail -oi -t

3−2.クリアテキストファイルを基にサイトパスフレーズを使って暗号署名したファイル(tw.cfg)を生成

そして暗号化です♪次はコマンドオプションの意味です。

  • -m F, –create-cfgfile → 暗号署名ファイル生成モード
  • -c cfgfile, –cfgfile cfgfile → これからつくる暗号署名された設定ファイル名を指定
  • -S sitekey, –site-keyfile sitekey → 設定ファイルを暗号署名するときに使用するサイトキーを指定

実際のコマンドです。

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

4.ポリシーファイルの作成 〜 既存ポリシーファイルテキストを最適化して、サイトパスフレーズで暗号化、tw.pol を作成♪

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

ポリシーファイルもインストール時点で作成されております。ポリシーファイルは、CentOS のどこを改ざん検知実行時の検査対象にするかを記述します。

この既存のポリシーファイルには問題がありまして、存在しないディレクトリやファイルが対象となっておりましたり、存在するディレクトリやファイルがコメント化されておりましたりします。

そこで、存在しないファイルのチェックを無効に、存在するファイルのチェックを有効にするPerlスクリプトを作成して、ポリシーファイルを最適化いたします。

この最適化スクリプトは、冒頭でも挙げさせていただきました、こちらのページのものを使用させていただきました。随分昔に書かれたプログラムですけれども、問題なく動きました。

早速作ります♪

vim /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) ;

ポリシーファイル最適化を実行します。実行後のファイルは twpol.txt.new として別途作成します。

perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt > /etc/tripwire/twpol.txt.new

4−2.最適化したクリアテキストのポリシーファイルを元にサイトパスフレーズを使ってポリシーファイルの暗号署名(tw.pol)を作成

コマンドのオプション説明です。

  • -m P → ポリシーファイル作成時に指定
  • -c cfgfile, –cfgfile cfgfile → 暗号署名された設定ファイル名を指定
  • -p polfile, –polfile polfile → 暗号署名されたポリシーファイルのファイル名を指定
  • -S sitekey, –site-keyfile sitekey → 設定ファイルを暗号署名するときに使用するサイトキーを指定
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

5.ベースラインデータベースの作成 〜 ローカルパスフレーズを使って、つまりは初期化です♪

ベースラインデータベースの作成は、これは初期化ともいうそうですが、ファイル改ざん検知実行時にこのベースラインデータベースと比較して改ざんされたか否かを判断するためのものと理解しております。ですので、このベースラインデータベースがありませんと、今までの苦労にはなんの意味もないことになります。

本ブログのサーバはインストール直後の状態ではありません。いろいろなデータが入っております。ですからベースラインデータベースの作成には若干時間がかかることと思います。本来であれば、CentOS インストール直後に行っておくべきかと存じます。

ですが始めるのに遅すぎるということはありません。気にせず、続けることといたしましょう。

コマンドオプションの解説です。

  • -m i → データベースの初期化時に指定
  • -c cfgfile, –cfgfile cfgfile → 暗号署名された設定ファイル名を指定

実際のコマンドは次です。

tripwire -m i -c /etc/tripwire/tw.cfg

ローカルパスフレーズの入力が求められました。

Please enter your local passphrase: 
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/oki2a24.com.twd
The database was successfully generated.

時間は 30 秒ほどで終わりました。思ったより短くてホッといたしました。

6.整合性チェック

Tripwire 使用の準備は終わっております。では実際に、改ざん検知実行してみましょう。

まず、コマンドオプションの内容です。

  • -m c → 整合性チェック時に指定
  • -c cfgfile, –cfgfile cfgfile → 暗号署名された設定ファイル名を指定

実行しました。

tripwire -m c -c /etc/tripwire/tw.cfg

すると次のように結果が表示されました。行頭に「*」がついたものが、改ざんチェックで引っかかったものです。

早速「Tripwire Data Files」で検知されたようです。内容を見てみますと「/var/lib/tripwire/oki2a24.com.twd が追加されている」とのことです。これは、先ほど作成いたしましたベースラインデータベースですね。ですから問題ありません。

Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/oki2a24.com-20130727-120039.twr

Tripwire(R) 2.4.1 Integrity Check Report

Report generated by:          root
Report created on:            2013年07月27日 12時00分39秒
Database last updated on:     Never

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

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

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

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

  Rule Name                       Severity Level    Added    Removed  Modified 
  ---------                       --------------    -----    -------  -------- 
  Invariant Directories           66                0        0        0        
  Temporary directories           33                0        0        0        
* Tripwire Data Files             100               1        0        0        
  User binaries                   66                0        0        0        
  Tripwire Binaries               100               0        0        0        
  Libraries                       66                0        0        0        
  Operating System Utilities      100               0        0        0        
  File System and Disk Administraton Programs
                                  100               0        0        0        
  Kernel Administration Programs  100               0        0        0        
  Networking Programs             100               0        0        0        
  System Administration Programs  100               0        0        0        
  Hardware and Device Control Programs
                                  100               0        0        0        
  System Information Programs     100               0        0        0        
  Application Information Programs
                                  100               0        0        0        
  (/sbin/rtmon)
  Shell Related Programs          100               0        0        0        
  Critical Utility Sym-Links      100               0        0        0        
  Shell Binaries                  100               0        0        0        
  Critical system boot files      100               0        0        0        
  System boot changes             100               0        0        0        
  OS executables and libraries    100               0        0        0        
  Critical configuration files    100               0        0        0        
  Security Control                100               0        0        0        
  Login Scripts                   100               0        0        0        
  Root config files               100               0        0        0        

Total objects scanned:  12599
Total violations found:  1

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

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

-------------------------------------------------------------------------------
Rule Name: Tripwire Data Files (/var/lib/tripwire)
Severity Level: 100
-------------------------------------------------------------------------------

Added:
"/var/lib/tripwire/oki2a24.com.twd"

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

No Errors

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

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.
Integrity check complete.

結果が表示されるまでの時間はこちらも 30 秒ほどかかりました。

改ざんチェックの結果を見て、問題ないと判断いたしましたけれども、このままではずっと同じファイルが引っかかったままです。ベースラインデータベースをアップデートする必要がありますが、それはまた別途勉強する予定といたします。

7.レポートのチェック

整合性チェックで改ざんを確認いたしますと、レポートファイルが作成されます。これも、見てみましょう。

まずは、レポートファイルが作られますディレクトリの確認です。

ll /var/lib/tripwire/report/

確かに、レポートファイルが作成されております。

合計 8
-rw-r--r-- 1 root root 6686  7月 27 12:01 oki2a24.com-20130727-120039.twr

では、レポートファイルの中身を見てみましょう。

まずはコマンドオプションです。

  • -m r → レポート表示時に指定
  • -c cfgfile, –cfgfile cfgfile → 暗号署名された設定ファイル名を指定
  • -r report, –twrfile report → 表示するレポートファイルを指定

確認のコマンドは次です。

twprint -m r -c /etc/tripwire/tw.cfg -r /var/lib/tripwire/report/oki2a24.com-20130727-120039.twr

先ほどの整合性チェックと同じ内容が表示されました。

おわりに

これで Tripwire がいつでも使用できます。次に考えるべきは、どこを自動化して、どのようなサイクルでチェックしていって、といった日々の運用です。

Tripwire に限らないと思うですけれども、ファイル改ざん検知は手数がかかりますわね。。。

少し休憩いたしまして、引き続き勉強&実践して行きたいと思います。

以上です。

コメントを残す