完全性監視には厄介な性質があります。確実に清潔だと分かっているシステムから取った基準を必要とするということです。サーバーが三年動いていて、侵入の疑いが今日はじめて浮かんだのなら、その基準を取るにはもう遅すぎます——いま在るものをそのまま正常として記録することになるからです。

ところが Debian と Ubuntu では、その基準がすでに存在し、しかもそれはあなたのものではありません。インストールされた各パッケージが自分のファイルのチェックサムを携えているのです。それらとの比較には設定も事前のスナップショットも要らず、どんなシステムでもいつでも使えます。そのツールの名は debsums です。

使い方

sudo apt install debsums
sudo debsums -c

-c フラグは基準と一致しなかったファイルだけを表示します。これが無いと、出力はシステムの全ファイルについての一行ずつの報告となり、数万行になります。

この確認は数分かかりディスクに負荷をかけるので、稼働中のサーバーでは優先度を下げて走らせる価値があります。

sudo ionice -c3 nice -n19 debsums -c

結果の読み方

出力が空なら、確認されたすべてのファイルがディストリビューションの入れたものと一致しています。空でない出力は精査が必要であり、検出されるものは大きく異なる二種類に分かれます。

/etc の設定ファイル。それらを変えるのは通常の作業です。sshd_config を編集し、nginx を設定し、カーネルパラメータを足した。そうした差分は想定内です。それらが邪魔にならないよう、別のモードがあります。

sudo debsums -e -c

-e は設定ファイルだけを確認します——このマシンで自分が何を変えてきたかの一覧を見るのに、たまに役立ちます。

実行ファイルとライブラリ。/usr/bin/usr/sbin/bin/usr/lib の差分こそ、この確認を走らせた目的そのものです。正当な理由もありますが多くはありません。障害調査中に手で編集した、第三者のパッチを当てた、確認中にパッケージが更新されていた。どれも当てはまらないなら、真剣に調べる頃合いです。

差し替えの古典的な標的は lspsnetstatssfindsshd です。差し替えられた版は自分の出力から肝心の行を隠し、そしてそれ以降あなたのどの確認も真実を語らなくなります。

網羅は完全ではない——そしてそれを知っておく必要がある

たいてい語られない制約:すべてのパッケージがチェックサムを同梱しているわけではありません。そうしたパッケージのファイルはそもそも確認されず、どんな場合でもレポートに現れません。一覧はこう見られます。

sudo debsums -l

したがって、きれいな debsums のレポートが意味するのは「確認された部分については問題ない」であって、「システムは改変されていない」ではありません。同じことがパッケージ管理の外で入れたすべてに当てはまります。ソースからコンパイルしたもの、バイナリで落としたもの、開発元サイトのスクリプトで入れたもの——debsums は定義上そのどれも見ておらず、まさにそこで AIDE が必要になります。

定期的に走らせる

このパッケージは出来合いのジョブを同梱しており、/etc/default/debsums で有効にします。

CRON_CHECK=weekly

週に一度が妥当な頻度です。この確認はディスクに目に見える負荷をかける一方、システムファイルは更新の合間にはめったに変わりません。毎日走らせても負荷以外は何も足しません。

本当にファイルが差し替えられていたら

最初の衝動はパッケージを入れ直して元に戻すことです。

sudo apt install --reinstall coreutils

コマンドとしては正しいのですが、最初の行動としては違います。システムのバイナリが差し替えられているということは誰かが root を持っていたということであり、ファイルを戻してもその問題は解決せず、痕跡を消すだけです。順序は逆であるべきです。まず疑わしいファイルの控えとその変更時刻を保存し、同じ期間に他に何が変わったかを見て、cron ジョブと SSH の鍵とユーザー一覧を確認する。復元はその後です。

この手法の限界も覚えておく価値があります。システムが深く乗っ取られているなら、debsums 自身とそれが使うライブラリも他と一緒に差し替えられている可能性があります。内側からの確認は絶対の保証を与えられません——それは外部メディアからの起動で行うものです。とはいえ日々の作業にはこれで十分です。攻撃の圧倒的多数は自動化されており、それほど手の込んだものではありません。

全体像の中での位置づけ

debsums のよいところは、何も要らずすぐ使えることです——それは履歴を知らないサーバーにとって便利な出発点になります。弱点は網羅が完全でないことと、パッケージの外で入れたものについて何も知らないことです。「debsums と AIDE」の組は両側を覆います。システムファイルにはディストリビューションの出来合いの基準を、それ以外には自分のスナップショットを。

いつものように、大事なのは走らせることではなく、最新の結果が日付とともに目の前にあることです。それがどう見えるかは下のデモで。