Tripwire によるファイル監視

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、強力なホスト型侵入検知システム(HIDS)である Tripwire を使用して、ファイルの整合性を監視する方法を学びます。Tripwire は、システムファイルのベースライン(基準)データベースを作成し、定期的にスキャンを行うことで、ファイルの追加、削除、または変更を検知します。このプロセスは、不正な変更を特定し、システムのセキュリティを維持するために不可欠です。

セキュリティキーの初期設定から、監視ポリシーのカスタマイズ、ベースラインの作成、変更の検知、そしてレポートの確認まで、一連のプロセスを体験します。

Tripwire キーの設定

実験へようこそ。時間を節約するため、環境には tripwire パッケージが事前にインストールされています。最初のタスクは、Tripwire がデータベースや設定ファイルを保護するために使用する暗号化キーを設定することです。これらのキーにより、攻撃者が自身の形跡を消すために Tripwire 自体のファイルを改ざんすることを防ぎます。

  1. まず、バージョンを確認して Tripwire がインストールされていることを確認します。

    tripwire --version
    

    インストールされている Tripwire のバージョンが表示されます。

    Tripwire(R) 2.4.3.7
    (i686-pc-linux-gnu)
    ...
    
  2. 次に、twadmin を使用して暗号化キーを手動で生成します。「サイトキー(site key)」と「ローカルキー(local key)」の両方を作成する必要があります。サイトキーはポリシーファイルと設定ファイルを保護し、ローカルキーはローカルマシンのデータベースを保護します。

    まず、サイトキーを生成します。

    sudo twadmin --generate-keys --site-keyfile /etc/tripwire/site.key
    

    キーファイルが既に存在する場合は、上書きするかどうか尋ねられます。y を入力して Enter キーを押してください。

    サイトキーのパスフレーズを求められたら、labex-password と入力して Enter キーを押します。確認のため、もう一度同じパスフレーズを入力してください。

    注意: セキュリティのため、パスフレーズの入力中は文字が表示されませんが、入力はシステムに受け付けられています。

  3. 次に、ローカルキーを生成します。

    sudo twadmin --generate-keys --local-keyfile /etc/tripwire/$(hostname)-local.key
    

    同様に、上書きの確認が出た場合は y を入力して Enter キーを押します。

    ローカルキーのパスフレーズを求められたら、labex-password と入力して Enter キーを押します。確認入力を済ませてください。ここでも入力内容は表示されません。

    パスフレーズの入力が終わると、両方のキーが生成され /etc/tripwire/ ディレクトリに保存されます。キーの生成プロセスには数分かかる場合があります。

監視ポリシーのカスタマイズ

初期データベース(ベースライン)を作成する前に、Tripwire がどのファイルやディレクトリを監視すべきかを設定する必要があります。デフォルトのポリシーファイルには、初期化中にセグメンテーション違反(segmentation fault)を引き起こす可能性のある互換性の問題があるため、重要なシステムファイルとプロジェクトディレクトリに絞った簡略化されたポリシーを作成します。

  1. まず、元のポリシーファイルのバックアップを作成します。

    sudo cp /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.bak
    
  2. 問題の原因となる仮想ファイルシステムを避けた、新しい簡略版ポリシーファイルを作成します。

    sudo nano /etc/tripwire/twpol-simple.txt
    
  3. ファイルに以下の内容を追加します。このポリシーは、初期化エラーの原因となるパスを避けつつ、重要なシステムファイルとプロジェクトディレクトリを監視します。

    #
    ## Simplified Tripwire Policy File for Lab Environment
    #
    
    @@section GLOBAL
    TWBIN = /usr/sbin;
    TWETC = /etc/tripwire;
    TWVAR = /var/lib/tripwire;
    
    @@section FS
    
    SEC_CRIT      = $(IgnoreNone)-SHa ;
    SEC_BIN       = $(ReadOnly) ;
    SEC_CONFIG    = $(Dynamic) ;
    SEC_LOG       = $(Growing) ;
    SEC_INVARIANT = +tpug ;
    SIG_LOW       = 33 ;
    SIG_MED       = 66 ;
    SIG_HI        = 100 ;
    
    (
      rulename = "Tripwire Binaries",
      severity = $(SIG_HI)
    )
    {
        $(TWBIN)/siggen         -> $(SEC_BIN) ;
        $(TWBIN)/tripwire       -> $(SEC_BIN) ;
        $(TWBIN)/twadmin        -> $(SEC_BIN) ;
        $(TWBIN)/twprint        -> $(SEC_BIN) ;
    }
    
    (
      rulename = "Tripwire Data Files",
      severity = $(SIG_HI)
    )
    {
        $(TWVAR)/$(HOSTNAME).twd    -> $(SEC_CONFIG) -i ;
        $(TWETC)/tw.pol             -> $(SEC_BIN) -i ;
        $(TWETC)/tw.cfg             -> $(SEC_BIN) -i ;
        $(TWETC)/$(HOSTNAME)-local.key  -> $(SEC_BIN) ;
        $(TWETC)/site.key           -> $(SEC_BIN) ;
        $(TWVAR)/report             -> $(SEC_CONFIG) (recurse=0) ;
    }
    
    (
      rulename = "Critical system files",
      severity = $(SIG_HI)
    )
    {
        /bin            -> $(SEC_BIN) ;
        /sbin           -> $(SEC_BIN) ;
        /etc/passwd     -> $(SEC_CONFIG) ;
        /etc/shadow     -> $(SEC_CONFIG) ;
    }
    
    (
      rulename = "Lab Project Files",
      severity = $(SIG_HI)
    )
    {
      /home/labex/project        -> $(SEC_BIN) ;
    }
    
  4. Ctrl + O を押してから Enter で保存し、Ctrl + Xnano を終了します。

  5. 元のポリシーファイルを、作成した簡略版で置き換えます。

    sudo cp /etc/tripwire/twpol-simple.txt /etc/tripwire/twpol.txt
    

