rootkitとWindowsの Installable FileSystem (IFS)

その昔アメリカでCCCD(だったか、みたいなやつだっか)に入っていてえらい大騒ぎになったのでrootkitという単語自体は知っているひとは多いと思います。が、実際このrootkitが何者なのかは知らないのではないでしょうか。私も知りませんでした。

日本語の読み物としては、やや長いものの ルートキットの正体を暴く(前編):ITpro が概略をつかむのにはよいかんじでした。レベルの低い話をもっと読みたいなら ソニーが音楽CDに組み込んだ“Rootkit”とは何者か? - @IT もおすすめです。ちなみにこの記事の原文を書いている Mark Russinovich さんはレジストリの読み書きをモニタリングする RegMon for Windows v7.04 や、ファイルの読み書きを監視する FileMon for Windows v7.04 など、Windowsでコードを書くときにはめちゃめちゃ重宝するツールを作ったひとです。昔は sysinternals.com というドメインにあったのにいつのまにかmicrosoftのサイト内に吸収されています。

Windowsのドライバのしくみと Installable FileSystem

この記事によるとrootkitという名前のブログラムがあるわけではなく、怪しげなファイルやプロセスをユーザから見えないように工作をするツールを総称してrootkitと呼ぶようです。そんなツールの中のひとつ Clandestine File System Driver(cfsd) というのに、Windowsのドライバ情報を探して Google Code Search で検索しているときにいきつきました。

はじめにWindowsのデバイスドライバしくみをいいかげんに解説します。(わかってないのでいいかげんにしか解説できません)
Windowsのデバイスドライバは複数のドライバを積み重ねられるようになっています。いちばん下の層のドライバは、ハードウェアデバイスから送られて来たデータをちょっと形を変えて、上の層のドライバに渡すと、上の層のドライバがさらにもうちょっと形を変えて上の層に渡す...というのを繰り返して最終的にはカーネルの扱えるかたちのデータに加工される、というかんじで動きます。ハードウェアデバイスとカーネルの間に入っていて、流れてくるデータを加工するドライバなので、これらのドライバを総称してフィルタドライバと呼ぶことになっています。こういう仕組みにすることで、ネットワークコントローラに書き込んでいるデータをやっぱり暗号化したい、といったときに、ネットワークコントローラのドライバの上にエンクリプト/デクリプトするドライバを入れることで簡単に対応することができます。きちんと調べていませんがWindowsのIPsecはipsec.sysというドライバがあって、ネットワークコントローラに渡すパケットを途中で暗号化する、というかたちで実装されていそうです。Webアプリケーションに比べると涙が出るくらいに開発が困難なドライバでは、今動いてるものは触らないで機能を追加できるのはとてもハッピーなことです。(本職ではないですがちょこっといじっているだけでもそう感じます)

フィルタドライバの中でも、ファイルシステムのフィルタドライバは特別扱いされています。実際、ハードディスクにデータを書く前に暗号化したかったり、最近ははやりませんが、ディスクを節約するために圧縮したり、ファイルを読み込む前にウイルスが入っていないか調べたり、複数のディスクにミラーリングしたりと、いろいろ重要があります。そういった要求にお手軽に応えるため、ファイルシステムにはフィルタドライバよりもさらにお手軽に作れるミニフィルタというものが用意されています。このミニフィルタはよく再起動を要求するwindowsの中にあって、再起動なしでファイルシステムの処理に変更を加えることができるハイテクなものです。読みにくいからか、あまりミニフィルタと書かれていることはなくたいていは Installable FileSystem (IFS) と表記されています。(IFSは(おそらく)それ以前はファイルシステムのドライバを追加したりできなかったのに対して、追加可能という意味でIFSなようです。ふつうのファイルシステムのドライバもIFSだと inside windows に書かれていました)
File System Filter Drivers に概要がわかるくらいの資料があります。

cfsdはなにをするのか

はなしをrootkitに戻します。 このIFSの中で使われている FltRegisterFilter() という名前でコードサーチしてみたときにこのcfsdのソースコードがヒットして"かの有名なrootkitとはこいつのことか"と感動しながらソースコードを読んだのでした(はじめに書きましたがrootkitは怪しいツールの総称でcfsd自体のことではありません)。ソースコードを読むとcfsdはIFSとしてファイルシステムドライバから帰ってきたデータに小細工をするようになっていました。
  • ファイルをオープンするときに、レジストリで指定されたファイルを開けなくする
  • ディレクトリ内のファイル一覧を取得するときに、レジストリで指定された特定のファイルを一覧から削除する
