システムの機密を保持することは、代替のきかないシステムの管理者にとっては必須の課題となります。常にシステムが安全な状態にあることは誰も保証できませんので、定期的に (たとえば cron
などで) 追加のチェックを行い、システムが正しく制御されていることを確認することが重要となります。このような要件を満たすことができるのが AIDE (Advanced Intrusion Detection Environment; 高度な侵入検知環境) です。
RPM を使用すれば、不用意な変更が加わっているのかを簡易的に調べることができます。パッケージマネージャには、システム内に存在し、管理下にあるファイルに対して、チェックを行う機能が用意されています。全てのファイルをチェックしたい場合は、 rpm -Va
コマンドを実行してください。ただし、このコマンドは設定ファイルなどに対しても変更を検知してしまうため、想定通りに変更されているファイルについては、一覧から取り除いていく作業が必要となってしまいます。
また、 RPM コマンドを使用して調べる方法には、根本的な問題も存在しています。それは、攻撃者が rpm
コマンドそのものを書き換えることで、本来は変更されているものとして表示しなければならないものを隠蔽することができてしまう、という問題です。これにより、ルートキットなどの不正なソフトウエアを潜り込ませることができてしまい、不正に root 権限を得ることができてしまいます。この問題を解決するには、インストール済みのシステムからは完全に独立した、もう 1 つのチェックシステムが必要となります。
システムをインストールする前に、まずはお使いのメディアのチェックサムを検証し、不正なソフトウエアを使用していないことをご確認ください (詳しくは 4.1項 「メディアの確認」 をお読みください) 。システムをインストールしたあとは、 AIDE のデータベースの準備を行います。なお、インストール中やインストール後に問題なく動作するよう、インストールはコンソールから直接実施するものとし、ネットワークには接続しないでください。また、 AIDE でデータベースの作成が完了するまで、コンソールを誰にでもアクセスできる状態で放置したり、ネットワークに接続したりしないでください。
AIDE は openSUSE Leap の既定ではインストールされません。インストールを行うには、 › を使用するか、 root
で zypper install aide
を実行してインストールしてください。
AIDE がファイルをチェックする際、どのような属性をチェック対象にしたいのかを設定したい場合は、 /etc/aide.conf
設定ファイルを変更してください。最初のセクションでは、 AIDE のデータベースファイルの場所など、一般的なパラメータを設定します。それに続く Custom Rules
と Directories and Files
の各セクションが重要な設定となります。既定のルールでは、下記のような値が設定されています:
Binlib = p+i+n+u+g+s+b+m+c+md5+sha1
変数 Binlib
の定義が終わったら、同じセクション内に存在する他の設定も、必要に応じて変更してください。主なオプションには下記のようなものがあります:
オプション |
説明 |
---|---|
p |
選択したファイルやディレクトリのパーミッションのチェック。 |
i |
inode 番号のチェック (それぞれのファイルには、必ずユニークな inode 番号が割り当てられていて、通常は変更されることはありません) 。 |
n |
そのファイルに対して作成されているリンク数のチェック。 |
u |
ファイルの所有者が変更されていないかどうかのチェック。 |
g |
ファイルのグループ設定が変更されていないかどうかのチェック。 |
s |
ファイルのサイズが変わっていないかどうかのチェック。 |
b |
このファイルが使用するブロックカウント数が変わっていないかどうかのチェック。 |
m |
ファイルの修正日時が変わっていないかどうかのチェック。 |
c |
ファイルのアクセス日時が変わっていないかどうかのチェック。 |
S |
ファイルサイズが変わっていないかどうかのチェック。 |
I |
ファイル名の変更を無視するかどうか。 |
md5 |
ファイルに対する md5 チェックサムが変わっていないかどうかのチェック。 sha256 もしくは sha512 の使用をお勧めします。 |
sha1 |
ファイルに対する sha1 (160 ビット) チェックサムが変わっていないかどうかのチェック。 sha256 もしくは sha512 の使用をお勧めします。 |
sha256 |
ファイルに対する sha256 チェックサムが変わっていないかどうかのチェック。 |
sha512 |
ファイルに対する sha512 チェックサムが変わっていないかどうかのチェック。 |
下記は /sbin
ディレクトリ内にある全てのファイルをチェックするための設定で、 Binlib
オプション内で指定したチェックを実施するものの、 /sbin/conf.d/
ディレクトリについてはチェックを省略する指定です:
/sbin Binlib !/sbin/conf.d
AIDE データベースを作成するには、下記の手順を実施します:
/etc/aide.conf
ファイルを開きます。
チェック項目を設定して、どのファイルをチェック対象とするのかを設定します。チェック項目全ての一覧については、 /usr/share/doc/packages/aide/manual.html
ファイルをお読みください。なお、ファイルを指定する際には、正規表現に関する知識が必要となります。設定が終わったら、ファイルを保存してください。
設定ファイルの書式が正しいことを確認するには、下記のように実行します:
#
aide --config-check
このコマンドの出力結果を読むことで、設定ファイルの誤っている箇所のヒントが得られます。たとえば下記のような出力が表示された場合を想定します:
#
aide --config-check
35:syntax error:!
35:Error while reading configuration:!
Configuration error
上記のエラーメッセージからすると、 /etc/aide.conf
の 36 行目にエラーがあることになります。このとき、エラーメッセージの前の表示される行番号は、最後に正しく処理できた行の番号を示していることに注意してください。
AIDE のデータベースを準備します。下記のように実行します:
#
aide -i
生成されたデータベースを、 CD-R や DVD-R 、もしくはリモートのサーバやフラッシュメモリなどにコピーしておいて、後から参照できるようにしておきます。
このコピー作業は、データベースそれ自身を不正に書き換えられないようにするために重要な作業となります。データベースが不正に書き換えられたりしないよう、一度だけ書き込むことのできるメディアを使用しておくことをお勧めします。また、監視したいコンピュータ内には、データベースを 残してはなりません 。
ファイルシステムのチェックを行うには、下記のようにして行います:
データベースのファイル名を変更します:
#
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
何らかの設定変更を行った場合は、 AIDE のデータベースを再準備して、新しく生成されたほうのデータベースに移動を行う必要があります。この時点でのデータベースをバックアップしておいてもよいでしょう。詳しくは 20.2項 「AIDE データベースの設定」 をお読みください。
あとは下記のコマンドを実行すると、チェックを行うことができます:
#
aide --check
何も出力が表示されない場合は、全く何も問題が見つからなかったことを表しています。 AIDE が何らかの変更を検知すると、下記のように概要を表示します:
#
aide --check
AIDE found differences between database and file system!!
Summary:
Total number of files: 1992
Added files: 0
Removed files: 0
Changed files: 1
実際に変更されたファイル名の一覧を表示したい場合は、 -V
オプションをつけて冗長に出力するように指定してください。上記の出力例の場合、冗長に出力すると下記のようになります:
#
aide --check -V
AIDE found differences between database and file system!!
Start timestamp: 2009-02-18 15:14:10
Summary:
Total number of files: 1992
Added files: 0
Removed files: 0
Changed files: 1
---------------------------------------------------
Changed files:
---------------------------------------------------
changed: /etc/passwd
--------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /etc/passwd
Mtime : 2009-02-18 15:11:02 , 2009-02-18 15:11:47
Ctime : 2009-02-18 15:11:02 , 2009-02-18 15:11:47
この例では、 /etc/passwd
ファイルのタイムスタンプが変わっていることが分かります。
AIDE 自身が不正に書き換えられたりする問題を避けるため、 AIDE のプログラムを信頼できるソースから取得して、実行しておくこともできます。これにより、攻撃者が AIDE 自身を書き換えて、警告を出さないようにしてしまう問題を回避することができます。
AIDE 自身を信頼できるソースから実行するには、 AIDE をインストール済みのシステム内で実行するのではなく、レスキューシステム内から実行しなければなりません。 openSUSE Leap では、容易に拡張可能なレスキューシステムを提供していますので、ここから簡単に AIDE を実行することができます。
レスキューシステムを起動する前に、 2 種類のパッケージを用意する必要があります。これらはシステムに対するドライバ更新ディスクと同じ書式で設定することができます。 linuxrc の設定方法に関する詳細は、 https://ja.opensuse.org/SDB:Linuxrc をお読みください。下記の手順では、実現可能な方法のうちの 1 つを説明しています。
まずは別のマシンに FTP サーバを準備します。
FTP サーバ内のディレクトリに、 aide
と mhash
の各パッケージを配置します。たとえば /srv/ftp/
のディレクトリに配置するものとします。下記の ARCH と VERSION の箇所は、実際のアーキテクチャ名とバージョン文字列に置き換えて実行してください:
#
cp DVD1/suse/ARCH/aideVERSION.ARCH.rpm /srv/ftp#
cp DVD1/suse/ARCH/mhashVERSION.ARCH.rpm /srv/ftp
レスキューシステムで必要な起動パラメータを記述した、 /srv/ftp/info.txt
というファイルを作成します。下記の内容で保存してください:
dud:ftp://ftp.example.com/aideVERSION.ARCH.rpm dud:ftp://ftp.example.com/mhashVERSION.ARCH.rpm
ここで、 FTP サーバのドメイン名はお使いの環境に合わせて変更してください。また、 ARCH と VERSION の箇所は、実際のアーキテクチャ名とバージョン文字列に置き換えて実行してください。
まずはお使いのシステムを再起動して、 DVD からレスキューシステムを起動して AIDE を開始します。このとき、起動パラメータには下記を指定します:
info=ftp://ftp.example.com/info.txt
このパラメータにより、 linuxrc
が info.txt
ファイルを読み込んで、その内容をパラメータとして取り込むようになります。
レスキューシステムが起動したあとは、通常どおり AIDE プログラムを使用することができます。 なお、レスキューシステムは日本語に対応していないため、表示は全て英語になりますので、あらかじめご了承ください。
AIDE に関する情報は、それぞれ下記の場所にあります:
AIDE の Web ページ: https://aide.github.io/
設定ファイル /etc/aide.conf
内のコメント文 (英語)
aide
パッケージをインストールしてある環境下であれば、 /usr/share/doc/packages/aide
以下にもいくつかの文書があります。
AIDE のユーザ向けメーリングリストが、 https://www.ipi.fi/mailman/listinfo/aide で提供されています。