これで、実験環境で安定して動作する簡略化された監視ポリシーが作成されました。次のステップでは、このポリシーを使用して初期データベースを作成します。

Tripwire データベースの初期化

ポリシーの準備が整ったので、Tripwire データベースを作成します。このデータベースは、システムの「正常な状態」を示すベースラインのスナップショットとして機能します。Tripwire は、現在のファイルの状態をこのベースラインと比較して変更を検知します。

  1. まず、互換性を確保するために、新しいサイトキーを使用して設定ファイルを再作成します。

    sudo twadmin --create-cfgfile --site-keyfile /etc/tripwire/site.key /etc/tripwire/twcfg.txt
    

    サイトキーのパスフレーズを求められます。labex-password を入力して Enter キーを押してください。

  2. 簡略化したポリシーファイルを、Tripwire が使用する署名済みのバイナリ形式に変換します。

    sudo twadmin --create-polfile /etc/tripwire/twpol.txt
    

    ここでも、求められたらサイトキーのパスフレーズ(labex-password)を入力します。

  3. データベースを初期化します。このコマンドは、ポリシーで指定されたすべてのファイルとディレクトリをスキャンし、その暗号化署名と属性を記録します。

    sudo tripwire --init
    

    ローカルキーのパスフレーズを求められます。labex-password を入力して Enter キーを押してください。

  4. 初期化中に、データベースファイルがまだ存在しないことに関する警告が表示されることがあります。

    #### Warning: File system error.
    #### Filename: /var/lib/tripwire/68b1139d06fc790d9895e107.twd
    #### No such file or directory
    #### Continuing...
    

    これは最初の初期化時には正常な動作です。プロセスはそのまま続行され、データベースファイルが作成されます。

  5. プロセスが完了したら、データベースファイルが作成されたことを確認します。

    ls -l /var/lib/tripwire/
    

    マシンのホスト名に .twd 拡張子がついたファイル(例:68b1139d06fc790d9895e107.twd)が表示されるはずです。このファイルが存在すれば、ベースラインデータベースの構築は成功です。

    total 8
    -rw-r--r-- 1 root root 4164 Aug 29 11:00 68b1139d06fc790d9895e107.twd
    drwxr-xr-x 2 root root    6 Nov 11  2021 report
    

これで Tripwire システムがベースラインデータベースとともに適切に初期化されました。今後、監視対象のファイルに変更があった場合、整合性チェックを実行することで検知できるようになります。

ファイル変更の検知と報告

