Tripwireによるファイル改竄検知

スポンサーリンク
RockyLinux
この記事は約21分で読めます。
ランキングに参加しています。応援よろしくお願いします。
ブログランキング・にほんブログ村へ 人気ブログランキングへ FC2ブログランキングへ
スポンサーリンク
この記事が気に入ったら
フォローしよう
最新情報をお届けします。

前回の「ホスト名(FQDN)設定、SSHサーバ及びNTPサーバ」に引き続き、Rocky Linux 9 サーバ構築手順次のステップは、「セキュリティ強化編」として「Tripwireによるファイル改竄検知」について設定を行います。

当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。

Tripwireは、ファイルの変更や改ざんを検知し、管理者に通知するセキュリティツールです。
サーバ構築時のファイルやディレクトリ情報をデータベース化し、現在の状態との差異を検知します。

EPELリポジトリから最新パッケージをインストールします

# dnf install -y epel-release
# dnf install -y tripwire perl-interpreter

サイトキーのパスフレーズは空のまま作成(任意で可)

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

'~ 中略 ~'

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

作成されたキーファイルの確認

# ll /etc/tripwire/
total 56
-rw-r--r-- 1 root root   931 Sep 11 11:42 site.key
-rw-r--r-- 1 root root   603 Nov  5  2023 twcfg.txt
-rw-r--r-- 1 root root 46658 Sep 11 11:34 twpol.txt

ローカルキーのパスフレーズは空のまま作成(任意で可)

# twadmin --generate-keys --local-keyfile /etc/tripwire/`hostname`-local.key

'~ 中略 ~'

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

オプション説明:

  • --generate-keys : 新しい暗号化キーを生成
  • --site-keyfile : サイトキーファイルのパスを指定
  • --local-keyfile : ローカルキーファイルのパスを指定

サイトキーとローカルキーの違い:

  • サイトキー : 設定ファイルとポリシーファイルの署名・暗号化に使用
  • ローカルキー : データベースファイルとレポートファイルの署名・暗号化に使用

Tripwireの警告レベルを変更する

# vi /etc/tripwire/twcfg.txt

'~ 中略 ~'

LOOSEDIRECTORYCHECKING =true

'~ 中略 ~'

REPORTLEVEL            =4

'~ 略 ~'
REPORTLEVEL説明
0変更があった場合に、何のレポートも生成しません。
デバッグ目的や、変更を一切記録したくない場合に利用されます。
1変更があったファイルのリストのみを出力します。
変更されたファイル名、ファイルサイズ、タイムスタンプなどの基本的な情報が得られます。
2変更されたファイルの内容に関する詳細な情報を表示します。
ファイルの内容の差分、変更された部分などが表示されます。
侵入者がファイルの内容を改ざんした場合など、より詳細な分析に役立ちます。
3レベル2に加えて、システム全体の状態に関する情報を表示します。
システムの負荷、ネットワーク接続、プロセス情報など、より広範囲な情報が得られます。
4レベル3に加えて、詳細な監査証跡情報を生成します。
システムの変更履歴を詳細に記録し、フォレンジック調査に役立ちます。

テキスト形式の設定ファイル(twcfg.txt)から署名付きの暗号化バイナリ設定ファイル(tw.cfg)を生成します

# 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

オプション説明:

  • -m F (–create-cfgfile) : 設定ファイルの生成モード
  • -c : 出力する設定ファイル(tw.cfg)のパスを指定
  • -S : サイトキーファイルのパスを指定

ポリシー最適化スクリプトをダウンロードし、実行します

# curl -LO https://raw.githubusercontent.com/Tripwire/tripwire-open-source/master/contrib/twpolmake.pl
# perl ./twpolmake.pl /etc/tripwire/twpol.txt | tee /etc/tripwire/twpol.txt.new

生成したファイルを確認します

# ll /etc/tripwire/
total 116
-rw-r--r-- 1 root root   931 Sep 11 11:52 marusrv.maruweb.jp.net-local.key
-rw-r--r-- 1 root root   931 Sep 11 11:42 site.key
-rw-r--r-- 1 root root  4586 Sep 11 15:05 tw.cfg
-rw-r--r-- 1 root root   602 Sep 11 14:27 twcfg.txt
-rw-r--r-- 1 root root 46658 Sep 11 11:34 twpol.txt
-rw-r--r-- 1 root root 46908 Sep 11 16:06 twpol.txt.new

