静かに進行する侵入の脅威
想像してみてください。月曜日の朝に出社して監視ダッシュボードを開くと、社内データベースサーバーから15 Mbpsの定常的なアウトバウンドトラフィックが発生していることに気づきます。しかし、認証ログを確認してもSSHログインの失敗はゼロ件でした。
境界ファイアウォールにも異常な兆候は一切記録されていません。しかし半日かけてフォレンジック調査を実施した結果、最悪の事実が判明します。攻撃者は3週間前に未パッチのRedisの脆弱性を突き、/usr/sbin/sshdを1.2 MBのトロイの木馬化されたバイナリに置き換え、平文パスワードを/var/tmp/.pam_cacheに収集するため/etc/pam.d/common-authにステルスな1行を追加していたのです。
境界防御は外部からのノイズを阻止しますが、侵入者が一度足場を築くと、まず試みるのが「永続化(Persistence)」です。攻撃者はシステムバイナリを改ざんし、/etc/cron.d/にジョブを潜り込ませ、カーネルモジュールを配置し、あるいはデーモン設定を書き換えます。CPU使用率の急増、ディスク使用量、リスニングポートなどを追跡する標準的な監視ツールでは、こうした巧妙なファイルシステムの変更を完全に見逃してしまいます。今必要なのは、たった1つの率直な問いに答えてくれる専用の番兵です。「最後に確認された正常な状態(Known Good State)以降、重要なファイルが変更されていないか?」
基本概念:AIDEがファイルの整合性を追跡する仕組み
ファイル整合性監視(FIM: File Integrity Monitoring)は、信頼できる暗号化スナップショットと照合して、システムやアプリケーションのファイルを検証する技術です。現代のEDRエージェントは重いユーザーランドフックを実行しますが、AIDE(Advanced Intrusion Detection Environment)は、Unix系ホストにおける整合性監視の実証済みで軽量な標準として今なお重宝されています。余計な常駐バックグラウンドデーモンを必要とせず、極めて小さなフットプリントでクリーンに動作します。
AIDEは、シンプルな「スナップショット作成と照合」モデルを採用しています。
- ベースラインの生成:セットアップ時、AIDEは設定ファイルで定義されたディレクトリのインデックスを作成します。ファイルサイズ、POSIXパーミッション、所有者(UID/GID)、inode番号、変更日時(mtime)、属性変更日時(ctime)、および暗号化ハッシュ(SHA-256、SHA-512)を記録し、これらのレコードを新しいベースラインファイル
aide.db.new(またはaide.db.new.gz)に書き出します。 - データベースの有効化:このスナップショットを本番用データベース(
aide.db)に昇格させます。このファイルがシステムにおける「唯一の信頼できる情報源(Single Source of Truth)」となります。 - 整合性の検証:チェックモード(
aide --check)では、AIDEがファイルシステムを再スキャンしてリアルタイムに属性を再計算し、信頼されたデータベースとの差分をすべて報告します。出力されるレポートにより、攻撃者が新しいライブラリを設置したのか、監査ログを削除したのか、あるいはハッシュ値が変更されたのかが正確に特定されます。
実践手順:AIDEの導入と構成
ステップ1:AIDEのインストール
AIDEは、主要なすべてのLinuxディストリビューションの標準リポジトリで提供されています。
Debian 12およびUbuntu 22.04/24.04の場合:
sudo apt update
sudo apt install -y aide aide-common
RHEL 9、Rocky Linux、またはAlmaLinuxの場合:
sudo dnf install -y aide
ステップ2:aide.confでの検査ルールの定義
プライマリ設定ファイルは、Debian系ディストリビューションでは/etc/aide/aide.conf、RHEL系では/etc/aide.confに配置されます。Debian系では/etc/aide/aide.conf.d/配下のスニペットからルールを組み立てることもできますが、基本的な構文は全プラットフォームで共通です。
ファイルパスの保護設定を行う前に、管理者資格情報の強固さを確認してください。クラウドインスタンスのプロビジョニングやrootパスワードの設定時には、toolcraft.app/ja/tools/security/password-generatorのようなクライアントサイドのパスワードジェネレーターを利用することで、認証情報がネットワーク上を平文で流れるのを防ぐことができます。rootの認証情報とSSHキーを適切に設定したら、次のセキュリティベースラインとしてFIMを構成します。
設定ファイルを開きます:
sudo nano /etc/aide/aide.conf
ファイルの上部付近でカスタムルールマクロを定義します。衝突の脆弱性がある旧来のMD5ルールは、現代的なSHA-256およびSHA-512によるチェックに置き換えます。
# カスタムルールマクロ
# パーミッション、inode、リンク数、ユーザー、グループ、サイズ、ブロック数、mtime、ctime、デュアルSHAハッシュを監視
STRICT_SYSTEM = p+i+n+u+g+s+b+m+c+sha256+sha512
CONFIG_FILES = p+i+n+u+g+s+m+c+sha256
STATIC_DIR = p+i+u+g
# 重要なバイナリおよび共有ライブラリ
/bin STRICT_SYSTEM
/sbin STRICT_SYSTEM
/usr/bin STRICT_SYSTEM
/usr/sbin STRICT_SYSTEM
/lib STRICT_SYSTEM
/lib64 STRICT_SYSTEM
# システム設定
/etc CONFIG_FILES
# カーネルイメージおよびブート設定
/boot STRICT_SYSTEM
# 動的ファイルおよびマウント除外(誤検知・ノイズ防止)
!/etc/mtab
!/etc/resolv.conf
!/var/log
!/var/spool
!/var/cache
!/tmp
!/proc
!/sys
!/dev
感嘆符(!)は除外設定を意味します。/procや/sysのような動的な仮想ファイルシステムを除外することは必須です。これらを適切に除外しないと、日常的なカーネル状態の変化やシステムログによって、日々のレポートが数千件もの誤検知(フォールスポジティブ)で埋め尽くされてしまいます。
ステップ3:ベースラインデータベースの構築と有効化
ルールを定義したら、リファレンスカタログを初期化します。DebianおよびUbuntuには、aideinitという便利なヘルパースクリプトが同梱されています。
sudo aideinit
RHELおよびそのクローンディストリビューションでは、アップストリームのAIDEコマンドを直接実行します。
sudo aide --init
ファイル数が約50,000件のSSD搭載インスタンスであれば、初期化は通常20〜45秒程度で完了します。低速なHDDや数百万件のファイルを抱えるシステムでは、3〜5分程度を見込んでください。AIDEは出力を/var/lib/aide/aide.db.new.gz(古いRHEL環境では非圧縮のaide.db.new)に書き出します。
このファイルを本番ターゲットのパスにリネームして、ベースラインを有効化します。
sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 非圧縮データベースを使用する環境の場合:
# sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
ステップ4:改ざん検知のテスト
意図的に失敗させたことのないセキュリティ対策を過信してはいけません。想定外の編集をAIDEが正しくキャッチできるか確認するため、テスト用の変更を加えて検証します。
/etc/hostsにダミーのホストレコードを追記してみます。
echo "# Malicious entry simulation" | sudo tee -a /etc/hosts
即座に検証チェックを実行します。
sudo aide --check
数秒以内に、AIDEが異常を検出してフラグを立てます。
AIDE 0.17.4 found differences between database and filesystem!!
Summary:
Total number of entries: 48215
Added entries: 0
Removed entries: 0
Changed entries: 1
---------------------------------------------------
Changed entries:
---------------------------------------------------
changed: /etc/hosts
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /etc/hosts
Size : 221 , 252
Mtime : 2026-11-04 09:12:04 , 2026-11-04 10:25:31
Ctime : 2026-11-04 09:12:04 , 2026-11-04 10:25:31
SHA256 : a1b2c3d4e5f6... , e5f6a7b8c9d0...
AIDEがファイルサイズの増加、タイムスタンプの変更、およびハッシュの不一致を正確に検知したことがわかります。次の手順に進む前に、テスト用のエントリを削除して元の状態に戻しておきます。
sudo sed -i '/# Malicious entry simulation/d' /etc/hosts
ステップ5:チェックの自動化とアラート通知
日々の運用業務が忙しくなると、手動でのセキュリティ監査は形骸化しがちです。スキャンを自動化し、予期しない差分が検出された際には運用担当者の受信トレイへ即座に転送される仕組みを整えましょう。
AIDEには固有の終了コード(終了ステータス)が用意されています。0は変更なしを意味し、ゼロ以外の値はファイルの不整合や処理エラーを示します。これを利用してシンプルな監視ラッパースクリプトを構築します。
/usr/local/bin/aide-check.shにスクリプトを作成します:
sudo nano /usr/local/bin/aide-check.sh
以下のロジックを貼り付けます:
#!/usr/bin/env bash
set -uo pipefail
REPORT_FILE="/tmp/aide-report.txt"
RECIPIENT="[email protected]"
HOSTNAME=$(hostname -f)
# AIDEチェックを実行し出力をキャプチャ
/usr/bin/aide --check > "$REPORT_FILE" 2>&1
EXIT_CODE=$?
if [ "$EXIT_CODE" -eq 0 ]; then
# ファイルシステムはベースラインと一致
rm -f "$REPORT_FILE"
exit 0
else
# 構成ドリフトまたは改ざんを検知
mail -s "ALERT: File Integrity Anomaly on ${HOSTNAME} (Code: ${EXIT_CODE})" "$RECIPIENT" < "$REPORT_FILE"
rm -f "$REPORT_FILE"
exit "$EXIT_CODE"
fi
スクリプトに実行権限を付与します:
sudo chmod 750 /usr/local/bin/aide-check.sh
cronを使用して、毎日UTC 03:00に自動実行されるようスケジュールを設定します:
echo "0 3 * * * root /usr/local/bin/aide-check.sh" | sudo tee /etc/cron.d/aide-daily
ステップ6:メンテナンス後のベースライン更新
apt upgradeやdnf updateによるパッケージの更新を適用すると、数百件のバイナリやライブラリが書き換えられます。OSパッチの適用直後に監査を実行すると、大量の差分がアラートとしてメールボックスに殺到することになります。
そのため、デプロイやメンテナンスの手順書には、ベースラインの再インデックス作業を最終ステップとして明記しておきましょう。
# 1. システムアップデートを適用
sudo apt upgrade -y
# 2. 更新されたファイル群を対象にベースラインを再構築
sudo aide --update
# 3. 更新されたカタログを本番環境へ反映
sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
ベースラインを更新する前には、必ず事前にaide --checkを実行してください。この検証を怠ると、気付かないうちに受けていた侵入被害の痕跡を、正当なシステム変更として承認してしまう重大なリスクが生じます。
まとめ
ホストベースのファイル整合性監視を導入することで、見えにくいファイルシステムの変更を確実なフォレンジックデータとして可視化できます。AIDEはメモリの大量消費やバックグラウンドでのCPU枯渇を引き起こすことなく、強力な可視性を提供します。root権限を奪取した攻撃者によるベースラインの不正上書きを防ぐため、オブジェクトロックを有効にしたS3バケットなど、オフラインまたは読み取り専用のストレージにaide.db.gzのコピーを保管することをおすすめします。規律あるパッチ適用後の更新手順と組み合わせることで、ディスク上に不正な1バイトが書き込まれた瞬間を即座に察知できるようになります。