こうすることで、レジストリで指定されたファイルはカーネルのレベルで見えなくなり、消すこともできなくなります。IFSのレベルでは、ファイルを開くのも消すのもIRP_MJ_CREATEというリクエストがくるようになっていて、cfsdは両方にアクセス拒否を返すようにしてあるため、開けないだけでなくファイルを消せなくなります。 ちなみに動作がわかったところであってるかどうか実際に試してみようとしたら、マシンのウイルス対策ソフトに発見されてインストールできませんでした....


開発に役立つ本


IFSはドライバなので、当然プロセス一覧には出てきません。しかもミニフィルタなのでコードを書く量も、しらないといけないこともほんの少しで、おもちゃにするには最適です。残念なのは、どうも日本でWindowsのドライバを作るのははやらないらしく、検索すると英語のサイトと、ロシア語のサイトと中国語のサイトばかりがヒットします。中国語のサイトは台湾に安いサウンドカードをつくったりするメーカーがたくさんあるからかと想像できるものの、ロシアでドライバに人気があるのはなんでなのかよくわかりません。韓国と日本はドライバ真空地帯です。

ふつうのドライバに関して日本語の本はそこそこあるもののIFSをいじるのには全く必要のないことばかりが書かれていてコストパフォーマンスがよくありません。そこで出てくるのが "Windows NT ファイルシステム詳説―A Developer’s Guide" です。もうかなり古い本ながらも、ファイルシステムについてだけ1000ページくらい書いてある感動的な本なのですが遥か昔に絶版、今ではセドラーの高価本リストに載っている状況で手が出ません。英語版も絶版だったのですが最近になって、ドライバ開発に関するフォーラムが盛り上がっていて便利な OSR Open Systems Resources, Inc. から Windows NT File System Internals として販売されています。International Shipping で85USDとけっこうするのと、難しいことを英語で読むのはつらいという場合は、さがしてみると理工系の大学だと日本語版が図書館にあったりするようです。

ちなみにこの本の著者 Rajeev Nagar さんはMicrosoftで働いているようで、ミニフィイルタドライバの概要パワーポイントに名前が出ていたりします。そんな人が書いてる本なのでぜひ日本語も復刊されるとうれしいんですけどねー。検索していると 復刊.com が出てきたりするので登録してみました。

そんな状況で、日本語のいい本はないのですが、検索すると実際に動いているファイルシステムのソースコード(IFSではないですが、ファイルシステムドライバのコードもIFSのコードもほとんど同じです)がたくさん手に入ります。Windows NT ファイルシステム詳説 も、本についていたソースコードを Windows NT File System Internals の下の方からダウンロードできます。
びっくりするのは Widowsドライバ開発キット(WDK) についてくる IFS Kit のサンプルコードに、本物のCDFSのドライバ、FATのドライバが入っていることです。ビルドして差し替えてみましたが、実際ほんとに動きます。
ほかにも、分散ファイルシステムAFSの実装のひとつ The arla project. にwindowsのファイルシステムドライバが含まれていて参考になります。もうひとつのAFSの実装 openAFS にもwindowsのドライバが含まれています。
ドライバのソースコードは、めちゃくちゃコメントが多く書かれているので(その中でもIFSのサンプルは詳しく書かれています)、変に実装よりな本を買って損した気分になるよりは、概略をつかむための本を一冊買って(なにがいいかはまだわかりません...)、あとはソースを読むのがいいと思います。


tags

  • windows
  • 「rootkitとWindowsの Installable FileSystem (IFS)」のはてなブックマーク数
  • 「rootkitとWindowsの Installable FileSystem (IFS)」deliciousブックマーク数
  • 「rootkitとWindowsの Installable FileSystem (IFS)」をはてなブックマークに追加
  • save "rootkitとWindowsの Installable FileSystem (IFS)" to del.icio.us
  • 「rootkitとWindowsの Installable FileSystem (IFS)」をリアルタイムブログ検索
  • permalink
  • FUSEを使ってはてなブックマークから POOKMARK Airlines へ乗り換える方法
  • メタキャラクタの展開は誰の仕事か

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required

trackbacks

トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。

http://labs.gmo.jp/mt/mt-tb.cgi/93
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2007 .02. 07 23:46

tagcloud

  • API1
  • C/C++2
  • E4X1
  • FUSE2
  • Firefox18
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • XML1
  • XPCOM4
  • XPath3
  • apache2
  • binary2
  • book1
  • data11
  • debug4
  • design1
  • experiments3
  • extension10
  • google gears1
  • google maps API1
  • greasemonkey3
  • httpd5
  • javascript17
  • linux1
  • logging2
  • mobile3
  • perl4
  • tips4
  • tool11
  • vim2
  • visualization2
  • widget1
  • wii1
  • windows7
  • サービス6
  • 和訳1

Archives

  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines