〜rootkitを検出するために〜

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

第1回
攻撃手法の代表格「バックドア」と「トロイの木馬」と「rootkit」を知る


新井悠
ラック
2003/3/29

今回のindex
攻撃者にとって格好の利用手段である「バックドア」
セキュリティの破綻をもたらす悪意あるプログラム「トロイの木馬」
攻撃者の時間と手間を省くためのツール「rootkit」
 攻撃者の侵攻からサイトを守ることの必要性についての認識はここ数年で高い水準にまで向上した。しかし、実際に侵入を発見すること、そしてその事後対応については認識が薄いのが現状である。攻撃者が行うことの代表格としてバックドアの設置があるが、バックドアを検知するためには、バックドアがどのようなしくみで動作しているのか、どのようなしくみで裏口を作成するのか、どのようにしてシステムに埋め込まれるのかといった手法そのものを知ることがまず必要であり、それが防御の第一の方法だろう。

 本連載では、まず攻撃者の侵入で仕掛けられることの多いバックドアやトロイの木馬、rootkit(ルート・キット)について解説する。その後、rootkitのしくみを解説し、それを検出するための実践的なオペレーションワーク手順を解説し、理解していただくことを目標とする。読者の方にとって「インシデントレスポンス」の参考としていただければ幸いだ。

 なお、あらかじめ断っておくが、本連載は攻撃者を育成するためのものではない。サーバ管理者に攻撃者の手口(心理)を知ってもらうことで、より効果的なサーバの運用管理に役立ててもらうことを目的としている。

※ご注意

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

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

 「バックドア」や「トロイの木馬」あるいは「rootkit」は、セキュリティ用語として頻繁に使われている。ただ、これらの用語はその解釈が以前より広がっており、その区別さえもよく分からなくなっていることが多い。そこでまずは、バックドアの意味について考えてみることにしよう。

 攻撃者にとって格好の利用手段である「バックドア」

 もともとは、システム管理者がコンピュータシステムにアクセスするために、あるいはプログラマがソフトウェアにアクセスするために用意した秘密の手段のことを指して「バックドア(back door)」と呼んだ。これは “trap door”や“wormhole”とも呼ばれ、この「秘密の手段」を事前に知っている攻撃者にとっては、システムに手軽に侵入するための格好の利用手段となり得る。なぜならば、バックドアはアクセス制御を迂回(うかい)して、アクセスを許す要素にほかならないからだ。

 このようなバックドアが利用された代表的なセキュリティインシデントといえば、1988年の“The Internet Worm”である。当時 Cornell 大学の大学院生であったRobert Tappan Morris氏によって作成され、最初にMIT(マサチューセッツ工科大学)のホストに仕込まれたこのワームは、圧倒的な繁殖力でインターネット(当時は 「ARPANET」)に接続しているホストに感染していった。感染に利用された手段は3つあったが、そのうちの1つが当時のsendmailが提供する機能の中に存在していた隠しモードである“DEBUG”であった。これを利用することで、ワームはリモートから任意のコマンドをroot権限で実行できたのであった。当時のsendmailの機能に含まれていたという事実から考えて、これはバックドアである、ということができるだろう。

 ところで、この「秘密の手段」がシステム管理者などではなく、攻撃者によって設置された場合はどうなるであろうか? あるシステムの管理者権限を手に入れることに成功した攻撃者は、そのシステムに後から戻ってこられるように、アクセス制御を迂回し、再度アクセスを許す要素を作りあげることができる。そう、このように攻撃者によって不正に作成されたアクセス手段もまた、近年においては「バックドア」と呼ばれるようになっているのだ。そして攻撃者が再度アクセスすることを欲しているのは、単純な興味、スニッフィングによる電子メールやパスワードの取得、あるいは管理者権限を得ることのできたシステムからさらに別のシステムを攻略することを目的としているなどの理由があるからだ。

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

 セキュリティの破綻をもたらす悪意あるプログラム
  「トロイの木馬」

 さて、バックドアと混同されやすいのがトロイの木馬である。トロイの木馬とは、ファイルの一覧を表示するプログラムや、ファイルの圧縮および解凍(伸長)プログラム、ゲーム、あるいはウイルスを検出して駆除するプログラムなどの、正当なプログラムであるかのように偽装しているが、実際にはセキュリティの破たんをもたらす悪意あるプログラムのことを指す。では「正当のものであるかのように偽装しているプログラム」とは、どのようなものであろうか?