Tripwire のベースラインが作成されたので、変更を検知できるかテストしてみましょう。プロジェクトディレクトリに新しいファイルを作成し、Tripwire が監視エリアの変更をどのように捉えるかを確認します。

  1. まず、project ディレクトリに新しいファイルを作成します。このディレクトリは、ポリシーで明示的に監視対象に加えた場所です。

    touch ~/project/test_file.txt
    
  2. 変更を加えた状態で、整合性チェックを実行します。Tripwire はシステムをスキャンし、ベースラインデータベースと比較します。

    sudo tripwire --check
    

    ローカルキーのパスフレーズを求められます。labex-password を入力して Enter キーを押してください。

  3. スキャンが完了すると、Tripwire はレポートを生成し、コンソールに概要を表示します。概要には、追加または変更されたオブジェクトが強調表示されます。以下のような出力が表示されるはずです。

    ===============================================================================
    Rule Summary:
    ===============================================================================
    
      Rule Name                       Severity Level    Added    Removed  Modified
      ---------                       --------------    -----    -------  --------
      Tripwire Binaries               100               0        0        0
      Critical system files           100               0        0        0
    * Tripwire Data Files             100               1        0        0
    * Lab Project Files               100               1        0        1
      (/home/labex/project)
    
    Total objects scanned:  16
    Total violations found:  3
    
    ===============================================================================
    Object Summary:
    ===============================================================================
    
    -------------------------------------------------------------------------------
    Rule Name: Lab Project Files (/home/labex/project)
    Severity Level: 100
    -------------------------------------------------------------------------------
    
    Added:
    "/home/labex/project/test_file.txt"
    
    Modified:
    "/home/labex/project"
    
  4. レポートには、Tripwire が以下の内容を検知したことが示されています。

    • Added(追加): プロジェクトディレクトリ内の新しい test_file.txt
    • Modified(変更): /home/labex/project ディレクトリ自体(内容が変化したため)
    • Tripwire Data Files: データベースファイルも「追加」としてフラグが立っています。これは初期化後、初めてのチェックであるためです。

この出力により、Tripwire が行ったファイルシステムの変更を正しく検知したことが確認できました。

整合性レポートの確認

--check コマンドによる概要でも状況は把握できますが、詳細な分析を行うにはフルレポートファイルを確認します。これらのレポートはバイナリ形式で保存されているため、twprint ユーティリティを使用して読み取る必要があります。

  1. まず、レポートディレクトリの内容をリスト表示して、最新のレポート名を確認します。レポートのファイル名にはタイムスタンプが含まれています。

    sudo ls -lt /var/lib/tripwire/report/
    

    レポートファイルが一覧表示され、一番上が最新のものです。ファイル名をメモしてください。通常、hostname-YYYYMMDD-HHMMSS.twr という形式になっています。

    total 4
    -rw------- 1 root root 3456 Aug 29 11:02 68b1139d06fc790d9895e107-20250829-110252.twr
    
  2. twprint コマンドを使用して、レポートを人間が読める形式で表示します。[REPORT_FILENAME] を先ほど確認した実際のファイル名に置き換えてください。

    sudo twprint --print-report --twrfile /var/lib/tripwire/report/[REPORT_FILENAME]
    

    例:

    sudo twprint --print-report --twrfile /var/lib/tripwire/report/68b1139d06fc790d9895e107-20250829-110252.twr
    
  3. 詳細レポートには、概要と同じ情報に加えてメタデータが表示されます。

    Report created on:            Fri Aug 29 11:02:52 2025
    Database last updated on:     Never
    
    Host name:                    68b1139d06fc790d9895e107
    Host IP address:              172.18.0.8
    Policy file used:             /etc/tripwire/tw.pol
    Configuration file used:      /etc/tripwire/tw.cfg
    Database file used:           /var/lib/tripwire/68b1139d06fc790d9895e107.twd
    Command line used:            tripwire --check
    

    レポートには、タイムスタンプ、ファイルのプロパティ、チェックサムなど、各変更に関する包括的な詳細が含まれています。このレベルの詳細は、システムで具体的にどのような変更が発生したかを理解するためのフォレンジック分析(科学捜査的分析)において非常に重要です。

  4. --verbose フラグを使用すると、ファイル属性を含むさらに詳細な情報を表示できます。

    sudo twprint --print-report --verbose --twrfile /var/lib/tripwire/report/[REPORT_FILENAME]
    

    これにより、検知された各変更について、ファイルの権限、所有者、サイズ、および各種暗号化ハッシュ値などの追加情報が表示されます。

これらのレポートの読み方を理解することは、システム管理者が潜在的なセキュリティインシデントを調査し、システムの整合性を維持するために不可欠です。

まとめ

この実験では、Tripwire を使用したファイル整合性監視の基本を学びました。Tripwire のセキュリティキーの設定、特定のプロジェクトディレクトリを含む監視ポリシーのカスタマイズ、およびシステムファイル状態のベースラインデータベースの構築に成功しました。

さらに、意図的にファイルを変更し、整合性チェックを実行してそれらの変更を検知し、詳細なレポートを分析して何が変更されたかを把握するという、システム管理者の核心的なワークフローを実践しました。これらのスキルは、システムのセキュリティを維持し、不正な活動を検知するための基礎となります。