〜rootkitを検出するために〜
連載:インシデントレスポンスはじめの一歩
第4回 侵入者が仕掛けるLKM rootkitの実情
新町久幸
ラック
2003/7/3
不要な情報を隠す仕組み |
では、LKM rootkitが実際にどのようにして情報を隠ぺいするのかについて解説していきたい。ここではファイル、ディレクトリ、プロセスを隠ぺいする仕組みについて解説を行うことにする。
●ファイル、ディレクトリの隠ぺい
ファイルやディレクトリを隠ぺいする仕組みを解説する前に、システム内部でファイルがどのように管理されているのかを知る必要がある。Linuxシステムではシステムコールのsys_readdir(
)関数、sys_getdents( )関数、sys_getdents64( )関数のいずれかを呼び出してディレクトリ情報を取得している。システムでは、同一ディレクトリ内に存在するファイル情報をまとめたものをそのディレクトリが持つ情報として管理している(図1)。
図1 システムが管理するディレクトリ情報 |
lsコマンドやstatコマンドなどでファイル情報を取得する場合、ファイルの情報は先頭のファイル情報が格納された箱から順次参照されていく。この際、次のファイル情報が格納されている箱の場所は、いまのファイル情報が格納された箱の場所に自分の箱の大きさを加算して割り出される(図2)。
図2 ファイル情報の参照 |
従って、図2のファイルAの箱の大きさに次に参照されるファイルBの箱の大きさを加算し、ファイルAの箱の大きさを偽ることで、システムは次のファイルを参照する際にファイルBをスキップしてファイルCにアクセスすることになる(図3)。
システムがファイル情報を取得する際に利用するこのアプローチでは、ファイルBを発見することができないことが分かる。
図3 Bをスキップしてファイルが参照される様子 |
プロセスの隠ぺい |
プロセスの隠ぺいもファイルの隠ぺいと同様の方法を用いて実現することができる。プロセスが生成される場合、/procディレクトリ以下にそのプロセス番号と同じ番号を持つディレクトリが作成される。各プロセスに関する情報はそのディレクトリ内に保存され、システムが管理を行っている。ユーザーがpsコマンドなどでプロセスの情報を取得する場合、このディレクトリを参照して情報の取得が行われる。従って、ファイルの隠ぺいと同様/procに格納されているプロセス番号を持つディレクトリを隠ぺいすることでプロセスを隠ぺいすることが可能となる。
前章で紹介したheroinもadoreもこれらの方法を用いて、ファイルやディレクトリ、プロセスの隠ぺいを行っている。また、adoreの「ネットワークサービスの隠ぺい」で紹介したように、最終的に出力される情報を改ざんすることでこれらの情報の隠ぺいはするという方法もある。
上記以外にも情報を隠ぺいするための方法をいくつか挙げることができる。以下にその例を挙げてみた。いずれの場合もシステムコールをフックするという基本的な仕組みは同じである。
- 直接該当するシステムコールをフックして処理を変更する。
- ファイルの呼び出しをリダイレクトして、別のバイナリを実行させる。
- 最終的に出力される情報のみを変更する。
新たなるrootkitの誕生も考えられる? |
これまでに、バイナリ置き換え型のrootkitやLKMの仕組みを利用したrootkitを紹介してきた。しかし、2001年に従来のrootkitとは異なる、新しいテクニックを用いたSucKITが登場した。SucKITは1998年11月にSilvio Cesare氏によって考案された[Runtime Kernel Kmem Patching]というテクニックを応用して作成されている。[Runtime Kernel Kmem Patching]はメモリ内に読み込まれたカーネルの内容を直接変更することにより、任意のコードの挿入、システムコールテーブルの変更、新規システムコールの追加などを動的に行う新しいテクニックである。SucKITはこの手法を利用して作成されており、LKMのサポートを受けることなくシステムの挙動を変更することが可能である。
このようにrootkitに用いられるテクニックは、より巧妙化することが予想され、新たなるrootkitの誕生も考えられる。
Runtime Kernel Kmem PatchingやLKMについての詳細な技術情報については以下のサイトを参照していただきたい。
Runtime Kernel Kmem Patching
http://www.big.net.au/~silvio/runtime-kernel-kmem-patching.txt
(http://packetstormsecurity.nl/9901-exploits/runtime-kernel-kmem-patching.txt)
(nearly) Complete Linux Loadable Kernel Modules
http://www.thc.org/papers/LKM_HACKING.html
◇
今回まで4回にわたり、攻撃者の侵入で仕掛けられることの多いバックドアやトロイの木馬、rootkitについて解説を行ってきた。rootkitを中心に取り扱ってきたが、その仕組みはご理解いただけたであろうか。次回から執筆をPort139の伊原氏に交代して、攻撃者にシステムに侵入されてしまった場合にどのように対処すればよいのかについて実践的なオペレーションワークを解説していただく予定である。
「第5回」へ |
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)対策の観点から考える。
|
|