システムのインストールと設定が完了したら、セキュリティアップグレードを行わない限りデータ以外のほとんどのファイルとディレクトリが変化する理由はありません。このため、ファイルが変化していない事を確認することは興味深いです。このため、ファイルに対する予想外の変化は調査に値します。この節では、ファイルに対する予想外の変化に備えて、ファイルを監視して管理者に警告する (または単純に変更をリストする) 幾つかのツールを紹介します。
14.3.3.1. パッケージの監査: debsums
とその限界
debsums
は興味深いツールで、(潜在的には攻撃者によって) 修正されたインストール済みファイルを見つける事が可能ですが、その結果は疑ってかかるべきです。第一に、すべての Debian パッケージが
debsums
プログラムが要求する指紋を提供しているわけではないからです (指紋が提供されているならば、指紋は
/var/lib/dpkg/info/package.md5sums
に保存されています)。
備忘録的になりますが: ここで指紋とは、ファイルの内容に対するある種のシグネチャを含む値、通常は数 (実際は 16 進数表記です)、です。このシグネチャはあるアルゴリズムを使って計算されます。指紋計算に使われるアルゴリズムはファイルに対して行われた小さな変化により指紋が変化する事がおおよそ保証されているものです (MD5 や SHA1 がよく知られている例です); これは「アバランシェ効果」として知られています。アバランシェ効果のお陰で、簡単な数字で表される指紋がファイルの内容の変化を検出するためのリトマス試験として機能する事になります。指紋計算に使われるアルゴリズムは不可逆です; 言い換えれば、ほとんどの場合、指紋からその指紋が得られる内容を発見することは不可能である事が知られています。最近の数学的な進歩により、アルゴリズムの原理の絶対性が揺らいでいるように見えます。しかしこれはアルゴリズムを使うことに対して疑問を投げかけるものではありません。なぜなら、同じ指紋を持つ異なる内容を作成することはまだかなり難しい作業だからです。
加えて、md5sums
ファイルはハードディスク上に保存されます; そのため几帳面な攻撃者なら md5sums
ファイルの中の指紋を改竄したファイルに対応する新しい指紋で置き換えるでしょう。
最初の欠点は debsums
が確認を行う際に md5sums
ファイルを参照するのではなく .deb
パッケージを参照すれば避ける事が可能です。しかしこの場合、先に対応する .deb
ファイルをダウンロードする事が必要になります:
#
apt-get --reinstall -d install `debsums -l`
[ ... ]
#
debsums -p /var/cache/apt/archives -g
注目すべき点として、デフォルト状態の debsums
は APT を使ってパッケージがインストールされていた場合でも存在しない md5sums
ファイルを自動的に生成します。
次の問題も同様のやり方で避ける事が可能です: この確認は本来の .deb
ファイル に基づかなければいけません。この方法の前提条件は、すべてのインストール済みパッケージに対するすべての .deb
ファイルを取得すること、 .deb
ファイルの完全性が保証されていること、です。これを満足させる最も簡単な方法は Debian ミラーから .deb
ファイルを取得する事です。この操作は遅くて退屈ですから、この操作を定期的かつ積極的に使うべき手法として考えるべきではありません。
#
apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`
[ ... ]
#
debsums -p /var/cache/apt/archives --generate=all
この例の中で、デフォルトではインストールされない dctrl-tools パッケージに含まれる grep-status
コマンドが使われている点に注意してください。
AIDE ツール (Advanced Intrusion Detection Environment) を使うことで、ファイルの完全性を確認したり、前回保存された正当なシステムのイメージに対する変更を検知したり、する事が可能です。このイメージはデータベース (/var/lib/aide/aide.db
) に保存され、システムのすべてのファイルに対して関連する情報(指紋、パーミッション、タイムスタンプなど) を保存しています。このデータベースは最初に aideinit
を使って初期化されます; そして毎日、関係のある情報が何も変更されていない事を確認するために、(/etc/cron.daily/aide
スクリプトから) 使われます。変更が検知されたら、AIDE はこれをログファイル (/var/log/aide/*.log
) に記録し、見つかった内容を管理者にメールで送信します。
/etc/default/aide
に含まれる多くのオプションを使って aide パッケージの挙動を微調整します。AIDE 設定は /etc/aide/aide.conf
と /etc/aide/aide.conf.d/
に保存されています (実質的に言えば、これらのファイルは update-aide.conf
が /var/lib/aide/aide.conf.autogenerated
を生成するためだけに使われます)。設定は確認する必要のあるファイルの属性の種類を指定します。例えば、ログファアイルの内容は定期的に変わりますが、この種の変更はファイルのパーミッションが同じなら無視する事が可能です。しかし、実行可能プログラムの内容とパーミッションの両方は必ず同じでなければいけません。設定の構文は、とても複雑というわけではありませんが、完全に直感的ではありません。aide.conf(5) マニュアルページを読む事を推奨します。
データベースの新しいバージョンは毎日生成され、/var/lib/aide/aide.db.new
に保存されます; すべての記録された変更が正当ならば、参照データベースを新しいデータベースに置き換える事が可能です。