Linuxにおけるファイル整合性監視ソリューションの比較
サーバーで突然見知らぬポートが開いていた、Webサイトにいつの間にか悪意あるコードが埋め込まれていた――システム管理者にとって最大の悪夢は、気付かないうちに攻撃者によってバイナリや設定ファイルが密かに改ざんされることです。このような脅威に対抗するために有効なのが、ファイル整合性監視(FIM: File Integrity Monitoring)です。
Linux環境でファイルの変更を追跡する場合、主に以下の3つのアプローチがあります。
- Bash/Pythonスクリプトとsha256sumの自作運用: /etc や /bin などの機密ディレクトリをリストアップし、初期状態のSHA256ハッシュ値を生成した上で、cronジョブを用いて定期的に差分を突合します。
- 統合型ホスト型IDS(WazuhやOSSEC)の導入: 包括的なAgent-Managerモデルを採用した構成です。リアルタイムでログを収集し、プロセス監視を行い、インシデント発生時には自動応答(Active Response)をトリガーします。
- AIDE(Advanced Intrusion Detection Environment)などのスタンドアロンFIMツールの活用: Tripwireの後継として開発されたオープンソースツールです。ファイルのパーミッション、inode、mtime、サイズ、SHA256/SHA512ハッシュ値を含むスナップショットを記録し、その後のスキャン時に変更点を比較・検出します。
各アプローチのメリット・デメリット分析
1. 自作ハッシュスクリプト
メリット: 非常に軽量です。標準で備わっているcoreutils以外に追加パッケージをインストールする必要がありません。
デメリット: 攻撃者に容易に回避されるリスクがあります。自作スクリプトでは拡張属性(extended attributes)やSELinuxコンテキストを見落としがちで、inodeのすり替えを検知できず、対象ファイルが5万件を超えるとパフォーマンスが大幅に低下します。
2. WazuhまたはOSSEC
メリット: 直感的なダッシュボードによる一元管理が可能です。数百台のノードからログを集約し、異常発生時には数秒以内にTelegramやSlackへ直接アラートを通知できます。
デメリット: サーバーリソースを大量に消費します。Elasticsearch/IndexerやManagerクラスタを稼働させるには、管理サーバーに最低でも4GB〜8GBのRAMが必要です。1 vCPU・1GB RAMといった低スペックなVPSでは運用が困難です。
3. AIDE
メリット: 軽量かつ高信頼性です。すべての設定が単一のテキストファイルに完結します。パーミッション、ユーザー/グループ、リンク数からSHA512ハッシュ値まで詳細にスキャンを行いつつ、待機時のメモリ消費はほぼゼロです。
デメリット: Web管理画面がありません。正規表現を用いた除外ルール(exclusion rules)を手動で微調整する必要があります。設定が不適切だと、毎日のログローテーションなどで大量の誤検知(false positives)が発生します。
最適なソリューションの選択基準
数十台以上のノードを抱えるエンタープライズ規模のサーバークラスタであれば、Wazuhの導入が有力な選択肢となります。一方で、Nginx、PHP-FPM、PostgreSQLなどを運用している数台の独立したVPSであれば、AIDEが最もバランスの取れたセキュリティソリューションです。
実務運用において、AIDEを導入する際の最も重要な鉄則は、動的に変化するディレクトリを徹底的に除外することです。/var/log、/tmp、各種アプリケーションキャッシュなどを除外設定しておかないと、毎回のレポートが数千行にも膨れ上がります。その結果、「アラート疲れ(alert fatigue)」を引き起こし、実際の不正侵入の痕跡を見逃してしまうことになります。
Ubuntu/DebianおよびRHEL/AlmaLinuxでのAIDE導入手順
ステップ1: AIDEのインストール
DebianまたはUbuntuの場合:
sudo apt update
sudo apt install aide aide-common -y
RHEL、AlmaLinux、Rocky Linuxの場合:
sudo dnf install aide -y
ステップ2: 設定ファイルでのルールカスタマイズ
デフォルトの設定ファイルは、/etc/aide/aide.conf(Debian/Ubuntu)または /etc/aide.conf(RHEL/AlmaLinux)に配置されています。
AIDEでは、監視対象とする属性を以下の略称コードを用いて定義します:
p: アクセス権限(Permissions)i: inode番号n: リンク数(Number of links)u: 所有ユーザーg: 所有グループs: ファイルサイズ(Size)m: コンテンツ更新日時(mtime)c: メタデータ変更日時(ctime)sha256: SHA-256ハッシュアルゴリズム
nanoまたはvimで設定ファイルを開きます:
sudo nano /etc/aide/aide.conf
システムバイナリを厳格にチェックするために、MYCUSTOMというサンプルルールを定義します:
# 検査対象の属性グループを定義
MYCUSTOM = p+i+n+u+g+s+m+c+sha256
# 重要ディレクトリに適用
/etc MYCUSTOM
/bin MYCUSTOM
/sbin MYCUSTOM
/usr/bin MYCUSTOM
# 頻繁に変更されるディレクトリは除外(!)が必須
!/var/log
!/var/cache
!/tmp
!/var/tmp
ステップ3: ベースラインデータベースの初期化
まず、照合の基準となる正常状態のスナップショットを作成します:
sudo aideinit
注意: RHELおよびAlmaLinuxでは、以下のコマンドを実行します:
sudo aide --init
SSD環境で約6万ファイルをスキャンする場合、ハッシュ計算処理には30〜60秒程度しかかかりません。スキャンが完了すると、AIDEは /var/lib/aide/aide.db.new(または /var/lib/aide/aide.db.new.gz)にベースラインデータベースを生成します。
このファイルを本番用データベースのパスへコピーし、整合性チェックを有効化します:
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
ステップ4: 侵入検知のテスト
現在のファイルシステムと保存済みデータベースを照合するには、次のように実行します:
sudo aide --check
システムに異常がなければ、画面に “AIDE found NO differences” と表示されます。
ここで、攻撃者を模倣して /etc/hosts を改変し、/bin ディレクトリに不審なシェルスクリプトを配置してみましょう:
# hostsファイルに悪意のあるドメインを追加
echo "192.168.1.200 evil-attacker.com" | sudo tee -a /etc/hosts
# 模擬バックドア実行ファイルを作成
sudo touch /bin/backdoor_test
sudo chmod +x /bin/backdoor_test
再度スキャンを実行します:
sudo aide --check
AIDEは即座に変更を正確に検知して報告します:
AIDE found differences between database and filesystem!!
Added entries:
/bin/backdoor_test
Changed entries:
/etc/hosts
Detailed information about changes:
File: /etc/hosts
Size : 221 , 255
Mtime : 2026-11-06 10:15:20 , 2026-11-06 12:30:00
SHA256 : a8f5c7... , e3b0c4...
ファイルサイズからmtime、ハッシュ値に至るまで、改変されたすべてのパラメータが漏れなく詳細に表示されます。
ステップ5: メンテナンス後のデータベース更新
apt upgrade によるパッケージ更新やNginxの設定変更を行うたびに、AIDEはそれらを変更点として検知します。正常な変更を同期するために、データベースを更新する必要があります:
sudo aide --update
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
ステップ6: Cronによる定期スキャンの自動化
手動でのチェックは現実的ではありません。毎日深夜3時にバックグラウンドで実行されるようcronジョブを設定しましょう:
sudo crontab -e
以下の行を追加して、実行結果を管理者のメールアドレスに直接送信します:
0 3 * * * /usr/bin/aide --check | mail -s "[Alert] VPSファイル整合性チェックレポート" [email protected]
Mail Transfer Agent(MTA)が利用できない場合は、ログを /var/log/aide/aide-check.log に出力し、ファイル変更が検知された際にTelegramへ通知を送信する簡単なPythonボットを作成することも有効です。
