Tripwireを用いたシステム改ざん検知ツールを導入する

Tripwireを用いた改竄検知システムの構築

はじめに

Tripwireは、1992年に開発された侵入検知システムで、古くから多くのUNIXプラットフォームで利用されています。

 Tripwireはサーバに加えられるすべての変更を記録し、管理者に通知することが出来ます。この改ざん検知(変更検知)は外部からハッキングによる侵入や組織内部の管理業務による操作ーー悪意のある・なしに関わらずーー記録されます。

 これは改ざん検知ツールを導入したときのシステムをベースラインとして記録し、それ以降のシステムに対する変更点を随時記録していきます。 システムに対して行われる重要な変更を検知する仕組みをもつことで、不正アクセスの原因や被害状況、復旧までの十分な情報提供に利用することが出来ます。

今回は、ホスト型IDS(Intrusion Detection System)のTripwireを用いた侵入検知システムの構築方法を解説します。

前提条件

構築に必要なサーバー要件および、導入パッケージは下記のとおりです。

  1. サーバー要件

    サーバー要件は、次のとおりです。

    ホスト名centos
    IPアドレス192.168.0.20
    OSCentOS 6.5 i386
    サードパーティリポジトリEPEL
  2. 導入するパッケージ

    導入するパッケージは、次のとおりです。

    パッケージ名バージョン
    mutt1.5.20
    mailx12.4
    tripwire2.4.1.2

システムの構築

