〜rootkitを検出するために〜
連載:インシデントレスポンスはじめの一歩
第2回 侵入者が仕掛けるrootkitの特徴を知る
新町久幸
ラック
2003/4/19
今回のindex
|
※ご注意 他社および他組織のWebサイトなどへのポートスキャンおよびデータの取得などの行為で得た情報を侵入などに悪用するか、または同じ目的を持つ第三者に提供した時点で違法となります。ご注意ください。 本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。また、本稿を利用した行為による問題に関しましては、筆者、筆者の所属先企業、および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。 |
rootkitが持つ機能 |
rootkitの解説を始める前に、システムに不正に侵入した者がどのような目的でrootkitを仕掛けるのかをまず考えていただきたい。
攻撃者がシステムに侵入する目的は何であろうか? システム上に格納された情報の入手や破壊、Webページの改ざん、リソースの不正利用、ほかのシステムに侵入するための足掛かり、あるいは侵入自体が目的の場合もあるだろう。ここに挙げた以外にもさまざまな目的が考えられる。
では、侵入者がそれぞれの目的を実現するためにはどのようなツールがあればコトを円滑に進めることができるのであろうか? その観点からアプローチすることで、rootkitの特徴が理解しやすくなるだろう。
システムへの侵入に成功した攻撃者は、その後自己の目的を達成するために活動を開始する。通常、それらのアクティビティの発生に伴いシステム上にその痕跡が残ってしまうものである。その痕跡を残したままにしておいては、システムに何らかの異常が発生していることを管理者に察知される可能性が高くなってしまう。システムへの侵入に成功したとしても、その事実がすぐに発見されてしまっては目的を満足に果たすことができない。端末からwhoと入力しただけで、侵入者がシステムへのログインに使用しているユーザー名が表示されてしまっては元も子もないのである。
なお、ここでの痕跡とはsyslogに代表されるようなロギング機能を有するプログラムが出力するログ、実行するプログラムが出力するログ、コマンド履歴、そしてシステムの状態を調べるためにコマンドを実行した場合に出力される情報といった、不正侵入の事実を示す情報全般を指している。
以下は攻撃者(ユーザー名:intruder)がシステムにログインしている状態で、管理者がwhoコマンドおよびlastコマンドを実行した場合に表示される情報である。
# who
|
このように、“root”ユーザーのほかに“intruder”という名前のユーザーがシステムにログインしていることは一目瞭然である。
従って、多くの場合において侵入者は自己の存在を管理者の目から隠したいと考えている。侵入者はできる限り管理者に発見されるのを遅延させ、その間に行動を起こすのである。rootkitに隠ぺいを目的としたツールが含まれることが多いのも、こうした背景によるものである。
そのほかにも、rootkitにはシステムに再び侵入するためのバックドアの作成、あるいは攻撃を行うためのツール、情報収集やほかのシステムに侵入する目的でスニファやキーロガーが含まれることもある。実際に世の中には多種のrootkitが出回っており、それぞれが独自の機能を備えている。侵入者にとって便利なツールの集まり、それがrootkitである。それ故、rootkitの機能を一概に定義することは難しいが、その機能に着目すると以下の3つに分類することができるだろう。
- アクセス手段の確立
- システムへの攻撃
- 証拠の隠ぺい
アクセス手段の確立〜バックドアの作成〜 |
システムへの侵入を果たした攻撃者は、そこに再び戻るための秘密の手段を用意する場合がある。それが第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”と“intruder”ユーザーがシステムにログインしていることを確認することができる。続いて、ユーザー名“intruder”を指定してプログラムを実行する。
# ./zap intruder |
再度ログイン情報を確認する。
$ who |
プログラムの実行後にログイン情報から指定したユーザー(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アプリケーションに潜むセキュリティホール | |
特集:クロスサイトスクリプティング対策の基本 | |
連載:不正侵入の手口と対策 |
「連載 インシデントレスポンスはじめの一歩」 |
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。
|
|