Insider's Eye ソニーが音楽CDに組み込んだ“Rootkit”とは何者か? Mark Russinovich 著/畑中 哲 訳2005/11/09 |
|
編注:この記事は、Mark's Sysinternals Blog「Sony, Rootkits and Digital Rights Management Gone Too Far(Monday, October 31, 2005)」より、許可を得て翻訳・転載したものです。この記事に関する情報については本記事の最後に掲載しています。 |
|
先週、私はRootkitRevealer(RKR)の最新版をテストしていた。システムの1つをスキャンしてみて驚いた。Rootkitが入り込んでいる形跡があったからだ。Rootkit(ルートキット)とは、ファイル、レジストリ・キー、そのほかのシステム・オブジェクトを、診断ソフトやセキュリティ・ソフトウェアから隠ぺいする技術のことだ。これは通常、マルウェア(不正なソフトウェア)が自らの存在を隠そうとして使用する技術である(Rootkitについては、Windows IT Pro Magazine 6月号掲載の記事“Unearthing Root Kits”に詳しく書いた(訳注:該当記事は契約購読者のみ閲覧可能。Rootkitに関する日本語の記事としては関連記事も参照)。RKRの結果ウィンドウによると、隠しディレクトリが1つ、隠しデバイス・ドライバがいくつか、そして隠しアプリケーションが存在していた:
私はWebサーフィンするときには注意するようにしているし、名の知られた出自のソフトウェアしかインストールしないようにしている。だから、なぜRootkitが入り込んでしまったのかまったく分からなかった。もし表示されたファイルが不審な名前でなかったら、RKRのバグなのではないかと疑っていたかもしれない。私はすぐにProcess ExplorerとAutorunsを起動して、Rootkitを自動的に起動させているコードの証拠を突き止めようとしたが、どちらのツールでも何も見つからなかった。そこで次にLiveKdを使って、どのコンポーネントがこのような隠ぺいを行っているのか突き止めることにした。LiveKdは、私がInside Windows 2000のために作成したツールで、マイクロソフトのカーネル・デバッガを使用して、稼働中のシステムの内部を調査することができるツールである。
Rootkitがファイルやディレクトリ、レジストリ・キーといったオブジェクトを隠ぺいするには2つの方法がある。1つは、ユーザー・モードで動作し、各プロセスがオブジェクトへアクセスするWindows APIを横取りする方法であり、もう1つは、カーネル・モードで動作し、同様のカーネル・モードAPIを横取りする方法である。カーネル・モードAPIを横取りする一般的な手法は、カーネルのシステム・サービス・テーブルを書き換えることだ。このWindows向けの手法は、Regmonの最初のバージョンを作成するために、私が1996年にBryceと共同で編み出したものだ。WindowsはAPIごとに定められた内部サービス番号に基づいて、インデックス付けされたテーブルを持っている。このテーブル内には、Windowsアプリケーションから使用できるカーネル・サービスへのポインタが格納されている。ドライバが、このテーブル内のエントリを、ドライバ自身のファンクションへのポインタに書き換えれば、カーネルはアプリケーションがAPIを実行するたびにドライバのファンクションを呼び出すことになる。これによりドライバがAPIの挙動を制御できるようになるというわけだ。
システム・コールに対するこのようなフックは、サービス・テーブルをダンプ出力してみれば比較的簡単に発見することができる。テーブルのエントリはすべてWindowsカーネル内のアドレスを指し示しているのが正しい状態である。だがそうでないエントリは、ファンクションが横取りされていることを示している。私のシステム上のLiveKdでテーブルをダンプ出力したところ、いくつかの横取りされたファンクションが見つかった:
横取りしているファンクションの1つを表示させてみたところ、それはデバイス・ドライバAries.sys内のものだった。(訳注:最初のRKRの結果画面から分かるように)これは、$sys$filesystemディレクトリ内で隠ぺいされているファイルの1つだ:
これで、隠ぺいがどのドライバによって行われているのか分かったので、ひとまずこの隠ぺいをやめさせ、隠されているプロセスやファイル、ディレクトリ、レジストリ・データを見えるようにすることにした。確かにRKRによると、\Windows\System32\$sys$filesystemディレクトリはWindows APIから隠されている。しかし多くの場合、Rootkitはディレクトリを一覧や列挙からは隠すが、そのディレクトリを直接開くことまでは妨害しない。そこでコマンド・プロンプトを開き、隠されているディレクトリへ移動して、そこにあるファイルを調べることができるかやってみた。ディレクトリに移動することはできたし、隠しファイルの大部分にもアクセスすることができた:
おそらくこの時点でドライバのファイル名を変更して再起動すれば、隠ぺいをやめさせることができただろう。だが私は、Aries.sysが隠ぺい以外にも何かやっていないか気になった。そこでAries.sysファイルを隠ぺいされていないディレクトリにコピーし、IDA Proに読み込ませた。IDA Proは強力な逆アセンブラで、私はWindowsの内部を調べるのに使用している。操作対象のファンクションに対応したシステム・サービス・テーブルのエントリを計算しているコードを逆アセンブルした画面がこれである:
ドライバの初期化コードを調べたところ、このドライバはいくつかのファンクションをシステム・コールのテーブルから横取りしていることが分かった。そして名前が“$sys$”で始まるファイルやディレクトリ、レジストリ・キー、プロセスをすべて隠すのだ。確認のため、私はNotepad.exeをコピーして、$sys$notepad.exeというファイルに保存してみた。するとファイルは見えなくなってしまった。オブジェクトを見境なく隠ぺいしようとするし、Ariesのほかの部分のコードからも分かるように、このプログラマーの仕事はあまり洗練されていないようだ。システム・コール・テーブルを横取りするようなドライバをアンロードすることは危険である。ドライバがアンロードされるときに、何らかのスレッドが、フックされたファンクションの最初の命令をまさに実行しようとしているかもしれないからだ。この場合、そのスレッドは無効なメモリ領域へジャンプしてしまう。ドライバがこれを防ぐことはできない。ところが、Ariesドライバは、アンロードをサポートし、コードを実行中のスレッドがあるかどうかを追跡し続けようとしている。このプログラマーは、上述の競合状態を考慮していないわけだ。いずれにせよ彼らは、遅かれ早かれこのRootkitを作り直さなければならないだろう。システム・コール・フックは、x64 用64ビット・バージョンのWindowsでは動作しないからだ(「Patching Policy for x64-Based Systems[英語]」「x64 ベース システムのパッチ ポリシー」参照)。
ドライバのコードを調べ終えた私はシステムを再起動した。期待どおり、隠ぺいはされなくなった。先ほどまで隠されていたファイルやレジストリは、ExplorerやRegedit上で見えるようになった。問題のファイルには何のバージョン情報も含まれていないだろうと思ったが、何はともあれSigcheckでそのファイルを調べてみた。すると驚いたことに、それらのファイルの多くには、自らを名乗る製品名やファイル名、会社名の情報が含まれていた。Dbghelp.dllとUnicows.dllについては、ファイル名から、マイクロソフトWindowsのDLLだということが分かっている。ほかのファイルは、“First 4 Internet”という会社の“Essential System Tools”という製品の一部だということを示していた:
インターネット・ブラウザのアドレス バーに会社名を入れてみると、http://www.first4internet.com/が出てきた。製品名とAries.sysで検索してみたが、何も見つからなかった。だがこの会社がXCPという技術を販売している事実からみて、このファイルはコンテンツを保護する仕組みの一端なのではと思われた。Googleで会社名を検索したところ、この記事を見つけた。彼らは、Sonyをはじめレコード会社数社と取引しており、CD用のDigital Rights Management(DRM)ソフトウェアを実装していることが分かった。
DRMということから、私は最近買ったCDを思い出した。これは、CD内に含まれているメディア・プレーヤーでのみ再生することができ、最大3つまでしかコピーを作ることができないという制限を持ったCDである。CDをあさって、そのCDを探し出した。Sony BMGから出ているVan Zant brothersの「Get Right with the Man」というCDだ(何と皮肉なタイトルだろう)。Amazon.comでこのCDを購入したときには、これがDRMソフトウェアで保護されているとは気付かなかった。もし私がAmazon.comのwebページをもっとよく見ていたら、気付いていただろうに(訳注:大きく[CONTENT/COPY-PROTECTED CD]と書いてある):
調査の次の段階は、このRootkitとその隠ぺいファイルが、このCDのコピー・プロテクトと関係あることを確認することだ。そこで、CDをドライブに入れ、アイコンをダブルクリックしてプレーヤー・ソフトウェアを起動してみた。プレーヤーの画面には、コピー・プロテクトされたバックアップCDを3枚まで作成できるアイコンもある:
Process Explorerでプレーヤーを見たところ、マクロメディア製のようだった。だが再生ボタンを押すと、あの隠ぺいされていたファイルの1つ、$sys$DRMServer.exeのCPU使用率が上昇した。プロセスのプロパティのServicesタブを開くと、“Plug and Play Device Manager”というサービス名になっている。この名前は明らかに、一般ユーザーがサービスMMCスナップイン(services.msc)でこのサービスを見つけても、Windowsのコア・サービスであるかのように誤解させようとするものだ:
プレーヤーを終了させてみた。$sys$DRMServerのCPU使用率はゼロに落ちると思っていたが、依然として1〜2%を消費し続けているではないか。どうやら私は、このプロセスを動作させ続けるためだけに、CPUを浪費していたようだ。そこでFilemonとRegmonツールを起動してこのプロセスが何をやっているのか調べてみた。Filemonのトレースによると、このプロセスは、システム上で動作しているプロセスに該当する実行ファイルを2秒ごとにスキャンし、スキャンするたびに、サイズをはじめとしたファイルの基本情報を8回もクエリーする。このソフトウェアの開発者に対する私の敬意は急速に薄れていってしまった:
このプロセスとCDプレーヤーとの関係はまだ十分に確認が取れていなかった。そこでそれぞれのプロセスをもっとよく調べることにした。これらのプロセスが開く名前付きパイプのハンドルはProcess Explorerのハンドル・ビューから分かった。そこから、プレーヤーと$sys$DRMServerは名前付きパイプで通信しているのではないかと疑われた。そこでFilemonを起動し、VolumesメニューからNamed Pipesをチェックしてみたところ、その仮説は裏付けられた:
ここに至って私は、Rootkitとその一連のファイルは、SonyがCDと共に出荷しているFirst 4 InternetのDRMソフトウェアと関係があるという結論に達した。こそこそとした、そして出来のよくないソフトウェアが、自分のシステムに入っていることはうれしいことではない。そこでアンインストールの方法を探した。だがこのソフトウェアは、コントロール・パネルの[プログラムの追加と削除]の一覧には出てこなかった。CDにも、First 4 Internetのサイトにも、アンインストールのユーティリティや説明は見当たらなかった。使用許諾契約(EULA)をチェックしてみたが、アンインストールできないソフトウェアをインストールすることに同意するといったような記述は見当たらない。もはや腹が立ってきた。
私は、ドライバ・ファイルとそのレジストリ・キーを削除した。$sys$DRMServerサービスも停止し、そのファイルを削除した。そして再起動した。HKLM\System\CurrentControlSet\Servicesの下のドライバ用レジストリ・キーを削除するとき、私はあることに気付いた。ドライバはboot-startドライバとして設定されていた。すなわちHKLM\System\CurrentControlSet\Control\SafeBootサブキー内に名前のあるグループのドライバだ。これはドライバがセーフ・モードでもロードされるということだ。これらのドライバのどれか1つにでもシステムの起動を失敗させるようなバグがあると、システムの回復は極端に難しくなる。
再起動後ログインしてみると、ExplorerからCDドライブが消えていた。ドライバを削除したせいでCDが無効になってしまったのだ。もう完全に腹が立った。Windowsはデバイスの「フィルタリング」をサポートしている。これは、ドライバが、別のドライバの上層または下層に入り込み、フィルタしたいドライバへのI/O要求をのぞき見たり、書き換えたりすることを可能にする機能だ。私のこれまでのデバイス・ドライバのフィルタ・ドライバの経験からすると、フィルタ・ドライバのファイルを削除すると、Windowsは対象ドライバの起動に失敗する。私はデバイス・マネージャを開き、CD-ROMデバイスのプロパティを見てみた。隠ぺいされていたドライバの1つ、Crater.sys(またもや皮肉な名前だ。私のCDをcratered=駄目にしてしまったのだから)が、下層のフィルタとして登録されていた:
登録されているフィルタ・ドライバ名のエントリはデバイス・マネージャの[詳細]タブにある[デバイス上フィルタ]/[デバイス下フィルタ]で見ることができるが、残念なことに削除するための管理インターフェイスはない。フィルタの登録はレジストリのHKLM\System\CurrentControlSet\Enumに書かれている。Regeditでそのキー内の$sys$を検索したところ、CDの下層フィルタを構成しているエントリを見つけた:
エントリを削除しようとしたが、アクセス拒否エラーによって阻まれた。これらのキーのアクセス権設定では、Local Systemアカウントだけに変更が許可されているのだ。そこでPsExecを使って、RegeditをLocal Systemアカウントで起動した(psexec -s -i -d regedit.exe)。そのRegeditで削除を再度試みるとうまくいった。引き続き$sys$を検索すると、別のドライバCor.sys(内部名Corvus)を指定しているエントリも見つかった。これはIDEチャネル・デバイスの上層フィルタとなっていた。それも削除して再起動したところ、CDは復活した。
今回の体験は非常にいら立たしく、腹立たしいものだった。Sonyは私のシステムに、マルウェアが隠ぺいのために広く用いているテクニックを使用したソフトウェアを忍ばせただけではない。そのソフトウェアは出来が悪く、アンインストールの手段も用意されていないものだった。さらに悪いことに、RKRによるスキャンでこの隠ぺいファイルに気付いたユーザーが、それらのファイルの隠ぺいを解除する一般的な手順に従って削除しようとすると、システムをぶち壊してしまうことになるのだ。
私は、メディア業界には、コピー・プロテクションの仕組みを使って違法なコピーを防ごうとする権利はあると考えている。しかし正当な使用とコピー・プロテクションの間の適切なバランスは、まだ達成されていないようだ。これは、Sonyが行き過ぎたDRMを行っている、明らかな事例である。
編注:筆者のマーク・ルシノビッチ氏は、「インサイドMicrosoft Windows」の著者として知られ、Windowsオペレーティング・システムの機能を縦横に駆使した各種のツールの開発者としても著名です(これらのツールはSysinternalsのサイトからダウンロード可能)。 Rootkitとは、アドウェアやスパイウェア、ウイルスなどで使われている技術の1つで、自分自身の存在を隠ぺいするために、OSのルート(管理者)権限を奪ったり、カーネル内部に仕組まれたりする、さまざまな技法やツールの総称です。本記事では、SONY BMG社の音楽CDのコンテンツ保護システムに組み込まれているRootkitの技法について解説しています。このCDに含まれるRootkitはさまざまな波紋を呼び、インターネットだけでなく、新聞メディアなどでも広く報道されています。その後、このRootkitのアンインストーラも提供され始めましたが、その不備も指摘されています。その後の状況については、ルシノビッチ氏のブログ・サイトや以下の情報などもご覧ください。 ■関連情報 ・Sony’s Rootkit: First 4 Internet Responds (Sunday, November 06, 2005) (Mark's Sysinternals Blog) ・More on Sony: Dangerous Decloaking Patch, EULAs and Phoning Home (Friday, November 04, 2005) (Mark's Sysinternals Blog) ・SONY BMGのrootkit的手法、集団訴訟の可能性(2005/11/08)(ITmediaニュース) ・SONY BMGのコピー防止CD問題に新たな指摘(2005/11/07)(ITmediaニュース) ・SONY BMG、コピー防止CDのrootkit問題に対処(2005/11/03)(ITmediaニュース) ・SONY BMGのコピー防止CDがrootkitを組み込む(2005/11/02)(ITmediaニュース) ・ソニーBMGとEMI、コピー防止付きCDの米国販売開始(2005/07/30)(ITmediaニュース) ・クラッキングを手助けする“Rootkit”ツールを検出する(Windows TIPS) ・SONY製音楽CDのコピーコントロール・プログラムがrootkitを組み込む(HotFix Report BBS) |
「Insider's Eye」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|