6. 不正侵入の発見

この章は、いかにして早期に前兆に気づくか、 いかにして事実の後に警戒態勢をとるか、 そしていかにして侵入の企てからシステムをクリーンな状態に復旧するか、 を扱います。

6.1. 侵入発見システム(Intrusion Detection System, IDS)

侵入発見システム(Intrusion Detection Systems, IDS) はファイアーウォールを通り過ぎて何かが起こったかもしれないとき、 それを捕まえるよう設計されています。 また、進行中の能動的な侵入の企てを捕まえるようにも、 または事件の後に成功した侵入を発見するようにも設計されています。 後の場合には、いかなる被害を避けるにも遅過ぎますが、 少なくとも早期に問題に気づくことが出来ます。 IDS には二つの基本的なタイプがあります。 それは、ネットワークを保護するものと、個別のホストを保護するものです。

ホストに基づく IDS は、ファイルシステムの変更をモニタする ユーティリティによってなされます。 変更されるべきでないシステムファイルが、 自分が変更したのではないのに、何らかの方法で変更されていたとすると、 それは何かまずいことが起こった証拠と言えます。 誰かが中に入り、root 権限を得て、 おそらくシステムのどこかに変更を加えているのでしょう。 これは通常、侵入後の一番最初になされることです。 これで、侵入者はバックドアを通って帰ってこられるし、 さらに他の誰かへの攻撃を始めることができます。 どの場合も、侵入者はシステムに対しファイルを変更するか、 付け加える必要があります。

