〜rootkitを検出するために〜
連載:インシデントレスポンスはじめの一歩
第3回 侵入者の不利な情報を隠すLKM rootkitの仕組み
新町久幸
ラック
2003/5/29
今回のindex
|
LKM rootkitについての解説を始める前に、まず「LKMとは何か」ということについて理解しておく必要がある。LKMの仕組みを理解することで、LKM rootkitがどのようにして侵入者にとって不利な情報を隠しているのかを理解しやすくなるだろう。
※ご注意 他社および他組織のWebサイトなどへのポートスキャンおよびデータの取得などの行為で得た情報を侵入などに悪用するか、または同じ目的を持つ第三者に提供した時点で違法となります。ご注意ください。 本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。また、本稿を利用した行為による問題に関しましては、筆者、筆者の所属先企業、および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。 |
LKMとは何か |
LKMとはLoadable Kernel Moduleの略語であり、日本語にすると「取り付け可能なカーネルモジュール」と表現することができる。この段階で多くの人が“カーネルモジュールとは何か”と疑問に思うのではないだろうか。LKMの仕組みを理解するためにも、その前提としていくつか知っておかなければならないことがある。そこで、基本的な事柄から順に確認していきたいと思う。
●コンピュータシステムにおけるカーネルの役割
人間と機械とがコミュニケーションを行うためには、その間に入って双方とのやりとりを行う橋渡し役が必要である。コンピュータシステムにおいては、この役目をOS(オペレーティングシステム)というソフトウェアが担当しており、メモリの管理、キーボードやマウスからの入力、ディスプレイへの出力といったシステムが実装している基本的な機能から、グラフィカルユーザーインターフェイス、管理用ソフトウェアといったユーザーがコンピュータを使いやすくするためのさまざまな機能を提供している。OSが持つ機能の中でもシステムの中核となる基本機能に当たるものがカーネルと呼ばれている。カーネルには、プロセスの管理、メモリの管理、ファイルシステムの管理、デバイスの制御、ネットワークの管理といったシステムを構成するための根幹となる重要な機能が含まれている。
図1 システムモデル |
カーネルはハードウェア資源へのアクセスやシステムの制御を行うために、特権モードといわれる特別な権限で動作している。反対に、通常のプログラは非特権モードといわれる権限で動作しており、ハードウェアやシステムに対して直接アクセスできないような仕組みになっている。これがコンピュータシステムにおけるカーネルの役割である。続いて、カーネルモジュールの説明を行う。
●カーネルモジュールとは?
カーネルモジュールとは、前述したカーネルを構成する要素(プロセス管理、メモリ管理、ファイルシステム管理、デバイス制御、ネットワーク管理など)を、機能ごとに分割した小さなプログラムの集まり(モジュール)のことである。カーネルモジュールには、メモリの管理をするためのモジュールやファイルシステムを管理するためのモジュールといったシステムの中核となる機能を提供するものから、USBが利用できるようにするモジュール、A社のBというハードウェアを利用するためのモジュールといった特定のデバイスを対象とするものなど多様なカーネルモジュールが存在している。それらが、互いに連携し合い1つのシステムを構成しているのである。
システムに新しい機能を追加する場合や、新規のハードウェアを利用するためにはその制御を行うためのプログラムがカーネルに組み込まれている必要がある。カーネルにその処理を行うためのプログラムが存在しない場合、通常はカーネル全体を再構築しなければならない。カーネルを再構築することで、モジュール間の結び付きを見直し、連携が正確に行われるようにしているのである。
とはいえ、一部のシステムの機能の変更や、新規のデバイスを利用するたびにカーネル全体を再構築しなければならないのは効率的ではない。かといって、システムで必要となる可能性のあるモジュールをすべてカーネル内部に組み込もうとすると、カーネルが肥大化してしまう。そこで、必要なときにモジュールをカーネルに組み込み、必要でなくなったら取り外すという動的な仕組みがカーネルに採用されるようになった。この仕組みのことを LKMというのである。カーネルモジュールはカーネルに組み込まれることによって、初めてカーネルと同様の特権モードとして動作するようになり、ハードウェアへのアクセスやシステムの制御を行うことが可能となる。
図2 LKMの仕組みによりカーネルにモジュールが追加される |
Linuxシステムにおいては、変更の頻度の低いシステムの基礎となる働きをするモジュールを静的にカーネルに組み込んでおき、変更の頻度の高いハードウェアの制御を行うモジュールをLKMとして動的にカーネルに組み込んで使用する場合が多い。LKMの仕組みが最も利用されているのは、ハードウェアのデバイスドライバとしてではないだろうか。異なるハードウェア環境においてもシステムが同じように動作するのも、新規のハードウェアを利用する際にカーネルを再構築する必要がないのもこの仕組みによるものである。
LKMの説明が長くなってしまったが、ここまでで重要なポイントは次の3点である。
●カーネルはシステムの中核となる基本機能を提供する。 | |
●LKMの仕組みを利用することでモジュールを動的にカーネルに組み込むことが可能である。 | |
●カーネルに組み込んだモジュールは特権モードとして動作する。 |
システムに組み込まれているカーネルモジュールは、lsmodコマンドで確認することができる。
# /sbin/lsmod |
システムにモジュールを組み込む場合はinsmodコマンドやmodprobeコマンドを使用する。また、カーネルからモジュールを取り外す場合にはrmmodコマンドを使用する。これらのコマンドを実行するためには、root権限が必要である。カーネルモジュールに関する情報を取得する場合にはmodinfoコマンドを利用すればよい。それぞれの使用方法についてはmanコマンドなどを利用して各自で調べていただきたい。
「第2回」へ | 「LKMのrootkitへの応用」 |
index | |
第3回 侵入者の不利な情報を隠すLKM rootkitの仕組み | |
LKM(Loadable Kernel Module)とは何か? | |
LKMの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)対策の観点から考える。
|
|