背景:なぜファイル整合性監視(FIM)が必要なのか?
Linuxサーバーを管理する上で、セキュリティは常に最優先事項です。システムへのあらゆる攻撃や不正な変更を予測することはできません。悪意のある第三者は、マルウェアをインストールしたり、設定を変更したり、ルートキットを挿入して身を隠す可能性があります。
以前、サーバーがSSHブルートフォース攻撃を受け、深夜に緊急対応しなければならなかったことを今でも覚えています。その時の緊張感は言葉では言い表せないほどでした。その経験から、セキュリティは最初から確立すべきだと常に考えており、ファイル整合性監視(File Integrity Monitoring – FIM)は不可欠な防御層の一つです。FIMは、異常な変更を検出するだけでなく、セキュリティインシデントの調査において重要な証拠を提供します。
ファイアウォールやネットワーク侵入検知/防御システム(IDS/IPS)だけでは不十分です。悪意のある第三者が外部の防御層を突破し、サーバーに侵入した場合、システムファイルを密かに変更する可能性があります。これにより、誰も知らないバックドアが作成されます。そのような状況でFIMが最大限に効果を発揮します。このツールは、ファイルシステムの隅々まで「監視」し、あらゆる改ざんや侵入の兆候を検知するのに役立ちます。
Linux上のFIMといえば、AIDE(Advanced Intrusion Detection Environment)が信頼できるツールです。AIDEは非常に効果的なオープンソースソフトウェアで、ファイルシステムの望ましい状態の「スナップショット」を作成できます。その後、AIDEは現在の状態と継続的に比較し、望ましくない変更を検出します。
一般的なLinuxディストリビューションへのAIDEのインストール
AIDEのインストールは非常に簡単で、ほとんどのLinuxディストリビューションで迅速に実行できます。
Ubuntu/Debianでのインストール
DebianまたはUbuntuベースのシステムでは、以下のコマンドでAIDEをインストールできます。
sudo apt update
sudo apt install aide aide-common
aide-commonにはスクリプトとデフォルト設定が含まれています。aideはチェックを実行する主要ツールです。
CentOS/RHEL/Fedoraでのインストール
Red Hat Enterprise Linux、CentOS、またはFedoraシステムでは、yumまたはdnfを使用します。
sudo yum install aide
# あるいは新しいバージョンでは:
sudo dnf install aide
インストールが完了したら、AIDEの設定準備が整います。
AIDEの詳細設定:システムのための「ゴールデンルール」を構築する
AIDEの強みは、高い設定カスタマイズ性にあります。主な設定ファイルは通常/etc/aide/aide.confです。編集する前にこのファイルをバックアップすることをお勧めします。
sudo cp /etc/aide/aide.conf /etc/aide/aide.conf.bak
ルールについて
aide.confでは、Perms、Normal、Static、Logなどで始まる多くの行が見られます。これらは、AIDEが監視するファイルまたはディレクトリの属性を定義するルールセットです。私は通常、以下のルールを使用します。
Perms = p+i+u+g+acl+selinux+xattrs: 権限、inode、ユーザー/グループ所有者、ACL、SELinuxコンテキスト、および拡張属性を監視します。このルールは、内容が頻繁に変更されるがアクセス権限は変更されないディレクトリに最適です。Static = p+i+u+g+s+b+md5+sha256+rmd160+tgr+m+c+acl+selinux+xattrs: これは最も包括的なルールです。権限、所有者からサイズ、ブロック数、そして特にMD5、SHA256、RMD160、TIGERなどのハッシュ関数(チェックサム)まで、あらゆるものをチェックします。このルールは、重要なシステムファイル、特に変更されるべきではないバイナリにとって非常に役立ちます。Log = p+u+g+s+grow: ログファイルに使用します。権限、所有者、サイズ(s)、そして特にファイルのサイズの増加(grow)のみを監視します。ログファイルにデータが追加されるたびにAIDEがアラートを出すことは望ましくありません。代わりに、権限や所有者が変更された場合、またはファイルが突然縮小/削除された場合にのみ関心があります。Databases = p+u+g+acl+xattrs: このルールは通常、データベースまたはアプリケーションデータを含むディレクトリに適用されます。私は権限と所有者のみに関心があり、内容については頻繁に変更されるため関心がありません。
管理を容易にするため、aide.confファイルの先頭でカスタムルールを定義することがよくあります。
監視対象ディレクトリの選択と除外
最も重要な部分は、AIDEがどのディレクトリを監視し、どのディレクトリを無視するかを指定することです。以下の構文を使用します。
# 重要なシステムディレクトリ。Staticルールを適用
/boot Static
/bin Static
/sbin Static
/usr/bin Static
/usr/sbin Static
# 重要なファイルが多く保存されている設定ディレクトリ
/etc Static
# カーネルのライブラリとモジュールを含むディレクトリ
/lib Static
/lib64 Static
/usr/lib Static
/usr/lib64 Static
# ログファイル。権限とサイズ増加のみを監視
/var/log Log
# 仮想、一時的で監視不要なディレクトリを除外
!/proc
!/sys
!/dev
!/tmp
!/var/tmp
!/var/run
!/var/spool
!/var/cache
# 例えば、/etc内の特定の子ディレクトリが頻繁に変動する場合は除外
!/etc/mtab
!/etc/ssh/ssh_host_*
ディレクトリを除外するには、!記号に注意してください。私は通常、/proc、/sys、/devを除外します。これらは仮想ファイルシステムであり、常に変更されるためです。同様に、/tmpと/var/tmpは一時ファイルを含むため、監視する必要はありません。
/etcに関しては、mtabや一時的なSSHキー(ssh_host_*)のようなファイルが頻繁に変更され、誤警報の原因となることがあります。私は、詳細な監視が本当に必要でない限り、それらを除外することがよくあります。
初回データベースの初期化
aide.confの設定が完了したら、次のステップは初期データベースを作成することです。これは、AIDEの比較基準となるシステム初の「スナップショット」です。
sudo aide --init
このコマンドは、設定で指定されたすべてのファイルとディレクトリをスキャンし、aide.db.new.gzファイル(通常は/var/lib/aide/にあります)を作成します。このプロセスが完了したら、AIDEが今後のチェックで使用できるように、その名前をaide.db.gzに変更する必要があります。
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
極めて重要:このaide.db.gzファイルは厳重に保護される必要があります。攻撃者がこのファイルを変更できる場合、彼らは自分の痕跡を隠すことができます。私は通常、このデータベースのコピーを読み取り専用(read-only)ストレージデバイスまたは暗号化されたパーティションに保存するか、少なくともファイルへのアクセス権を極めて制限することを検討します。
AIDEのチェックと監視:常に準備万端
データベースが初期化されたら、AIDEは監視作業を開始する準備ができています。
手動チェック
一度チェックを実行してレポートを見るには、以下のコマンドを使用するだけです。
sudo aide --check
AIDEは、ファイルシステムの現在の状態をaide.db.gzデータベースと比較します。その後、変更点に関する詳細なレポートが出力されます。

