攻撃者は,あちこちのパソコンに次々にボットを仕込む一方で,一度支配下においたパソコンからなるべくボットを排除されないようにさまざまな手を使う。対策をすり抜け,ボットを動かし続ける攻撃者の手口を紹介しよう。

ウイルス対策ソフトの動作を妨害

 ボットを仕込んだあとこれを発見されないようにするために,攻撃者は「ウイルス対策ソフトのプロセスの停止」,「ウイルス・パターン・ファイルの更新妨害」,「ルートキットの埋め込み」,「難読化」,「モジュール化」といった手口を使う。これらはすべてボットに組み込まれている。

 ウイルス対策ソフトのプロセスの停止は,米シマンテックのNorton AntiVirusやトレンドマイクロのウイルスバスターなどのプログラムがパソコン上で稼働しているのを見付けた場合,強制的にこれを停止するというものだ。

 ウイルス・パターン・ファイルの更新妨害は,パターン・ファイルのダウンロード先のサーバー名に全く関係のないIPアドレスに関連付けておくことで,更新を成功させないというもの。具体的にはダウンロード先のサーバー名(URL)とでたらめなIPアドレスを関連付けてHostsファイルに書き込む。Windowsは名前解決の際,DNSサーバーではなく先にHostsファイルを参照するので,正規のサーバーにつなげなくなる。

APIやOSコールを改ざんし姿を消す

 ルートキットを埋め込むのは,ユーザーやウイルス対策ソフトからボットの存在などを隠すためだ。ルートキットはOSのシステム・コールやアプリケーションのAPIの呼び出しを横取りして,偽の結果を返す機能を持つソフトウエアの総称。偽の結果をウイルス対策ソフトや管理用のアプリケーションに返すので,パソコンの中にボットのプロセスがいないかのように見える(図1)。例えば,ウイルス対策ソフトはハード・ディスクの入出力データを検査することでウイルスを見張っている。ルートキットがこの入出力情報を改ざんすれば,ウイルス対策ソフトの検知から逃れられる。

図1●ルートキットがデータを横取りする場所
図1●ルートキットがデータを横取りする場所  [画像のクリックで拡大表示]

 また,ユーザーや管理者は怪しいと感じた場合,レジストリや動作プロセス,ログなどを確認するケースがあるが,ルートキットはこれらの調査用プログラムに偽の結果を返すので,ユーザーが見付けるのは難しい。

 難読化では,ウイルスの一部を暗号化する。こうすれば,暗号ルーチンと鍵を割り出して,暗号化された部分をデコードしない限り,その動作を解析できなくなる。全く暗号化されていない場合よりも,暗号解読の時間が必要になるため,パターン・ファイルを作成するまでに時間がかかってしまうことになる。

ウイルス対策ベンダーの手間を増やす

 最後のモジュール化は,機能ごとにプログラム部品(モジュール)に分け,ボットが必要に応じてこれらをダウンロードして実行するという手口である。攻撃の第1段階で,ファイルのダウンロードを専門に実行するプログラム(ダウンローダ)をユーザーのパソコンに感染させ,その後状況に応じてモジュールをダウンロードさせて,各種攻撃を仕掛ける(図2)。

図2●モジュール化の手口
図2●モジュール化の手口  [画像のクリックで拡大表示]

 攻撃者はこのモジュール化に「大量の亜種の作成」,「ウイルス解析防止機構」という“スパイス”を加えることで,発見されることを妨害する。前者は,一つのソースコードから多数のダウンローダやモジュールを生成するというもの。生成されたバイナリ・ファイルはそれぞれ同じ機能を持つがデータの並びが異なるので,ウイルス対策ソフトは検知のために別のパターン・ファイルを必要とする。多種数のバイナリを一気にばらまけば,ウイルス対策ベンダーの網にかからず,対策ファイルが作られないものが生まれやすい。全部捕獲されたとしても,ウイルス対策ベンダーは膨大な種類の検体を解析しなければならいので,すべてのパターン・ファイルを作るまでの時間がかせげる。

 感染パソコンのモジュールを頻繁に更新するという手口も併用される。古いモジュールに対するパターン・ファイルが出来上がってきたころには,新型モジュールに代わっているわけだ。

 一方のウイルス解析防止機構は,自身の動作が検査される環境である場合に,感染動作を止めるというもの。一般にウイルス解析者がウイルスの動作を解析するとき,被害が拡大しないように,パソコン仮想化ソフトウエアの上で動かす手法が使われる。ダウンローダは,自身が動いている環境を調べ,仮想環境だと疑われる場所があると感染動作を止めてしまう。モジュールをダウンロードしないので,パターン・ファイルを作れなくなるのである。

ボット対策は徐々に進展,攻撃者は別の標的へ

 ボット対策の重要性が叫ばれ始めたのが2005年のことだ。2年たった現在も決定的な対策が見出せていない。

 しかしながら,こうした状況も徐々にではあるが改善されつつある。ボット対策が施された製品が登場し始めた上,OSにも対策機能が盛り込まれるようになってきたからだ。特にOSの対応は大きい。米マイクロソフトの新OSであるWindows Vistaは,バッファ・オーバーフロー攻撃やルートキットのインストールを防止する機能を搭載しているので,前回解説したボットの攻撃手口をほぼ封じることができる。企業ネットワークの中にVistaが浸透するにはまだ時間がかかるだろうが,今後ボット問題は解消される方向に向かうと見てよさそうだ。

 では犯罪者たちは,次にどのような手口を使って攻撃してくるのだろうか。将来を予測することは難しいが,セキュリティの専門家の多くは「Webブラウザ上で動作するJavaScriptを使った攻撃に軸足を移すのではないか」と見ており,手口の研究を進めている。

 専門家たちがJavaScriptに注目するのは,業務アプリケーションが,端末の実行ファイルで動くプログラムからHTMLとJavaScriptで作られたWebアプリケーションへと移され始めているからだ。WebブラウザにJavaScriptを送り込まれてWebアプリケーションを乗っ取られれば,重要情報を盗み出されてしまう可能性が高い。

 JavaScriptを使った攻撃は,攻撃者にとって他にも都合のいいことがある。まず,JavaScriptは複雑な文字列処理や計算ができる。そのうえ,Internet Explorerなのか,FirefoxなのかといったWebブラウザの種類やWindowsかMacOSかといったOSの種類を問わずに攻撃ができる。JavaScriptが本来持つ仕様を使って攻撃を仕掛けられるため,Webブラウザ自体にぜい弱性があるかどうかは関係がない。しかも,Webブラウザを閉じるとJavaScriptのプログラムはパソコンから消えてしまうため,攻撃の痕跡が残らない。守る側からすると厄介な手口だ。