ここでは tripwire (http://www.tripwire.org) のような ツールが役割を果たします。 Red Hat 7.0 以降は tripwire を含んでいます。 このようなツールはファイルシステムの様々な側面をモニタし、 それらを蓄積しておいたデータベースと比較します。 そしていかなる変更が発見されても、 警告を報せるように設定できます。 このようなツールは"クリーンである"(侵入されていない) ことが分かっているシステムにだけインストールすべきです。

自宅のデスクトップマシンと家庭内 LAN においては、 これはおそらくセキュリティの全体戦略において 絶対不可欠な部分というわけではないでしょう。 しかし、心の平安を与えてくれますし、存在意義があることは確かです。 ですから優先順位としては、これにとりかかる前に、 まず上のステップ1,2,3を果たしたことを確認して、 うまくいってることを確かめてください。

RedHat ユーザは、 rpm -Va で大体同じ結果が得られます。 これは全てのパッケージを調べてくれますが、 全く同じ機能を持っているわけではありません。 例えば、それはほとんどのディレクトリでは、 新しいファイルが追加されても気づきません。 また、拡張属性が変更されたファイルも検出しません (例えば、chattr +i, man chattr と man lsattr で参照のこと)。これをうまく使うには、 クリーンインストールの後で行わねばなりませんし、 どんなパッケージがアップグレード、または追加されても、 その度に行う必要があります:

 
 # rpm -Va > /root/system.checked

 

このようにして、後で比較できるように、 システムのスナップショットを保管しておくのです。

また別のアイデアには、 chkrootkit (http://www.chkrootkit.org/) を毎週の cron ジョブとして走らせるという方法があります。 これは通常の "rootkit" (侵入した偽ルートがインストールするツール群)を検出します。

6.2. もうハックされてる?

あなたがここを読んでいるのは、 システムに何か"おかしな"ところがあるのに気づいて、 誰かに侵入されたのではないかと疑っているからかも知れませんね。 以下が手がかりになるはずです。

典型的な侵入者が最初に行うことは、 "rootkit" のインストールです。 インターネット上ではたくさんの rootkit のパッケージが手に入ります。 rootkit は本質的にはスクリプト、またはスクリプトの組み合わせで、 侵入者がシステムをコントロール下におき、うまく身を隠すために、 手早くシステムを変更するのに使うためのものです。 侵入者は、 通常のシステムユーティリティの改竄バイナリをインストールすることと、 ログファイルを書き変えることで、これを行います。 または、同様の結果が得られる特別なカーネルモジュールを使います。 ですから、ls のような普通のコマンドが、 侵入者がファイルを保存している場所を表示しないように、 変更されているかも知れないのです。なんて賢いのでしょう!

うまく設計された rootkit は極めて効果的です。 そのシステムの上の何一つ、 正しい答えを返してくれるか本当には信用できなくなります。 何もかもです!しかし時に、その変化が狙い通りほども滑らかではなく、 何事かが正しくないというヒントを与えてくれます。 以下は危険信号かも知れない兆候のいくつかです:

時に、侵入者はそれほど賢くなく、 root の .bash_history のことを忘れたり、ログの内容を消去するのを忘れたり、 または奇妙な、使い残しのファイルを /tmp に 残していたりすることさえあります。 ですから、これらを常にチェックしましょう。 それらが正しいと必ずしも期待しないように。 しばしば、これらの使い残しのファイルやログエントリーは、 明白にスクリプトキディぽい名前になっているでしょう。 例えば、"r00t.sh" など。

tcpdump (http://www.tcpdump.org) のようなパケットスニファ(sniffer)は招かれざる通信を見つけ出すのに 有用かもしれません。しかし、 スニファの出力を解釈することは、 おそらく平均的な新人ユーザのレベルを超えているでしょう。 snort (http://www.snort.org) と ethereal (http://www.ethereal.com) も有用です。 Ethereal は GUI を備えています。

既に述べたように、信頼できないシステムは疑いもなく、 システムバイナリを変更されてしまっているでしょうし、 そのシステムのユーティリティの出力を信頼すべきでないでしょう。 そのシステムの何も、 あなたに真実を全て伝えてくれると信用することはできません。 個別のパッケージを再インストールすることは、 助けになるかも知れないし、ならないかも知れません。 と言うのも、悪さをしているのは、 システムライブラリやカーネルモジュールかも知れないからです。 ここでのポイントは、どのコンポーネントに変更が加えられたか、 絶対的に確実に知る方法は存在しないということです。

RedHat ユーザ は全てのパッケージの整合性を確認するために、 rpm -Va |less を使うことができます。 しかし、ここでも再び、rpm 自身が変更を加えられていないという保証はないし、 RPM が依存しているシステムコンポーネントが いじられてしまっているかも知れないのです。

もしシステムに pstree コマンドがあるなら、 これを標準的な ps コマンドの代わりに使ってみてください。 時々、スクリプトキディ(スクリプト使いの悪餓鬼、新米クラッカーたち) はこのことを忘れているので。 しかし、これも正しいという保証はありません。

また、/proc ファイルシステムを使って、 以下のように調べてみることもできます。 これには、現在走っているプロセスについて カーネルが知っていることの全てが含まれています:

 
 # cat /proc/*/stat | awk '{print $1,$2}'
 
 

これは全てのプロセスと PID 番号 (邪悪なカーネルモジュールがこれを隠していないと仮定しての話ですが) のリストを作ってくれます。

また別の方法は http://www.chkrootkit.org サイトを訪ねて、rootkit キャッチャーをダウンロードして、 それに調べさせてみることでしょう。

この問題にまつわる興味深い議論の場が、 http://www.fish.com/security/ で見つかると思います。そこには、 適切にも"検視官の道具箱" (The Coroner's Toolkit, TCT) と呼ばれているツールもあります。

侵入から復旧するためのステップについては以下を読んでください。

6.3. 信頼を失ったシステムの復旧

さて、あなたは侵入を確認し、 誰か他の人が root アクセスを持っていることがわかりました。 しかも、システムに一つ以上の隠されたバックドア(裏口) が作られている可能性も極めて高い。 あなたはコントロールを失ってしまいました。 どうやってこれを掃除し、コントロールを取り戻せばよいでしょう。

これを手っ取り早く行うには、 完全な再インストールしか確かな方法はありません。 全ての変更されたファイルと残されているかもしれないバックドアを 確実に見つけ出す方法はありません。 信頼を失ったシステムを取り繕おうとすることは、 間違ったセキュリティ意識であって、 しかも実際、既に悪い状況にあるシステムを さらに悪化させる可能性があります。

以下の順番に従って、段階を踏んでいきましょう:

この時点では、 オンラインで手に入る rootkit 駆除ツールを使うことはお勧めできません。 それらはほとんどの場合にはうまく働いてくれるでしょうが、 繰り返しますが、万事オーケーで、侵入の全ての形跡が去ったと、 どうやって絶対の確信が持てるというのでしょう。