〜rootkitを検出するために〜
連載:インシデントレスポンスはじめの一歩
第4回 侵入者が仕掛けるLKM rootkitの実情
新町久幸
ラック
2003/7/3
今回のindex
|
※ご注意 他社および他組織のWebサイトなどへのポートスキャンおよびデータの取得などの行為で得た情報を侵入などに悪用するか、または同じ目的を持つ第三者に提供した時点で違法となります。ご注意ください。 本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。また、本稿を利用した行為による問題に関しましては、筆者、筆者の所属先企業、および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。 |
代表的なLKM rootkit |
現在、LKM rootkitと呼ばれるカーネルレベルで動作するrootkitにはさまざまな種類のものが存在している。これらはインターネット上でパッケージとして公開されているものもあれば、侵入者が自己のニーズに合わせてツールを詰め込んでカスタマイズしたパッケージもいろいろと存在する。その中でも代表的なLKM rootkitとしてheroin、Synapsys、adore、Knark、KISといったものを挙げることができる。今回は仕組みが比較的理解しやすいheroinと有名なadoreを取り上げて解説する。
●heroin
heroinは1997年10月にコンピュータセキュリティの問題を取り扱うメーリングリストの1つであるBugTraqにRunar
Jensen氏によって投稿されたLinux環境で動作するLKM rootkitである。このLKM rootkitは同年4月にhalflife氏
によって発表されたPhrack 50-05を基に作成されている。この資料には、システム上の仮想端末の活動をモニタしてキーストロークを取得するLKMが紹介されていた。
しかし、heroinの登場以前に悪意あるLKMが表舞台に出ることはほとんどなかったため、人々のLKM rootkitに対する認知度は低くそれが脅威であるとは考えられていなかった。Runar Jensen氏は悪意あるLKMがすでに開発されシステムへの攻撃に利用されている可能性があることや、今後ユーザーに重大な影響を与える可能性があることを考慮し、悪意あるLKMの一例としてheroin.cという名のコードを公開したのだ。LKM rootkitの存在が公になったのはこれが最初であるといわれている。
このコードはLKM rootkitが登場した初期の段階に発表されたため、その後登場するLKM rootkitに多大な影響を与えることになった。コードは非常にシンプルながら以下の重要な機能を備えている。
- カーネルに組み込んだLKM rootkit自身の隠ぺい
- ファイルやディレクトリの隠ぺい
- プロセスの隠ぺい
heroinの特徴として、デフォルトで“heroin”という文字列を含むファイル、ディレクトリ、モジュールをユーザーの目から隠ぺいすることが挙げられる。また、指定したプロセス番号を持つプロセスをpsコマンドなどから隠ぺいする機能も持っている。これらの情報の隠ぺいには第3回で紹介したシステムコールのフックの手法が用いられている。具体的にどのようにして情報の隠ぺいを行っているかについては次章で解説を行う。では、このLKM rootkitをシステムに組み込んだ場合の挙動を見ていこう。
以下はheroinの組み込み後に、LKM rootkit自身が隠ぺいされている様子を表すものである。lsmodコマンド、および現在システムに組み込まれているモジュール情報が格納されている/proc/modulesファイルからもLKM rootkit自身が表示されていないことを確認することができる。また、隠ぺいされたモジュールはrmmodコマンドを実行してもシステムから取り外すことができない。
# ls -l |
以下はファイル、ディレクトリの隠ぺいの様子を表すものである。ファイル名またはディレクトリ名に“heroin”という文字列が含まれる場合、lsやstatなどのファイル情報を取得するためのコマンドを実行しても画面に表示されない。ただし、ファイル名を直接指定した場合にはファイルへのアクセスが行えることに注目してほしい。
# ls -l |
以下はプロセスの隠ぺいの様子を表すものである。シグナル番号31を指定してkillコマンドを実行した場合にのみこの仕掛けが作動し、指定したプロセス番号を持つプロセスがpsコマンドなどで表示されなくなる。この方法で指定したプロセスは停止したのではなく、実際には稼働している。プロセス番号を直接指定した場合にはプロセスを確認することができる。
# ps -aux | grep gpm |
※補足 前述したとおり、heroinはシステムコールのフックの手法を用いてファイルやディレクトリ、プロセスの隠ぺいを行っている。しかし、現在主流となっているLinuxカーネルバージョン2.4系を利用するLinuxディストリビューションでは、heroinを組み込んでもこれらの情報を隠ぺいすることができない。 カーネル2.4系ではheroinが情報を隠ぺいする際にフックするシステムコールが拡張され、ファイルやディレクトリ情報の取得、プロセスの取得に新しいシステムコールを使用するように変更されたからだ。 そのため、このLKM rootkitをお試しいただくには、カーネルバージョン2.2系の環境で実行するか、ソースプログラムに修正を加える必要がある。 |
●adore
adoreは1999年team tesoのStealth氏によって作成されたLKM rootkitである。adoreは侵入者にとって不利となる情報を隠すための機能をいくつも備えている。現在でも更新が行われており、公開されている最新のバージョンはadore-0.42となっている。
adore (version 0.42) は以下の機能を備えている。
- カーネルに組み込んだLKM rootkit自身の隠ぺい
- ファイルやディレクトリの隠ぺい
- プロセスの隠ぺい
- ローカルバックドア(root権限でのコマンド実行)
- ファイルのリダイレクト
- ネットワークサービスの隠ぺい
それぞれの機能の解説については「不正侵入の手口と対策 第4回 攻撃者が侵入後に行うバックドアの設置例 - Page2」をご覧いただきたい。adoreはheroinが実装する機能のほかにもいくつかの機能を持っている。このうちのネットワークサービスの隠ぺいに関して、興味深い手法が用いられているのでここで紹介したい。
adoreはnetstatコマンドの出力結果から、事前に設定しておいたサービス名、またはポート番号が含まれる行を除去することでネットワークサービスの隠ぺいを行っている。システム内部では正規の処理が行われるのだが、その結果を出力するために最終的に呼び出されるシステムコールをフックして出力情報を改ざんするのである。そのため、ユーザーからは一見してポートが空いていないように見えるのだ。
adoreがシステムに組み込まれた場合、デフォルトでサービス名が“hell”であるサービス、およびサービスポートとして2222番を使用する通信はnetstatコマンドを実行しても対象となる接続を確認することができない。
# nc -vv -l -p 2222 -e /bin/sh
|
このように、2222番ポートで待機しているはずのサービスが表示されていないことを確認することができる。ここで注目していただきたいのは、adoreがネットワークサービスの隠ぺいを行うために使用する手法である。そこでこの仕組みを実現しているコードをadoreのソースファイルから探すと、それはadoreパッケージ内に含まれるadore.cファイルのn_write( )関数内の次の一文であることが分かる。
|
current->commは現在実行中のプロセス名が格納されたカーネル変数であり、この一文は「現在実行しているプロセスの名前が“netstat”である場合〜」という意味を表している。adoreは上記条件が成立し、出力しようとしている行の中に事前に設定された文字列が含まれる場合は、何も出力しないようにするという処理を行っている。では、実行するプロセス名が“netstat”でない場合はどのような出力結果になるのであろうか。そこで、netstatコマンドのバイナリ名を別の名前に変更して出力結果の比較を行った。
# cp /bin/netstat /bin/hoge |
netstatコマンドを実行した場合の出力結果とは異なり、hogeコマンドを実行した場合には2222番ポートで待機しているサービスが表示されていることがお分かりいただけるであろうか。当然netstatもhogeもバイナリは同一のものである。この方法で情報の隠ぺいが行われている場合、プロセス名を変更するだけで正しい情報を得ることができる。
「第3回」へ | 「不要な情報を隠す仕組み」 |
index | |
第4回 侵入者が仕掛けるLKM rootkitの実情 | |
Page1 代表的なLKM rootkit |
|
Page2 不要な情報を隠す仕組み プロセスの隠ぺい 新たなる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)対策の観点から考える。
|
|