●トロイの木馬の具体例:バイナリの置き換え

 インストール直後にユーザーが利用できるような、OS付属のバイナリを別のモノに置き換える。ユーザーがこのバイナリを実行した結果は意図したものではあるが、その「背後」で別の仕掛けが作動する。例えば、telar氏によって作成されたf_ps.cがある(http://packetstormsecurity.nl/UNIX/utilities/f_ps.c)。このプログラムをコンパイルし、生成されたバイナリで通常のpsを上書きすることで、プロセスの一覧を改ざんしてから出力させることができる。

 これは、どのような結果をもたらすのだろうか? より具体的に説明するために、「連載:不正侵入の手口と対策 第4回 Page2」で詳述されているnetcatを使用したバックドア設置を例にすることにしよう。

 攻撃者(ユーザー名:intruder)がローカルから次のようにnetcatを使用し、TCP 2003番ポートで接続を待ち受けるバックドアを設置したとする(ここではプラットフォームとしてLinuxシステムを例とする)。

# nc -vv -l -p 2003 -e /bin/sh
listening on [any] 2003 ...

 このとき、改ざんされていないpsのバイナリをコンソールからログインしたrootユーザーが実行した場合、次のように表示されるはずだ。

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 1328 428 ? S Mar11 0:06 init [3]
root 2 0.0 0.0 0 0 ? SW Mar11 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Mar11 0:00 [kupdate]
root 4 0.0 0.0 0 0 ? SW Mar11 0:00 [kpiod]
root 5 0.0 0.0 0 0 ? SW Mar11 0:00 [kswapd]
root 6 0.0 0.0 0 0 ? SW< Mar11 0:00 [mdrecoveryd]
root 344 0.0 0.8 1388 536 ? S Mar11 0:00 syslogd -m 0
root 354 0.0 1.1 1636 700 ? S Mar11 0:00 klogd
rpc 369 0.0 0.8 1476 560 ? S Mar11 0:00 portmap
root 385 0.0 0.0 0 0 ? SW Mar11 0:00 [lockd]
root 386 0.0 0.0 0 0 ? SW Mar11 0:00 [rpciod]
rpcuser 396 0.0 1.1 1564 712 ? S Mar11 0:00 rpc.statd
root 411 0.0 0.6 1312 428 ? S Mar11 0:00 /usr/sbin/apmd -p
nobody 465 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
nobody 467 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
nobody 469 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
nobody 470 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
nobody 475 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
daemon 484 0.0 0.5 1360 360 ? S Mar11 0:00 /usr/sbin/atd
root 515 0.0 1.2 2464 764 ? S Mar11 0:00 /usr/sbin/sshd
root 535 0.0 1.6 2216 1028 ? S Mar11 0:00 xinetd -reuse -pi
lp 551 0.0 0.8 2372 532 ? S Mar11 0:00 lpd Waiting
root 593 0.0 1.3 3220 864 ? S Mar11 0:00 sendmail: accepti
root 609 0.0 0.5 1352 348 ? S Mar11 0:00 gpm -t ps/2
root 748 0.0 7.4 7356 4712 ? S Mar11 0:01 /usr/sbin/httpd -
bin 766 0.0 0.5 1708 352 ? S Mar11 0:00 cannaserver -sysl
root 781 0.0 1.0 1556 652 ? S Mar11 0:00 crond
xfs 804 0.0 3.6 3668 2292 ? S Mar11 0:00 xfs -droppriv -da
root 837 0.0 0.5 1304 356 ? S Mar11 0:00 rhnsd --interval
root 854 0.0 0.6 1300 436 tty2 S Mar11 0:00 /sbin/mingetty tt
root 855 0.0 0.6 1300 436 tty3 S Mar11 0:00 /sbin/mingetty tt
root 856 0.0 0.6 1300 436 tty4 S Mar11 0:00 /sbin/mingetty tt
root 857 0.0 0.6 1300 436 tty5 S Mar11 0:00 /sbin/mingetty tt
root 858 0.0 0.6 1300 436 tty6 S Mar11 0:00 /sbin/mingetty tt
apache 944 0.0 3.8 7448 2404 ? S Mar11 0:00 /usr/sbin/httpd -
apache 945 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 946 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 947 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 948 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 952 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 953 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 954 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
root 5353 0.0 1.7 2260 1116 tty1 S 02:27 0:00 login -- root
root 5354 0.0 2.1 2376 1368 tty1 S 02:27 0:00 -bash
root 5379 0.0 1.3 1712 856 ? S 02:27 0:00 in.telnetd: 192.1
root 5380 0.0 1.9 2288 1224 pts/0 S 02:27 0:00 login -- intruder
intruder 5381 0.0 2.0 2284 1276 pts/0 S 02:27 0:00 -sh
intruder 5401 0.0 0.9 1728 572 pts/0 S 02:27 0:00 nc -vv -l -p 2003

root 5405 0.0 1.4 2764 896 tty1 R 02:31 0:00 ps -aux

 このように、下から2番目の行に、“intruder”という名前のユーザーがnetcatを使用してバックドアを起動させていることが分かる。

 ここで、前述のf_ps.cプログラムが利用され、psバイナリを置き換えられてしまっていたとしよう。この置き換えられたバイナリを、コンソールからログインしたrootユーザーが、気付かないまま実行した場合は以下のようになる。

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 1328 428 ? S Mar11 0:06 init [3]
root 2 0.0 0.0 0 0 ? SW Mar11 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Mar11 0:00 [kupdate]
root 4 0.0 0.0 0 0 ? SW Mar11 0:00 [kpiod]
root 5 0.0 0.0 0 0 ? SW Mar11 0:00 [kswapd]
root 6 0.0 0.0 0 0 ? SW< Mar11 0:00 [mdrecoveryd]
root 344 0.0 0.8 1388 536 ? S Mar11 0:00 syslogd -m 0
root 354 0.0 1.1 1636 700 ? S Mar11 0:00 klogd
rpc 369 0.0 0.8 1476 560 ? S Mar11 0:00 portmap
root 385 0.0 0.0 0 0 ? SW Mar11 0:00 [lockd]
root 386 0.0 0.0 0 0 ? SW Mar11 0:00 [rpciod]
rpcuser 396 0.0 1.1 1564 712 ? S Mar11 0:00 rpc.statd
root 411 0.0 0.6 1312 428 ? S Mar11 0:00 /usr/sbin/apmd -p
nobody 465 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
nobody 467 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
nobody 469 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
nobody 470 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
nobody 475 0.0 0.7 7608 480 ? S Mar11 0:00 identd -e -o
daemon 484 0.0 0.5 1360 360 ? S Mar11 0:00 /usr/sbin/atd
root 515 0.0 1.2 2464 764 ? S Mar11 0:00 /usr/sbin/sshd
root 535 0.0 1.6 2216 1028 ? S Mar11 0:00 xinetd -reuse -pi
lp 551 0.0 0.8 2372 532 ? S Mar11 0:00 lpd Waiting
root 593 0.0 1.3 3220 864 ? S Mar11 0:00 sendmail: accepti
root 609 0.0 0.5 1352 348 ? S Mar11 0:00 gpm -t ps/2
root 748 0.0 7.4 7356 4712 ? S Mar11 0:01 /usr/sbin/httpd -
bin 766 0.0 0.5 1708 352 ? S Mar11 0:00 cannaserver -sysl
root 781 0.0 1.0 1556 652 ? S Mar11 0:00 crond
xfs 804 0.0 3.6 3668 2292 ? S Mar11 0:00 xfs -droppriv -da
root 837 0.0 0.5 1304 356 ? S Mar11 0:00 rhnsd --interval
root 854 0.0 0.6 1300 436 tty2 S Mar11 0:00 /sbin/mingetty tt
root 855 0.0 0.6 1300 436 tty3 S Mar11 0:00 /sbin/mingetty tt
root 856 0.0 0.6 1300 436 tty4 S Mar11 0:00 /sbin/mingetty tt
root 857 0.0 0.6 1300 436 tty5 S Mar11 0:00 /sbin/mingetty tt
root 858 0.0 0.6 1300 436 tty6 S Mar11 0:00 /sbin/mingetty tt
apache 944 0.0 3.8 7448 2404 ? S Mar11 0:00 /usr/sbin/httpd -
apache 945 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 946 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 947 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 948 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 952 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 953 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
apache 954 0.0 8.2 7448 5188 ? S Mar11 0:00 /usr/sbin/httpd -
root 5353 0.0 1.7 2260 1116 tty1 S 02:27 0:00 login -- root
root 5354 0.0 2.2 2384 1388 tty1 S 02:27 0:00 -bash
root 5445 0.0 0.6 1324 396 tty1 S 02:38 0:00 ps -aux

 前述のユーザー名“intruder”によって起動されたnetcatプロセスは表示されていない。また、in.telnetdが起動されていることも表示されない。さらに、このf_ps.cに少しだけ手を入れれば、netstatを置き換えるためのバイナリも作成することができるので、ネットワーク接続の状態を隠ぺいすることもできる。同様に、lsバイナリを置き換えてしまえば、ファイルの隠ぺいも可能となる。

 さらに、ファイルやプロセスなどを隠ぺいするだけにとどまらず、ほかのアクティビティを発生させるようなケースも想定される。このアクティビティにはバックドアの設置などが含まれてくる。すなわち、バックドアがトロイの木馬に含まれる場合があるということである。

 このようなバイナリを置き換えてしまう方法を使えば、ほかにも/bin/shなどのシェルを置き換えて、ユーザーの入力をすべて取得することができるだろう。ちなみに、このようにユーザーのキー入力を取得するプログラムは通称「キーロガー」と呼ばれる。

 攻撃者の時間と手間を省くためのツール「rootkit」

 バイナリの置き換えを行うことができると、さまざまな情報を隠ぺいすることができることはお分かりになられたことと思う。このような隠ぺい手段を用いることができれば、システムに侵入していることを管理者によって検出されることを免れる可能性を生み出せるので、攻撃者はそのシステムに居座り続けることができる公算が高くなる。ただ、このようなバイナリを1つ1つ上書きしていく作業は、非常に単調である。そのうえ、侵入に成功したシステムを踏み台にし、さらにほかのシステムを攻略するためには、ツールをダウンロードするなどの必要がある。この単調作業をパッケージ化することで解決するのがrootkitと呼ばれるツールである。

 rootkitをインストールすることで、攻撃者は時間と手間を省けるのだ。再侵入に使用するためのバックドアも手間が省けるという理由でrootkitに含まれることが多々ある。

 ちなみに、歴史的な経緯からいえば、さまざまなトロイの木馬が1つにまとめられ、SunOS 4用に“Root Kits”という形で作成された。このような歴史的背景から、rootkitは典型的なトロイの木馬の例として挙げられることがある。ただ、近来作成されているrootkitはさまざまなツールの集合体となっている。

 今回はバックドア、トロイの木馬、そしてrootkitに触れ、それぞれの概念の説明を行った。ここでもう一度、思い出してみよう。

バックドア 正規の手順とは異なる方法でシステムへアクセスするための方法・手順
トロイの木馬 正当なプログラムであるかのように偽装しているが、実際にはセキュリティの破たんをもたらす悪意あるプログラム
rootkit 不正アクセスの痕跡を消し去り、それを隠ぺいし、さらなる標的を攻撃することを可能とするツール群

 次回からは、rootkitについて詳述していく。


【参考資料】
the Jargon File, version 4.3.1(GNUのmiscfilesパッケージの一部)
http://www.gnu.org/directory/miscfiles.html


NSA Glossary of Terms Used in Security and Intrusion Detection
http://www.sans.org/resources/glossary.php

“Root Kits” and hiding files/directories/processes after a break-in
http://staff.washington.edu/dittrich/misc/faqs/rootkits.faq


  第2回

index
第1回 攻撃手法の代表格「バックドア」と「トロイの木馬」と「rootkit」を知る
攻撃者にとって格好の利用手段である「バックドア」
セキュリティの破綻をもたらす悪意あるプログラム「トロイの木馬」
  攻撃者の時間と手間を省くためのツール「rootkit」

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

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


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間