生成したテキスト形式ポリシーファイル(twpol.txt.new)から、署名付き暗号化のバイナリ形式ポリシーファイル(tw.pol)を生成します

# 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

オプション説明:

  • -m P (–create-polfile) : ポリシーファイルの生成モード
  • -p : 出力するポリシーファイル(tw.pol)のパスを指定
  • -c : 設定ファイル(tw.cfg)のパスを指定
  • -S : サイトキーファイルのパスを指定

ローカルキーを使用してデータベースを初期化します

# 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/marusrv.maruweb.jp.net.twd
The database was successfully generated.

オプション説明:

  • --init : 初期データベースを作成するモード
  • システム内の全ファイルをスキャンし、ベースラインデータベースを作成
Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/marusrv.maruweb.jp.net-20240911-230319.twr

'~ 略 ~'

/usr/local/bin/ディレクトリにファイルを作成して確認します

# touch /usr/local/bin/newfile
# tripwire --check

'~ 中略 ~'

  Rule Name                       Severity Level    Added    Removed  Modified
  ---------                       --------------    -----    -------  --------
* User binaries                   66                1        0        0

ファイルが追加されたことを検知できます

主要オプション:

  • --check : 整合性チェックを実行(デフォルトモード)
  • --interactive : 対話形式でチェック実行
  • --severity N : 指定した重要度レベル以上の違反のみ報告
  • --rule-name 'ルール名' : 特定のルールのみをチェック
  • --email-report : レポートをメールで送信

使用例:

# 重要度レベル80以上の違反のみチェック
tripwire --check --severity 80

# 特定のルールのみチェック
tripwire --check --rule-name "User binaries"

# 対話形式でチェック
tripwire --check --interactive

改ざん検知後、現在のファイルシステム状態を正常としてベースラインを更新します

# tripwire --update --accept-all --twrfile /var/lib/tripwire/report/marusrv.maruweb.jp.net-20241210-040303.twr
Please enter your local passphrase:
Wrote database file: /var/lib/tripwire/marusrv.maruweb.jp.net.twd

オプション説明:

  • --update : データベース更新モード
  • --accept-all : 全ての変更を自動承認
  • --twrfile : 更新の基となるレポートファイルを指定
  • --interactive : 対話形式で変更を選択的に承認

使用例:

# 対話形式で変更を選択的に更新
tripwire --update --twrfile /var/lib/tripwire/report/report.twr

# 特定の違反番号のみ更新
tripwire --update --accept '1,3,5' --twrfile /path/to/report.twr

Tripwireのポリシー更新には2つの方法があります。

tripwire --update-policy --accept-all --twrfile /path/to/report.twr

オプション説明:

  • --update-policy : 既存のポリシーを基に部分的な更新を実行
  • --accept-all : 全ての変更を自動承認
  • --twrfile : 更新の基となるレポートファイルを指定

運用中に改ざん検知ポリシーを更新する場合は、元となるポリシーファイルで編集を行った後、ポリシー設定ファイルの再生成とベースラインの更新を行います。

# 1. ポリシーファイルを編集
# vi twpol.txt.new

# 2. バイナリポリシーファイルを再生成
# twadmin --create-polfile /etc/tripwire/twpol.txt.new
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol

# 3. ポリシーファイルの内容確認
# twadmin --print-polfile

# 4. データベースを再初期化
# 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/marusrv.maruweb.jp.net.twd
The database was successfully generated.

# 5. 整合性チェック実行
# tripwire --check
Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...

適用場面:

  • 軽微なポリシー変更(ファイルの追加・削除など)
  • 既存ルールの調整
  • レポートに基づく段階的な更新

メリット:

  • 既存のデータベースを保持しながら更新
  • 変更履歴が追跡可能
  • 部分的な更新のため処理が高速

デメリット:

  • 大幅なポリシー変更には不向き
  • 複雑な変更では予期しない動作の可能性

実行例:

