この章は、いかにして早期に前兆に気づくか、 いかにして事実の後に警戒態勢をとるか、 そしていかにして侵入の企てからシステムをクリーンな状態に復旧するか、 を扱います。
侵入発見システム(Intrusion Detection Systems, IDS) はファイアーウォールを通り過ぎて何かが起こったかもしれないとき、 それを捕まえるよう設計されています。 また、進行中の能動的な侵入の企てを捕まえるようにも、 または事件の後に成功した侵入を発見するようにも設計されています。 後の場合には、いかなる被害を避けるにも遅過ぎますが、 少なくとも早期に問題に気づくことが出来ます。 IDS には二つの基本的なタイプがあります。 それは、ネットワークを保護するものと、個別のホストを保護するものです。
ホストに基づく IDS は、ファイルシステムの変更をモニタする ユーティリティによってなされます。 変更されるべきでないシステムファイルが、 自分が変更したのではないのに、何らかの方法で変更されていたとすると、 それは何かまずいことが起こった証拠と言えます。 誰かが中に入り、root 権限を得て、 おそらくシステムのどこかに変更を加えているのでしょう。 これは通常、侵入後の一番最初になされることです。 これで、侵入者はバックドアを通って帰ってこられるし、 さらに他の誰かへの攻撃を始めることができます。 どの場合も、侵入者はシステムに対しファイルを変更するか、 付け加える必要があります。
ここでは tripwire (http://www.tripwire.org) のような ツールが役割を果たします。 このようなツールはファイルシステムの様々な側面をモニタし、 それらを蓄積しておいたデータベースと比較します。 そしていかなる変更が発見されても、 警告を報せるように設定できます。 このようなツールは"クリーンである"(侵入されていない) ことが分かっているシステムにだけインストールすべきです。
自宅のデスクトップマシンと家庭内 LAN においては、 これはおそらくセキュリティの全体戦略において 絶対不可欠な部分というわけではないでしょう。 しかし、心の平安を与えてくれますし、存在意義があることは確かです。 ですから優先順位としては、これにとりかかる前に、 まず上のステップ1,2,3を果たしたことを確認して、 うまくいってることを確かめてください。
RPM ユーザ は、 rpm -Va で大体同じ結果が得られます。 これは全てのパッケージを調べてくれますが、 全く同じ機能を持っているわけではありません。 例えば、それはほとんどのディレクトリでは、 新しいファイルが追加されても気づきません。 また、拡張属性が変更されたファイルも検出しません (例えば、chattr +i, man chattr と man lsattr で参照のこと)。これをうまく使うには、 クリーンインストールの後で行わねばなりませんし、 どんなパッケージがアップグレード、または追加されても、 その度に行う必要があります:
# rpm -Va > /root/system.checked |
このようにして、後で比較できるように、 システムのスナップショットを保管しておくのです。
Debian ユーザには類似したツール debsums があります。
# debsums -s > /root/system.checked |
また別のアイデアには、 chkrootkit (http://www.chkrootkit.org/) を毎週の cron ジョブとして走らせるという方法があります。 これは通常の "rootkit" (侵入した偽ルートがインストールするツール群)を検出します。
あなたがここを読んでいるのは、 システムに何か"おかしな"ところがあるのに気づいて、 誰かに侵入されたのではないかと疑っているからかも知れませんね。 以下が手がかりになるはずです。
典型的な侵入者が最初に行うことは、 "rootkit" のインストールです。 インターネット上ではたくさんの rootkit のパッケージが手に入ります。 rootkit は本質的にはスクリプト、またはスクリプトの組み合わせで、 侵入者がシステムをコントロール下におき、うまく身を隠すために、 手早くシステムを変更するのに使うためのものです。 侵入者は、 通常のシステムユーティリティの改竄バイナリをインストールすることと、 ログファイルを書き変えることで、これを行います。 または、同様の結果が得られる特別なカーネルモジュールを使います。 ですから、ls のような普通のコマンドが、 侵入者がファイルを保存している場所を表示しないように、 変更されているかも知れないのです。なんて賢いのでしょう!
うまく設計された rootkit は極めて効果的です。 そのシステムの上の何一つ、 正しい答えを返してくれるか本当には信用できなくなります。 何もかもです!しかし時に、その変化が狙い通りほども滑らかではなく、 何事かが正しくないというヒントを与えてくれます。 以下は危険信号かも知れない兆候のいくつかです:
login コマンドのふるまいがおかしい。 または誰も login できない。または root だけが login できる。 ふるまいのおかしな login コマンドは 全て疑うべきです。 パスワード追加、変更についておかしな所があるのも同様です。
他のシステムコマンド(例えば、 top や ps)がおかしいのも同様に疑うべき要因です。
システムユーティリティの動作が通常より遅くなっている、 使い難い、または、おかしな、予期せぬ結果を示す。 変更を加えられるかもしれない普通のユーティリティは、 ls, find, who, w, last, netstat, login, ps, top などです。もちろんこれらに限りません!
"..." や ".. "(ドット、ドット、空白) と名づけられたファイルやディレクトリ。 この場合はかなり怪しいです。 "r00t-なになに" のようなハッカーぽい名前のファイル。
説明できない帯域の使用や接続。スクリプトキディたちは IRC が大好きですから、このような接続は赤信号とすべきです。
ログが完全に失われている、または大きな部分が欠損している。 または syslog のふるまいに突然の変化がある。
謎の開いたポート、またはプロセス。
削除することも move することもできないファイル。 rootkit の中にはファイルを"不変"にする、 または変更不可能にするために chattr コマンド を使うものがあります。この種の変更は、 ls や rpm -V では示されないので、 そのファイルは一見は正常に見えます。 これをくつがえすにはどうすればよいか、 chattr と lsattr のman ページを参照してください。 そして、ここでお手上げになったシステムを復旧するための 次の章を見てください。
これはますますありふれたのスクリプトキディのトリックになってきています。 実際、疑わしいシステム上で走らせる手っ取り早い手は(root になって) 次のようにします;
/usr/bin/lsattr `echo $PATH | tr ':' ' '` | grep i-- |
これで root の PATH にある 全ての"不変な"ファイルを見つけてくれます。 標準的なディストリビューションでファイルをこの状態で 出荷しているものはありませんので、 これはほぼ確実にトラブルの徴候です。 もし、上のコマンドがどんなものであっても 何かのファイルを表示したら、(以下を参照して) システムを完全に復帰させる計画をたててください。 手っ取り早く健全性をチェックするには次のようにします:
# chattr +i /bin/ps # /usr/bin/lsattr `echo $PATH | tr ':' ' '` | grep "i--" ---i---------- /bin/ps # chattr -i /bin/ps |
これは単に、lsattr が 完全にあてにならないと言うところまでは、 システムが変更を加えられてはいないということを確認しているだけです。 三行目がまさにその注目すべき箇所です。
"sniffer"(トラフィック聴取、解析ツールの類)の兆候。 例えば、"無差別"モードになったインターフェースの ログメッセージ。
/etc/inetd.conf, rc.local, rc.sysint, /etc/passwd への変更。特に、追加。 cat か tail を使って、これらのファイルを見てみましょう。 追加は最後の行に付け加えられていることが多いでしょう。しかし、 このような変化はどのシステムツールからも"見えない" かもしれないことを忘れないで下さい。
時に、侵入者はそれほど賢くなく、 root の .bash_history のことを忘れたり、ログの内容を消去するのを忘れたり、 または奇妙な、使い残しのファイルを /tmp に 残していたりすることさえあります。 ですから、これらを常にチェックしましょう。 それらが正しいと必ずしも期待しないように。 しばしば、これらの使い残しのファイルやログエントリーは、 明白にスクリプトキディぽい名前になっているでしょう。 例えば、"r00t.sh" など。
tcpdump (http://www.tcpdump.org) のようなパケットスニファ(sniffer)は招かれざる通信を見つけ出すのに 有用かもしれません。しかし、 スニファの出力を解釈することは、 おそらく平均的な新人ユーザのレベルを超えているでしょう。 snort (http://www.snort.org) と ethereal (http://www.ethereal.com) も有用です。 Ethereal は GUI を備えています。
既に述べたように、信頼できないシステムは疑いもなく、 システムバイナリを変更されてしまっているでしょうし、 そのシステムのユーティリティの出力を信頼すべきでないでしょう。 そのシステムの何も、 あなたに真実を全て伝えてくれると信用することはできません。 個別のパッケージを再インストールすることは、 助けになるかも知れないし、ならないかも知れません。 と言うのも、悪さをしているのは、 システムライブラリやカーネルモジュールかも知れないからです。 ここでのポイントは、どのコンポーネントに変更が加えられたか、 絶対的に確実に知る方法は存在しないということです。
RPM ユーザ は全てのパッケージの整合性を確認するために、 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) と呼ばれているツールもあります。
侵入から復旧するためのステップについては以下を読んでください。
さて、あなたは侵入を確認し、 誰か他の人が root アクセスを持っていることがわかりました。 しかも、システムに一つ以上の隠されたバックドア(裏口) が作られている可能性も極めて高い。 あなたはコントロールを失ってしまいました。 どうやってこれを掃除し、コントロールを取り戻せばよいでしょう。
これを手っ取り早く行うには、 完全な再インストールしか確かな方法はありません。 全ての変更されたファイルと残されているかもしれないバックドアを 確実に見つけ出す方法はありません。 信頼を失ったシステムを取り繕おうとすることは、 間違ったセキュリティ意識であって、 しかも実際、既に悪い状況にあるシステムを さらに悪化させる可能性があります。
以下の順番に従って、段階を踏んでいきましょう:
プラグを抜いて、マシンをネットワークから切断しましょう。 あなたは望まぬ犯罪の片棒を担がされているかもしれず、 既に自分がされてしまったことを今、 他人に対して行っている最中かもしれないのです。
システムを回復させるために使える時間と必要性に依存しますが、 穴を再び繋ぎ、また侵入者が帰ってくるのを避けるために、 出来る限りの時間をかけて、 攻撃者がどのようにして侵入し何がされたのかを 調査することは利益になります。 想像されるように、これは時間のかかる作業になりえますし、 常に実行できるわけではありません。 しかも、この作業には典型的なユーザが持っているよりも、 高度な熟練が必要となるかもしれません。
大事なデータのバックアップをとりましょう。 システムファイルをバックアップに含めないこと。 inetd.conf のようなシステム設定ファイルもです。 バックアップするのは、個人的なデータファイルのみに限ってください。 バックドアやその他の穴を開けられるかも知れないものまでバックアップして、 復活させたくはないでしょう。
最初から再インストールし、残り物が隠れていないことを 確実にするためにもインストールの際には、 ドライブを再フォーマットしましょう(mke2fs)。 実際のところ、特に、 これから解析を行うために信頼を失ったデータを保存しておきたい場合には、 ドライブごと入れ替えるのは悪くないアイデアです。
バックアップしたデータを戻します。 クリーンなインストールの後が、 tripwire (http://www.tripewire.org) などの IDS (侵入発見システム Intrusion Detection System) をインストールする一番良いタイミングです。
そのディストリビューションの 全ての最新のアップデートファイルを適用し、パッチをあてます。 セキュリティ関係の情報を集めるためにベンダの web サイトを チェックしてください。
システムが不必要なサーヴィスを走らせていないか再チェックしましょう。 ファイアーウォールとアクセスポリシーを再検査し、 全ての穴を厳しく締めつけてください。 新しいパスワードを使ってください。 盗まれていることは非常にありそうなことですから。
システムを再接続します ;-)
この時点では、 オンラインで手に入る rootkit 駆除ツールを使うことはお勧めできません。 それらはほとんどの場合にはうまく働いてくれるでしょうが、 繰り返しますが、万事オーケーで、侵入の全ての形跡が去ったと、 どうやって絶対の確信が持てるというのでしょう。