Tripwireによるファイル改ざん検知の導入〜設定〜運用の流れ

# はじめに
## Tripwireとは

ファイルの変更・改ざんを検知するためのソフトウェアです。
[Tripwire, Inc.](https://www.tripwire.com/)による商用の製品も提供されていますが、ここではGitHub上で公開されているOSS版について述べます。
GitHub上のURLは下です。

- https://github.com/Tripwire/tripwire-open-source

GPL v2.0でライセンスされています。

Tripwireはリアルタイムの改ざん検出はできませんが、定期的にチェックを実行することでファイルの変更・改ざんを検知し、レポートすることができます。

## 想定読者

サーバの管理者などで、ファイル改ざん検知のニーズがある人。
主にLinuxシステムの利用者。（筆者がそうなので）

## 本記事の趣旨

Tripwireは歴史の古いツールなので、検索すると情報は数多く見つかるのですが、中々まとまったものを見つけられませんでした。
そこで、本記事では初期設定〜定常運用までの流れに沿って、必要になるであろう情報をまとめてみました。

# 環境要件

筆者はLinuxで動かした経験しかありませんが、上のリポジトリに含まれる[README](https://github.com/Tripwire/tripwire-open-source/blob/master/README.md#prerequisites)によれば、POSIX-likeなOSであれば動きそうです。
Linuxの他、macOSやWindowsのCygwin上でも動作するようですが、Windows特有のファイル属性やレジストリの監視はサポートされないとのことです。

# ドキュメント

一次情報としては、上の[README](https://github.com/Tripwire/tripwire-open-source/blob/master/README.md)や、ソフトウェアに同梱されているman pageの内容が充実しています。
オンラインで閲覧できるリンクを以下に貼っておきます。

- [twintro(8)](https://linux.die.net/man/8/twintro) ... Introduction
- [twfiles(5)](https://linux.die.net/man/5/twfiles) ... ファイル構成とバックアッププロセス
- CLIドキュメント:
  - [twadmin(8)](https://linux.die.net/man/8/twadmin) ... 管理用コマンド兼ユーティリティー
  - [tripwire(8)](https://linux.die.net/man/8/tripwire) ... 改ざんチェックコマンド
- 設定ファイル:
  - [twconfig(4)](https://linux.die.net/man/4/twconfig) ... tripwireプログラムの動作や環境設定
  - [twpolicy(4)](https://linux.die.net/man/4/twpolicy) ... 改ざん検知の対象ファイル群や検査ポリシーの設定

# 導入〜運用の流れ

1. インストール
2. 初期セットアップ
  1. サイトキーとローカルキーの生成
  2. 設定ファイル(cfg)の生成
  3. ポリシーファイル(pol)の生成
  4. データベースの初期化
3. 定常運用
  1. 改ざんチェックの定期実行
  2. データベースの更新
  3. 改ざん検知ポリシーの更新

# インストール

Linuxにおいては、主要なディストリビューションでは利用可能なパッケージがあります。

```sh
# RHEL系
yum install tripwire --enablerepo=epel

# Fedora
dnf install tripwire

# Debian系
apt install tripwire
```

※RHEL系のepelについては脚注[^1][^2]などを参考に設定ください。

[^1]: https://fedoraproject.org/wiki/EPEL/ja
[^2]: [Centos5,6,7にEPEL/REMIのyumリポジトリの追加をする。 - Qiita](https://qiita.com/chidakiyo/items/3b81a442dda34d439b42)

# 初期設定

以降の手順について、一部は以下の動作環境におけるものです。

- CentOS 7系
- Tripwire v2.4.3.7

## サイトキーとローカルキーの生成

暗号署名を行うためのサイトキーとローカルキーを生成します。  
サイトキーは、サイト全体で共通の設定ファイルやポリシーファイルなどの暗号化に、ローカルキーはマシンローカルのTripwireデータベースなどの暗号化に用いられます。

```sh:サイトキー、ローカルキーの生成
tripwire-setup-keyfiles
```

上のコマンドを実行すると、サイトパスフレーズとローカルパスフレーズの入力を求められるので、別々のパスフレーズを設定します。

コマンドはシェルスクリプトになっており、内部的には `twadmin --generate-keys` を実行しています。

## cfgファイルの設定と生成

cfg設定ファイルはTripwireの動作に関わる種々の設定を行うファイルです。
詳しい設定項目は[twconfig(4)](https://linux.die.net/man/4/twconfig) man pageを参照して下さい。
SMTPの設定などは環境によって変える必要があるだろうと思います。

こちらは `twadmin --create-cfgfile` コマンドを使って、設定内容を記述したテキストを元に、サイトキーで暗号署名したバイナリを生成します。

```sh:cfg設定ファイルの生成
# 設定の元となるテキストファイルを編集
vi /etc/tripwire/twcfg.txt

# 暗号署名した設定ファイルを生成
twadmin --create-cfgfile --site-keyfile /etc/tripwire/site.key \
--site-passphrase <サイトパスフレーズ> /etc/tripwire/twcfg.txt
```

## ポリシーファイルの設定と生成

ポリシーファイルは、Tripwireによってどのファイル・ディレクトリをどのようなルールで監視するかというポリシーを定めるものです。
これもテキスト形式で記述したポリシーファイルを元に、サイトキーで暗号署名を行ってバイナリファイルを生成する形になります。
ポリシーの記述方法はオリジナルのポリシー設定テキストファイル `twpol.txt` や[twpolicy(4)](https://linux.die.net/man/4/twpolicy)を参考にできます。
また、日本語の解説記事を記事末尾の参考リンクに挙げておきます。

ポリシーファイルの生成には `twadmin --create-polfile` コマンドを使います。

```sh:ポリシー設定ファイルの生成
# ポリシー設定の元となるテキストファイルを編集
vi /etc/tripwire/twpol.txt

# 暗号署名したポリシー設定ファイルを生成
twadmin --create-polfile --cfgfile /etc/tripwire/tw.cfg \
  --site-passphrase <サイトパスフレーズ> /etc/tripwire/twpol.txt
```

## データベースの初期化

ここまで設定したら、改ざん検知を行うため、現在のファイルシステムの状態を記録してベースラインとなるデータベースを作ります。

これには、 `tripwire --init` コマンドを使います。

```sh:データベースの初期化
tripwire --init --local-passphrase <ローカルパスフレーズ>
```

以上で、Tripwireを使うための初期セットアップは完了です。

# 定常運用

運用時に発生する作業とその手順・コマンドについて述べます。

## 改ざんチェックの定期実行

`tripwire --check` コマンドで改ざんチェックを実行できます。

```sh:改ざんチェック
tripwire --check
```

ファイルシステムの状態とTripwireのデータベースに記録されたベースラインに差異がある場合、コマンドの終了コードはゼロでない値となります。

上のコマンドをcronなどで定期的に実行するとよいでしょう。

`tripwire --check` コマンドで `-M|--email-report` オプションを付けることで、ポリシーファイルで設定された受信者にメールを送ることができます。
あるいは、 `tripwire --check` 終了コードをチェックして、異常時にアラートするような方法も可能です。

## 改ざんチェック結果の確認

改ざんチェックの結果は、 `tripwire --check` コマンドの標準出力でも確認できますが、cfg設定ファイルの `REPORTFILE` で設定されたpathにレポートファイルが生成されます。
そのファイルの内容は `twprint --print-report` コマンドによって確認できます。

```sh:レポートファイルの内容表示
twprint --print-report --twrfile <レポートファイルのpath>
```

## データベースの更新

改ざんを検知した後、ファイルシステムの状態を修正するか、Tripwireのデータベース（= ベースライン）を更新しない限り、以降もずっと改ざんが検出され続けることになります。
そこで、現在のファイルシステムの状態を正として、ベースラインを更新します。

これには、 `tripwire --update` コマンドを使います。

```sh:ベースラインの更新
tripwire --update --accept-all \
  --local-passphrase <ローカルパスフレーズ> \
  --twrfile <レポートファイルのpath>
```

`--accept-all` オプションを付けることで、プロンプトを表示せずにベースラインの更新を実行します。

## 改ざん検知ポリシーの更新

運用中に改ざん検知のポリシーを更新することもあるでしょう。
そんなときは、ポリシーファイル及びベースラインの再作成からやり直すこともできますが、その場合、もし最後の改ざんチェックからその時点までに誰かがファイルの変更・改ざんを行った場合に、検出できなくなってしまいます。
そこで、 `tripwire --update-policy` コマンドを使うことが推奨されています。[^3]

[^3]: [twpolicy(4)](https://linux.die.net/man/4/twpolicy)のman pageに該当の記述があります。 "Once the initial policy file has been generated, any changes should be made with the `tripwire --update-policy` command, ..."

```sh:改ざん検知ポリシーの更新
# ポリシー設定の元となるテキストファイルを編集
vi /etc/tripwire/twpol.txt

# ポリシー設定ファイルの再生成と、ベースラインの更新を行う
tripwire --update-policy --site-passphrase <サイトパスフレーズ> \
  --local-passphrase <ローカルパスフレーズ> /etc/tripwire/twpol.txt
```

# まとめ

以上、オープンソース版のTripwireのインストール、初期設定、定常運用の手順について解説しました。
どなたかの参考になれば幸いです。

# 参考

- [Tripwireについて|トリップワイヤ・ジャパン株式会社](https://www.tripwire.co.jp/about/)
- [エンタープライズ：Tripwireによるファイル改ざんの検知](http://www.itmedia.co.jp/enterprise/security/tripwire/index.html) ... ITMediaに掲載されている全5回の連載記事（2002年）
  - [エンタープライズ：セキュリティ How-To - 第2回：ポリシーファイルの作成と編集](http://www.itmedia.co.jp/help/howto/security/trip/02/index.html) ... ポリシーファイルの記述方法を詳しく解説している。

# 脚注