# 特定のファイルをチェック対象から除外したい場合
# まず現在の状態をチェック
tripwire --check

# 最新のレポートファイルを使用してポリシー更新
LATEST_REPORT=$(ls -t /var/lib/tripwire/report/*.twr | head -1)
tripwire --update-policy --twrfile "$LATEST_REPORT"

適用場面:

  • 大幅なポリシー変更
  • 新しいルールの追加
  • システム構成の大幅な変更後
  • ポリシーファイルの完全な見直し

メリット:

  • 完全な制御が可能
  • 大幅な変更に対応
  • ポリシーファイルの構造的な変更が可能
  • 確実性が高い

デメリット:

  • データベースの完全再作成が必要
  • 処理時間が長い
  • 既存の変更履歴が失われる

実行例:

# 新しいディレクトリを監視対象に追加する場合
vi /etc/tripwire/twpol.txt.new
# 以下のような内容を追加
# (
#   rulename = "Custom Application Files",
#   severity = $(SIG_HI)
# )
# {
#   /opt/myapp          -> $(SEC_BIN);
#   /var/log/myapp      -> $(SEC_LOG);
# }

# バイナリポリシーファイル再生成
twadmin --create-polfile /etc/tripwire/twpol.txt.new

# データベース再初期化
tripwire --init

推奨ケース:

# 例1: 新しいファイルが追加された場合の対応
tripwire --check  # 違反を検出
# レポートで新しいファイルを確認後
tripwire --update-policy --accept-all --twrfile /path/to/latest/report.twr

# 例2: 一部のファイルをチェック対象から除外
tripwire --update-policy --interactive --twrfile /path/to/report.twr
# 対話形式で特定の変更のみ承認

注意点:

  • レポートファイルに基づく更新のため、既存の違反状態を「正常」として承認する
  • 想定外の改ざんも同時に承認してしまう危険性がある

推奨ケース:

# 例1: 新しいアプリケーションのインストール後
vi /etc/tripwire/twpol.txt.new
# 新しいルールを追加
twadmin --create-polfile /etc/tripwire/twpol.txt.new
tripwire --init

# 例2: システムの大幅なアップデート後
# 既存のポリシーを全面見直し
vi /etc/tripwire/twpol.txt.new
twadmin --create-polfile /etc/tripwire/twpol.txt.new
tripwire --init

注意点:

  • データベースの完全再作成により、現在のベースラインがリセットされる
  • 時間がかかるため、システムが安定している時に実行する
#!/bin/bash
# 定期チェック後の自動更新スクリプト例

# チェック実行
tripwire --check

# 最新レポートの取得
LATEST_REPORT=$(ls -t /var/lib/tripwire/report/*.twr | head -1)

# レポートに含まれる違反の種類を確認
VIOLATIONS=$(twprint --print-report --twrfile "$LATEST_REPORT" | grep "Rule Name" | wc -l)

if [ $VIOLATIONS -le 5 ]; then
    # 軽微な変更の場合は自動更新
    echo "軽微な変更を検出。自動更新を実行します。"
    tripwire --update-policy --accept-all --twrfile "$LATEST_REPORT"
else
    # 多数の変更がある場合は手動確認を促す
    echo "多数の変更を検出。手動確認が必要です。"
    echo "レポートファイル: $LATEST_REPORT"
fi
#!/bin/bash
# システムメンテナンス後のポリシー更新スクリプト

echo "システムメンテナンス後のTripwireポリシー更新を開始します。"

# 現在のポリシーをバックアップ
cp /etc/tripwire/twpol.txt.new /etc/tripwire/twpol.txt.backup.$(date +%Y%m%d)

# ポリシーファイルの編集(必要に応じて)
echo "ポリシーファイルを確認してください: /etc/tripwire/twpol.txt.new"
read -p "編集が完了したらEnterを押してください..."

# バイナリポリシーファイル再生成
echo "バイナリポリシーファイルを生成中..."
twadmin --create-polfile /etc/tripwire/twpol.txt.new

# データベース再初期化
echo "データベースを再初期化中..."
tripwire --init

# 初回チェック実行
echo "初回チェックを実行中..."
tripwire --check

echo "ポリシー更新が完了しました。"

過去のレポートファイルを確認する場合、/var/lib/tripwire/reportディレクトリに格納されています

# twprint --print-report --twrfile /var/lib/tripwire/report/marusrv.maruweb.jp.net-20240911-231335.twr

主要オプション:

  • --print-report : レポートファイルの内容を表示
  • --twrfile : 表示するレポートファイルを指定
  • --verbose : 詳細情報を表示
  • --summary-only : サマリーのみ表示

使用例:

# 詳細レポートを表示
twprint --print-report --verbose --twrfile /var/lib/tripwire/report/report.twr

# サマリーのみ表示
twprint --print-report --summary-only --twrfile /var/lib/tripwire/report/report.twr
twprint --print-dbfile

オプション説明:

  • --print-dbfile : データベースファイルの内容を表示
  • --verbose : 詳細情報を含めて表示
#!/bin/bash
# 日次Tripwireチェック
REPORT_FILE="/var/lib/tripwire/report/$(hostname)-$(date +%Y%m%d-%H%M%S).twr"

# チェック実行
tripwire --check --email-report

# 最新のレポートファイルを確認
LATEST_REPORT=$(ls -t /var/lib/tripwire/report/*.twr | head -1)
echo "最新レポート: $LATEST_REPORT"

# レポートのサマリーを表示
twprint --print-report --summary-only --twrfile "$LATEST_REPORT"
# システムの重要ファイルのみチェック
tripwire --check --rule-name "Critical system boot files"
tripwire --check --rule-name "Root config files"
#!/bin/bash
# 30日以上古いレポートファイルを削除
find /var/lib/tripwire/report -name "*.twr" -mtime +30 -delete
echo "古いレポートファイルを削除しました: $(date)"

# 上記スクリプトを月1回実行するようcrontabに設定
# crontab -e
0 2 1 * * /root/cleanup_tripwire_reports.sh
  1. パスフレーズエラー
    Error: Incorrect passphrase
    • 対処 : キー生成時に設定したパスフレーズを正確に入力
  2. データベースファイルが見つからない
    Error: Database file not found
    • 対処 : 以下のコマンドでデータベースを再初期化

    • # tripwire --init
  3. ポリシーファイルの構文エラー
    Error: Parse error in policy file
    • 対処 : ポリシーファイルの構文を確認し、以下のコマンドで再生成

    • # twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
# 詳細なデバッグ情報を出力
tripwire --check --verbose

# 設定ファイルの構文チェック
twadmin --print-cfgfile

# ポリシーファイルの構文チェック
twadmin --print-polfile
  1. キーファイルの保護
    # キーファイルの権限を制限
    # chmod 600 /etc/tripwire/*.key
    # chown root:root /etc/tripwire/*.key
  2. パスフレーズの管理
    • 強力なパスフレーズを設定
    • 定期的なパスフレーズの変更
    • パスフレーズの安全な保管
  3. 定期的なポリシー見直し
    • システム変更に応じたポリシー更新
    • 不要なチェック対象の削除
    • 新しい重要ファイルの追加
  4. ログの監視
    # Tripwireのログを監視
    tail -f /var/log/messages | grep tripwire

    # 最新のレポートファイルを確認
    # ls -lt /var/lib/tripwire/report/ | head -5

    # システムログでTripwire関連のエラーを確認
    # grep -i tripwire /var/log/messages
  5. 監視対象の最適化
    # 不要なファイルをポリシーから除外(例)
    # vi /etc/tripwire/twpol.txt.new

    # 以下のような行をコメントアウトまたは削除
    # /tmp -> $(SEC_TMP);
    # /var/tmp -> $(SEC_TMP);

    # 重要なカスタムディレクトリを追加
    # /opt/important_app -> $(SEC_BIN);
    # /etc/important_config -> $(SEC_CONFIG);

これらを活用することにより、Tripwireをより効果的に運用できるようになります。

次回以降も引き続き「セキュリティ強化偏」として、以下の手順を実施します。

  1. セキュリティ強化
  2. メール転送設定
    • rootメール転送設定

これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。

コメント

タイトルとURLをコピーしました