〜rootkitを検出するために〜

連載:インシデントレスポンスはじめの一歩

第2回 侵入者が仕掛けるrootkitの特徴を知る

新町久幸
ラック
2003/4/19

今回のindex
rootkitが持つ機能
アクセス手段の確立〜バックドアの作成〜
システムへの攻撃
証拠の隠ぺい〜侵入の事実と証拠を隠す〜
 『第1回 攻撃手法の代表格「バックドア」と「トロイの木馬」と「rootkit」を知る』はシステムへの侵入者が設置する代表的な裏口についての分類と簡単な解説を行った。「バックドア」と「トロイの木馬」と「rootkit」について、混同することなくご理解いただけたであろうか。今回はrootkitに対象を絞って解説していきたいと思う。

※ご注意

他社および他組織のWebサイトなどへのポートスキャンおよびデータの取得などの行為で得た情報を侵入などに悪用するか、または同じ目的を持つ第三者に提供した時点で違法となります。ご注意ください。

本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。また、本稿を利用した行為による問題に関しましては、筆者、筆者の所属先企業、および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。

 rootkitが持つ機能

 rootkitの解説を始める前に、システムに不正に侵入した者がどのような目的でrootkitを仕掛けるのかをまず考えていただきたい。

 攻撃者がシステムに侵入する目的は何であろうか? システム上に格納された情報の入手や破壊、Webページの改ざん、リソースの不正利用、ほかのシステムに侵入するための足掛かり、あるいは侵入自体が目的の場合もあるだろう。ここに挙げた以外にもさまざまな目的が考えられる。

では、侵入者がそれぞれの目的を実現するためにはどのようなツールがあればコトを円滑に進めることができるのであろうか? その観点からアプローチすることで、rootkitの特徴が理解しやすくなるだろう。

 システムへの侵入に成功した攻撃者は、その後自己の目的を達成するために活動を開始する。通常、それらのアクティビティの発生に伴いシステム上にその痕跡が残ってしまうものである。その痕跡を残したままにしておいては、システムに何らかの異常が発生していることを管理者に察知される可能性が高くなってしまう。システムへの侵入に成功したとしても、その事実がすぐに発見されてしまっては目的を満足に果たすことができない。端末からwhoと入力しただけで、侵入者がシステムへのログインに使用しているユーザー名が表示されてしまっては元も子もないのである。

 なお、ここでの痕跡とはsyslogに代表されるようなロギング機能を有するプログラムが出力するログ、実行するプログラムが出力するログ、コマンド履歴、そしてシステムの状態を調べるためにコマンドを実行した場合に出力される情報といった、不正侵入の事実を示す情報全般を指している。

 以下は攻撃者(ユーザー名:intruder)がシステムにログインしている状態で、管理者がwhoコマンドおよびlastコマンドを実行した場合に表示される情報である。

# who
intruder pts/1 Apr 9 13:24
root pts/0 Apr 9 17:53


# last
intruder pts/1 192.168.0.6 Wed Apr 9 17:58 still logged in
root pts/0 192.168.0.1 Wed Apr 9 17:58 still logged in
root tty1 Wed Apr 9 17:57 - 17:59 (00:02)
reboot system boot 2.4.20 Wed Apr 9 17:56 (00:03)
root tty1 Wed Apr 9 17:54 - down (00:00)
root pts/0 192.168.0.1 Wed Apr 9 13:28 - 17:53 (04:24)
intruder pts/1 192.168.0.6 Wed Apr 9 13:24 - 17:54 (04:29

 このように、“root”ユーザーのほかに“intruder”という名前のユーザーがシステムにログインしていることは一目瞭然である。

 従って、多くの場合において侵入者は自己の存在を管理者の目から隠したいと考えている。侵入者はできる限り管理者に発見されるのを遅延させ、その間に行動を起こすのである。rootkitに隠ぺいを目的としたツールが含まれることが多いのも、こうした背景によるものである。

 そのほかにも、rootkitにはシステムに再び侵入するためのバックドアの作成、あるいは攻撃を行うためのツール、情報収集やほかのシステムに侵入する目的でスニファやキーロガーが含まれることもある。実際に世の中には多種のrootkitが出回っており、それぞれが独自の機能を備えている。侵入者にとって便利なツールの集まり、それがrootkitである。それ故、rootkitの機能を一概に定義することは難しいが、その機能に着目すると以下の3つに分類することができるだろう。

  • アクセス手段の確立
  • システムへの攻撃
  • 証拠の隠ぺい
 これらの特徴さえ押さえてしまえば、「rootkitを用いることで何ができるのか?」という疑問を解決することができるだろう。それでは、それぞれの特徴について解説していこう。

 アクセス手段の確立〜バックドアの作成〜

 システムへの侵入を果たした攻撃者は、そこに再び戻るための秘密の手段を用意する場合がある。それが第1回で解説した「バックドア」の作成である。バックドアにはいくつか種類が挙げられるが、利用する手法によりローカルとリモートに分類することができる。

 ローカルのバックドアとしては、loginコマンドの置き換えが挙げられる。また、侵入に使用するログインユーザーの追加やシステムの設定ファイルを変更するだけでもバックドアになり得る。ほかにも、バイナリを置き換えたコマンドを設置しておき、侵入者が何らかのアクションを起こした場合に上位の権限に昇格するといったものも存在する。これらのバックドアを利用する場合は、事前にサービスを起動しておく必要はなく、既存のサービスを介してアクセスを行えばよい。

 リモートのバックドアとは、システムに外部からの接続を待ち受けるような仕掛けを施すことである。簡単な設置方法としては、TelnetやSSHなどのサービスを利用して裏口を作成することが挙げられる。この方法以外にもUDPを使用するサービスやICMPの利用、特定のデータを持つパケットを送信した場合にのみバックドアが発現するなどの、特別な方法をトリガーとして用いる場合もある。

 このバックドア設置の具体例については、「連載:不正侵入の手口と対策 第4回 攻撃者が侵入後に行うバックドアの設置例」を参照してほしい。

 システムへの攻撃

 rootkitには攻撃を行うためのツールが含まれている場合もある。攻撃はその対象により、ローカルとリモートの2つに分けることができる。

 ローカルへの攻撃として代表的なものにパスワードクラッキング、スニファ、キーロガーなどの情報収集を目的としたプログラムの実行、システムの弱点を突いて権限の奪取や権限の昇格を図るプログラム(exploitプログラム)の実行などが挙げられる。侵入の時点でroot権限を持っていなくても、その権限を奪取される可能性は十分にある。一般に、システムは外側からの攻撃よりも内側からの攻撃にもろいものである。

 リモートへの攻撃とは、侵入者がそのマシンを踏み台として第三のシステムに対して攻撃を行うことである。代表的な攻撃として、権限の奪取や権限の昇格を意図したプログラムの実行やサービスの提供を阻害することを目的とするプログラム(DoSプログラム)の実行が挙げられる。また、侵入したシステム上で収集した情報を攻撃の足掛かりにする場合も多い。

 証拠の隠ぺい〜侵入の事実と証拠を隠す〜


●証拠を隠す

 一般にシステムに不正に侵入した者はその痕跡を隠そうとする。そうでなければ、管理者に容易に発見されてしまうからである。侵入者はできる限り自己の存在が露見するまでの時間を長くさせ、その間に目的の活動を行うのである。もし侵入者が管理者権限を奪取しているならば、syslogなどのログ収集機能を有するプロセスの停止、ログファイルの改ざん、削除も可能である。そのような状況においては、管理者がシステムへの不正侵入の痕跡を発見することが困難である。

 また、運良くその痕跡を発見したとしても、そこでどのような活動が行われたかを特定することが非常に困難となる。ログ自体の信ぴょう性を低下させることで証拠の隠ぺいを図り、侵入が露見した場合でもその被害状況を特定するのを困難にさせるのである。

 ログファイルの改ざんや削除を行うプログラムは通称「ロググリーナ」または「ログワイパ」と呼ばれ、syslogによって保存されたログを対象とするものからHTTPサーバやFTPサーバといった特定のアプリケーションが出力するログを対象としたものなどさまざまなものが存在している。これらのプログラムは、ログファイルに保存された情報から侵入者にとって不利な情報を削除する働きをする。

 ここでロググリーナの一例として、RokK Industriesによって作成されたzap.c
http://packetstormsecurity.nl/UNIX/penetration/log-wipers/zap.c)を用いてログファイルの改ざんの例を示すことにしよう。このプログラムは、システムへのログイン情報を記録したファイル(lastlog、utmp、wtmp)から指定したユーザーのログイン情報を削除するプログラムである。

 プログラムを実行する前に、whoとlastコマンドを使用して現在のログイン情報を確認してみる。

$ who
root tty1 Apr 14 02:29
intruder pts/0 Apr 14 02:30
$ last
intruder pts/0 192.168.0.6 Mon Apr 14 02:30 still logged in
root tty1 Mon Apr 14 02:29 still logged in
reboot system boot 2.4.20 Mon Apr 14 02:23 (00:18)

 出力された情報から、現在“root”と“intruder”ユーザーがシステムにログインしていることを確認することができる。続いて、ユーザー名“intruder”を指定してプログラムを実行する。

# ./zap intruder
Zap!

 再度ログイン情報を確認する。

$ who
root tty1 Apr 14 02:29
$ last
root tty1 Mon Apr 14 02:29 still logged in
reboot system boot 2.4.20 Mon Apr 14 02:23 (00:18)

 プログラムの実行後にログイン情報から指定したユーザー(intruder)に関する情報が出力されなくなったことがお分かりいただけるだろうか。whoコマンドとlastコマンドは、それぞれutmpファイル、wtmpファイルを参照してログ情報を出力している。ログクリーナ(zap.c)によってこれらのログファイルから“intruder”に関する情報が削除されたため、結果として“intruder”に関する情報が出力されなくなったのである。

 システムが記録するログの一例やログファイルの改ざんの具体例については、「連載:不正侵入の手口と対策 第6回 アクセスログの改ざんと検出方法」を参照してほしい。

●活動を隠す

 侵入者がシステム上で行うアクティビティは、一般的なコマンドで簡単に発見することが可能である。システムへのログイン情報はwhoやlastなどのコマンド、ネットワーク接続の状況であればnetstatコマンドで容易に検知することができる。また、システムにスニファやキーロガーなどのプログラムが仕掛けられていたとしても、ifconfigやpsなどのコマンドを使用すればそれを確認することができるのである。

 侵入者の立場からすれば、これらのアクティビティが管理者に検知されることは望ましいことではない。そこで、コマンドのバイナリ自体を置き換えることにより、自分にとって不利となり得るアクティビティを出力させないようにするのである。

 前回トロイの木馬の具体例として紹介した、telar氏によって作成されたf_ps.c
http://packetstormsecurity.nl/UNIX/utilities/f_ps.c)も活動を隠すための1つの手段である。

 rootkitに含まれるツールのインストール先やrootkitで使用する設定ファイルの格納先が/tmpである場合が多いことも、作成されるファイル名やディレクトリ名の先頭がドット(.)で始まるものが多いことも自己隠ぺいの1つの手段といえる。

 前者は、頻繁に更新されるファイルが含まれるディレクトリには管理者の目が届きにくいことや、そもそもディレクトリ自体が管理の対象となっていない場合があることなどが理由として考えられる。後者は、多くのUNIXシステムでは先頭がドット(.)で始まる名前の場合、コマンドに引数を与えないと画面に出力されないことが多く、これが理由として考えられる。

 また、rootkitにはファイルシステムに関連するコマンドを置き換え、インストールしたrootkit自身を表示させないようにするものも存在する。このようにさまざまな手段を駆使して、侵入者は管理者の目から逃れようとするのである。

 今回はrootkitが共通して持つ特徴を3つに分類し、それぞれの特徴について説明を行った。ここでもう一度、思い出してみよう。

アクセス手段の確立 正規の手順とは異なる方法でシステムへアクセスするための方法や手順を提供するもの。
システムへの攻撃 侵入したシステム上で情報収集、あるいは権限昇格やサービス妨害を目的とした攻撃のための手段を提供するもの。また、ほかのシステムに対して攻撃を行うための手段を提供するもの。
証拠の隠ぺい 不正侵入の痕跡の隠ぺいや証拠隠滅の目的で、コマンドの置き換えやログファイルの改ざん、削除を行うための手段を提供するもの。

 いままでサンプルとして紹介してきたのは、バイナリを置き換えてシステムの挙動を変化させるコマンドを含むrootkitであった。次回は、この方法とは異なる手法を用いるLKM rootkitと呼ばれる種類のrootkitについての解説を行う。

第1回」へ 第3回

index
第2回 rootkitの特徴を知る
rootkitが持つ機能
アクセス手段の確立〜バックドアの作成〜
システムへの攻撃
  証拠の隠ぺい〜侵入の事実と証拠を隠す〜

関連記事
連載:Webアプリケーションに潜むセキュリティホール
特集:クロスサイトスクリプティング対策の基本
連載:不正侵入の手口と対策

「連載 インシデントレスポンスはじめの一歩」


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間