下記の手順で構築します。

  1. メール関連パッケージのインストール
    $ sudo yum -y install mutt mailx
    
    [vagrant@centos ~]$ sudo yum -y install mutt mailx
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    Including mirror: ftp.jaist.ac.jp
    Including mirror: ftp.tsukuba.wide.ad.jp
    Including mirror: ftp.riken.jp
    Including mirror: ftp.nara.wide.ad.jp
    Including mirror: ftp.iij.ad.jp
    Including mirror: www.ftp.ne.jp
    Including mirror: mirror.fairway.ne.jp
     * base: ftp.jaist.ac.jp
    Including mirror: ftp.jaist.ac.jp
    Including mirror: ftp.tsukuba.wide.ad.jp
    Including mirror: ftp.riken.jp
    Including mirror: ftp.nara.wide.ad.jp
    Including mirror: ftp.iij.ad.jp
    Including mirror: www.ftp.ne.jp
    Including mirror: mirror.fairway.ne.jp
     * extras: ftp.jaist.ac.jp
    Including mirror: ftp.jaist.ac.jp
    Including mirror: ftp.tsukuba.wide.ad.jp
    Including mirror: ftp.riken.jp
    Including mirror: ftp.nara.wide.ad.jp
    Including mirror: ftp.iij.ad.jp
    Including mirror: www.ftp.ne.jp
     * updates: ftp.jaist.ac.jp
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package mailx.i686 0:12.4-7.el6 will be installed
    
    ================================================================================
    Installing:
     mailx      i686      12.4-7.el6                                base      225 k
     mutt       i686      5:1.5.20-2.20091214hg736b6a.el6_1.1       base      1.2 M
    
    Transaction Summary
    ================================================================================
    Install       2 Package(s)
    
    Total download size: 1.5 M
    Installed size: 4.7 M
    Downloading Packages:
    (1/2): mailx-12.4-7.el6.i686.rpm                         | 225 kB     00:00
    (2/2): mutt-1.5.20-2.20091214hg736b6a.el6_1.1.i686.rpm   | 1.2 MB     00:00
    --------------------------------------------------------------------------------
    Total                                           261 kB/s | 1.5 MB     00:05
    Running rpm_check_debug
    Running Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Installing : 5:mutt-1.5.20-2.20091214hg736b6a.el6_1.1.i686                1/2
      Installing : mailx-12.4-7.el6.i686                                        2/2
      Verifying  : mailx-12.4-7.el6.i686                                        1/2
      Verifying  : 5:mutt-1.5.20-2.20091214hg736b6a.el6_1.1.i686                2/2
    
    Installed:
      mailx.i686 0:12.4-7.el6     mutt.i686 5:1.5.20-2.20091214hg736b6a.el6_1.1
    
    Complete!
    
  2. Tripwireのインストール
    $ sudo yum --enablerepo=epel -y install tripwire
    
    [vagrant@centos ~]$ sudo yum --enablerepo=epel -y install tripwire
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    epel/metalink                                            | 6.1 kB     00:00
    Including mirror: ftp.jaist.ac.jp
    Including mirror: ftp.tsukuba.wide.ad.jp
    Including mirror: ftp.riken.jp
    Including mirror: ftp.nara.wide.ad.jp
    Including mirror: ftp.iij.ad.jp
    Including mirror: www.ftp.ne.jp
    Including mirror: mirror.fairway.ne.jp
     * base: ftp.jaist.ac.jp
    Including mirror: ftp.jaist.ac.jp
    Including mirror: ftp.tsukuba.wide.ad.jp
    Including mirror: ftp.riken.jp
    Including mirror: ftp.iij.ad.jp
     * epel: ftp.jaist.ac.jp
    Including mirror: ftp.jaist.ac.jp
    Including mirror: ftp.riken.jp
    Including mirror: ftp.nara.wide.ad.jp
    Including mirror: ftp.iij.ad.jp
    Including mirror: www.ftp.ne.jp
    
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ================================================================================
     Package           Arch          Version                    Repository     Size
    ================================================================================
    Installing:
     tripwire          i686          2.4.1.2-11.el6             epel          1.2 M
    
    Transaction Summary
    ================================================================================
    Install       1 Package(s)
    
    Total download size: 1.2 M
    Installed size: 3.7 M
    Downloading Packages:
    tripwire-2.4.1.2-11.el6.i686.rpm                         | 1.2 MB     00:00
    Running rpm_check_debug
    Running Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Installing : tripwire-2.4.1.2-11.el6.i686                                 1/1
      Verifying  : tripwire-2.4.1.2-11.el6.i686                                 1/1
    
    Installed:
      tripwire.i686 0:2.4.1.2-11.el6
    
    Complete!
    
  3. サイトキーの作成

    サイトキーは、設定ファイル、ポリシーファイルの暗号化・署名に使用します。
    なお、署名はデータの完全性をチェックするために生成されます。

    $ sudo rm -f /etc/tripwire/site.key
    $ sudo twadmin --generate-keys --site-keyfile /etc/tripwire/site.key
    
    [vagrant@centos ~]$ sudo rm -f /etc/tripwire/site.key
    [vagrant@centos ~]$ sudo twadmin --generate-keys --site-keyfile /etc/tripwire/site.key
    
    (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.
    
  4. ローカルキーの作成

    ローカルキーは、データベースの更新、レポートファイルの保護に使用されます。

    $ sudo rm -f /etc/tripwire/`hostname`-local.key
    $ sudo twadmin --generate-keys --local-keyfile /etc/tripwire/`hostname`-local.key
    
    [vagrant@centos ~]$ sudo rm -f /etc/tripwire/`hostname`-local.key
    [vagrant@centos ~]$ sudo twadmin --generate-keys --local-keyfile /etc/tripwire/`hostname`-local.key
    
    (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.
    
  5. テキスト設定ファイルの編集

    Tripwire設定ファイルを下記のとおり修正します。

    $ sudo vi /etc/tripwire/twcfg.txt
    
    (変更前)
    LOOSEDIRECTORYCHECKING =false
    REPORTLEVEL            =3
    
    (変更後)
    LOOSEDIRECTORYCHECKING =true
    REPORTLEVEL            =4
    
    4009-07
  6. バイナリ設定ファイルの生成

    テキスト設定ファイル(twcfg.txt)から、バイナリ設定ファイル(tw.cfg)を生成します。
    生成の際には、サイトキーのパスフレーズが必要です。

    $ sudo twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
    
    4009-08

    これにより、テキストベースの設定ファイルが、署名暗号化されたバイナリファイルに変換されます。

  7. テキストポリシーファイルの最適化

    デフォルトでインストールされたテキストポリシーファイルをそのまま使用すると、システムに存在しないファイルをチェックしてしまうため、CentOSで自宅サーバー構築で公開されている最適化スクリプトtwpolmake.plを使用して、デフォルトのポリシーファイルを最適化します。

    $ sudo vi /etc/tripwire/twpolmake.pl
    
    4009-09

    最適化されたポリシーファイルを生成します。

    $ perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt | sudo tee /etc/tripwire/twpol.txt.new
    
    [vagrant@centos ~]$ perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt | sudo tee /etc/tripwire/twpol.txt.new
    # identifier:   tripwire IDS policy input file
    # host:         Fedora Core release 1 (Yarrow)
    # version:      2.3.1-19.fdr.1
    # maintainer:   Keith G. Robertson-Turner 
    # validator:    unvalidated
    # date:         Tue Jun 15 17:09:21 BST 2004
    
    # description:
    # This is an example Tripwire Policy input file. It is intended as  the
    # starting point to creating your own custom Tripwire Policy. Referring
    # to it, as well as the Tripwire Policy Guide, should give  you  enough
    # information to make a good custom Tripwire Policy  that  better  fits
    
  8. バイナリポリシーファイルの生成

    テキストポリシーファイル(twpol.txt.new)から、バイナリポリシーファイル(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.new
    
    4009-11
  9. データベースの初期化

    Tripwireでは、ポリシーファイルを元に、ファイルやフォルダの情報を、署名暗号化されたデータベースとして記録します。このデータベースの内容と現在の内容の差異を、改竄として認識します。
    初期化の際には、ローカルキーのパスフレーズが必要です。

    $ sudo tripwire --init
    
    [vagrant@centos ~]$ sudo tripwire --init
    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/centos.twd
    The database was successfully generated.
    
  10. 改竄チェックの実行

    ベースとなるデータベースが作成されましたので、手動で改竄チェックを実行します。

    $ sudo tripwire --check
    
    4009-13 4009-14

    なお、初期化時に作成されたDBファイル(centos.twd)が検出されていますが問題ありません。

  11. cron実行ファイルの編集

    CentOSでは、/etc/cron.daily/tripwire-checkがインストールされますので、この実行ファイルを下記のとおり編集します。
    なお、SITEPASSとLOCALPASSは、設定したパスフレーズに読み替えて下さい。

    SITEPASS=xxxxx
    LOCALPASS=yyyy
    
    tripwire --check | mail -s "Tripwire Check Report in `hostname`" vagrant
    
    cd /etc/tripwire
    
    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 1> /dev/null
    rm -f twpol.txt* *.bak
    
    tripwire --init -P $LOCALPASS
    
    4009-15
  12. cron実行ファイルの実行

    編集したcron実行ファイルを実行します。

    $ sudo /etc/cron.daily/tripwire-check
    
    4009-16

    実行すると、メールが指定したローカルユーザー宛に送信されます。

    $ mutt
    
    4009-17
  13. crontabへの登録

    /etc/cron.daily下の実行ファイルを実行するため、crontabに登録します。
    ここでは、毎日6時に改竄チェックを実行する設定にしています。

    sudo crontab -e
    
    4009-18
  14. 以上で、改竄検知システムの構築は終了です。

まとめ

ここまで、Tripwireを用いた侵入検知システムの構築方法を解説しました。Tripwireは、ホスト型IDSの草分け的なソフトウエアですが、現在も多くのサイトでされており、今後さらに利用が増える事が予想されます。本記事を参考に、実績のある侵入検知システムを導入しましょう。

Comments are closed.