ファイアウォールとはセキュリティの追加手段であり、新たなマルウェアが次々と出現する現在、その必要性も増しています。ファイアウォールを使用することにより、受信だけでなく送信における有害なネットワークトラフィックも遮断されます。漏えいテスト、いわゆるリークテストは、送信トラフィックの管理におけるファイアウォールの有効性およびコンピュータからの情報漏えいに対する保護の有効性を検査するものです。本レポートでは、リークテストについて説明します。
ファイアウォールとは何か
現在のセキュリティシステムの課題のひとつは、ユーザによるネットワークトラフィックの管理、つまりコンピュータ上のネットワークアプリケーションにより送受信されるデータのフィルタリングを可能にすることです。そしてこのようなフィルタリングを可能にするコンポーネントが、ファイアウォールと呼ばれるものです。ファイアウォールにはプログラムと機器がありますが(http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%83%BC%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB)、ここでご紹介するのはプログラムとしてのファイアウォールです。
ファイアウォールには市販のソフトウェアとして流通しているものもあれば、無料のソフトウェアもあります。ゲートウェイ(異種ネットワーク間のトラフィックを中継するサーバ)に設定されているファイアウォールは、サーバファイアウォールあるいはネットワークファイアウォールと呼ばれています。また、ユーザのコンピュータ上で設定されているファイアウォールはパーソナルファイアウォールと呼ばれ、ユーザ個人のコンピュータのみを保護するものです。最近では、パーソナルファイアウォールは、個人のコンピュータのセキュリティシステムにプリインストールされていることが多く、たとえば、Kaspersky Internet Security 7.0のアプリケーションにも組み込まれています。

図1 KIS 7.0の「ファイアウォール」コンポーネント
ファイアウォールは、主な機能であるデータのフィルタリングを実行するために、ルールを作成します。ルールとは、さまざまなアプリケーションに対するデータ送受信が許可されているものか、禁止されているものかを特定するものです。ルールには、データ交換時に使用される送信データのアドレス、送信プロトコル(IP・TCP・UDP・ICMPなど)、IPアドレス、ローカルおよびリモートコンピュータのポートなど、さまざまなパラメータが含まれます。
なかでもシステム上のすべてのアプリケーションを対象にしたフィルタリングのルールは、パケットルールと呼ばれています。

図2 KIS 7.0のMicrosoft Outlook向けルールの例
最近のファイアウォールは、デフォルトとオンデマンドの2つのモードを設定することが可能です。オンデマンドでは次の機能を実行することができます:
- ルールで禁止されていないあらゆるネットワークの許可
- ルールで許可されていないあらゆるネットワークの禁止
- あらゆるネットワークの遮断
ファイアウォールの基本的なモードはオンデマンドによるもので、学習モードと呼ばれます。このモードでは、あらかじめ設定されたルールのどれにも当てはまらないデータ送受信が行われた場合にダイアログボックスが表示され、ユーザは、一時的に許可するか、禁止するか、または同様のデータ送受信に対してルールを作成するかを決定することができます。

図3 KIS 7.0のファイアウォール学習モードダイアログボックスの例
一般的なユーザのコンピュータ上には、各種データ送受信を行うアプリケーションが数十種類あるので、各アプリケーションのデータ送受信のルールリストを作成することは非常に骨の折れる仕事です。そのため、ファイアウォールのメーカはいずれもInternet Explorer、Microsoft Outlook、Generic Host Process for Win32 Services (svchost.exe)、Microsoft Application Error Reporting (dwwin.exe)といった一般的なネットワークアプリケーションのための基本ルールをプリインストールしています。

図4 KIS 7.0のファイアウォールアプリケーションのプリインストールルールリスト
次の図は、ファイアウォールが送信データの監視とコンピュータからの情報漏えいをどのように防ぐのかを示しています:

図5 ファイアウォールの機能
ファイアウォール(「防火壁」の意味)は、ユーザのコンピュータのアプリケーションとローカルネットワーク上やインターネット上の他のコンピュータのアプリケーションとの間に「壁」を設置します。信頼するアプリケーション(図5の緑色でマークされている部分)は許可ルール(壁の「穴」)に含まれており、ファイアウォールを通過して外部のネットワークにデータを送信することができます。その他のアプリケーションは遮断され(「壁にぶつかり」)外部にデータを送信することができません(同じく外部からデータを受け取ることもできません)。この場合にユーザは必要に応じて新たな許可ルールを作成する(「壁」に追加で「穴」を空ける)ことで、アプリケーションは外部へのデータ送受信が可能になります。
注目に値するのは、いくつかのファイアウォール構成には攻撃(ネットワーク攻撃)からの保護コンポーネントも含まれている点です。そのコンポーネントはネットワークパケットが含まれている受信および送信ネットワークを、既知のネットワーク攻撃シグネチャのデータベースと合致しているかどうか分析します。本コンポーネントの詳細については、今後の記事で考察します。
セキュリティにおけるファイアウォールの役割
ファイアウォールは、統合型セキュリティシステムのアンチウイルスコンポーネントにより検知されない悪意あるプログラムの侵入を防ぐ、追加のセキュリティ「層」を構成しています。悪意あるプログラムが検知されないのは、該当するプログラムがアンチウイルス定義データベースにまだ追加されていなかったために従来型のシグネチャベースの方法で検知できなかった場合、また、悪意あるプログラムのふるまいが危険な兆候を示さなかったためにヒューリスティック分析コンポーネントが検知できなかった場合です。
では、ファイアウォールはどのタイプの悪意あるプログラムを遮断できるのでしょうか?答えは、現在広まっているすべての悪意あるプログラムです。こういうと大胆すぎると思われるかもしれませんが、実際のところそうなのです。つまり、ほとんどの悪意あるプログラムの機能がネットワークと関連しているため、ファイアウォールによって遮断可能です。
たとえば、ネットワークワームはローカルおよび/もしくはグローバルネットワークを媒体として繁殖します。
現在、悪意あるプログラム全体の91.4%を占めるトロイの木馬も、ネットワーク上でのデータ送受信を行っています。トロイの木馬に分類されるのは次のプログラムです:
- バックドア - ネットワーク上でのコンピュータのリモート操作ユーティリティプログラム。バックドアによる操作はリモートで行われるため、このタイプの悪意あるプログラムの機能はファイアウォールで完全にブロックされます
- Trojan-PSW - 感染したコンピュータからさまざまな情報を「盗み出す」プログラム。盗まれた機密情報は、何らかの方法で犯罪者に送信されます。この段階でファイアウォールはデータの外部への送信を察知し、ユーザのデータを保護します
- Trojan-Downloader - 感染したコンピュータに、新たなバージョンの悪意あるプログラムをダウンロードしてインストールするプログラムであり、「トロイの木馬」やアドウェアをインストールします。このタイプのマルウェアは情報をネットワーク上でやりとりするので、ファイアウォールで容易に防御できます
- Trojan-Proxy - 匿名でさまざまなインターネットリソースにアクセスするプログラムで、通常スパム(迷惑メール)送信のために使用されます。前述タイプのトロイの木馬と同様に、Trojan-Proxyタイプのプログラムはネットワークを媒体として機能するので、簡単に遮断できます
- Trojan-Spy - 感染したコンピュータのユーザに対してスパイ活動を行うプログラムで、キーボードを使って入力されたデータ、スクリーンショット、動作中のアプリケーションやこうしたアプリケーションに関連するユーザ操作をハードディスク内でファイルに保存し、犯罪者へ定期的に送信します。ファイアウォールはこの段階で未知のプログラムからのデータ送信を遮断することにより、ユーザのデータが外部に流出して犯罪者の手に渡ることを防ぎます
一方、ファイアウォールは古典的なコンピュータウイルスへの対策としては使用できません。ウイルスは、ワームと違ってコンピュータに侵入するのにネットワークを介さず、またトロイの木馬のようにデータを送ったりコマンドを受け取ったりする必要がないためです。
ファイアウォールは鉄壁のセキュリティ手段といえます。というのも、アンチウイルスや動作ブロッカーを回避することが目的であれば、悪意あるプログラムの作者は、これらのセキュリティコンポーネントが悪意あるコードの検出ができなくなるまで修正を加えることができます。ところが、同じような方法でファイアウォールを回避することははるかに困難です。プログラムが作動するためになんらかのネットワークアクティビティが必要な場合、ファイアウォールの目から隠すことは極めて難しいためです。ファイアウォールを回避する唯一の方法が「リ―ク」の利用です。
リークとは、またリークテストとは
リーク(漏れ)は、ファイアウォールのネットワークアクティビティ制御メカニズムを回避するための技術です。ファイアウォールのルールリストで許可されていないアプリケーションに対して、外部へのデータ送信を可能にします。ファイアウォールはこの送信を遮断せず、学習モードでもデータの送受信についてユーザに通知を行いません。
ファイアウォールが正しく設計されていれば、リークが発生することはありません。データ送受信の試みがすべて検知されるはずです。したがって、ファイアウォールの性能分析では2つの基準が使用されます。受信データのフィルタリング(外部からの侵入に対する保護)と、送信データのフィルタリング(情報漏えいに対する保護)です。
コンピュータへの外部からの侵入に対するファイアウォールのフィルタリング機能をテストする際には、オープンポートスキャナが使用されます(ShieldsUP! http://www.grc.com/default.htm、Quick test http://www.pcflank.com/test.htmなど)。
一方、ファイアウォールのリークに対する保護機能を分析するために使用されるのがリークテストであり、テストでは1つ以上のリークを引き起こす小さい悪意のないプログラムが使用されます。このようなプログラムは通常、セキュリティ分野のスペシャリストにより作成されています。
リークを発生させる唯一の方法は、既知のアプリケーションに存在する「穴」(許可ルール)を使用することです。しかしそのためには、データ送受信が信頼するアプリケーションから開始されたことをファイアウォールに「納得させる」必要があります。実際にどのような方法があるかを紹介する前に、最新OSにおけるアプリケーションの基本的な実行ルールを説明します。

図6 リークのモデル
最新OSにおけるアプリケーションの実行
パーソナルコンピュータのCPUは、コンピュータのメモリに保管されている命令セットを実行します。命令セットは、メモリ内で実行中の各種プロセスに属する実行スレッドにグループ分けされます。
実行ファイルにはプロセッサの命令が含まれており、ファイルが起動するとシステムに新たなプロセスが発生します。さらに、プロセスは他のプロセスによって生成される場合もあります。OSは、メモリのプロセスツリーを支えています。
特筆すべき点として、システム内の多くのプロセスのアドレス空間には、アプリケーションの実行ファイルコードだけでなく、多くのダイナミックリンクライブラリ(dll)コードが存在している点が挙げられます。このようなライブラリには、複数のアプリケーションに共通の機能が格納されています。このため、開発の際に実行ファイルごとに同じプログラムコードを繰り返す必要がありません。同じダイナミックリンクライブラリを、さまざまなプロセスのアドレス空間にロード可能です。

図7 アプリケーションの実行
リーク技術の分類
リーク実行の基本概念
ファイアウォールを「欺く」ために悪意あるプログラムが用いる技術を見てみましょう。まずは、図8に示すとおりメモリに既知のアプリケーションによるプロセスと未知のアプリケーション(マルウェア)によるプロセスがある状況を想定します。

図8 リークの設定
未知のアプリケーションがアプリケーション自身の名前でデータ送受信を実行した場合、ファイアウォールにより遮断されるか、ファイアウォールの対応を確認する画面が現れます。
ファイアウォールによる保護の回避には、主に3つの方法があります:
- 信頼するアプリケーションによってデータ送信が行われたかのように見せかけ、ファイアウォールを欺く。ハードディスク上の信頼するアプリケーションの実行ファイルまたはメモリ内の信頼するプロセスのデータを、未知のプロセスのデータに置き換え(または見せかけ)ます
- ダイナミックリンクライブラリまたは未知のアプリケーションのコードの一部を信頼するプロセスのアドレス空間に組み込むことで、信頼するアプリケーションの名前でコードを実行する。この場合、ファイアウォールは、挿入された要素によるデータ送受信と信頼するアプリケーションによるデータ送受信を見分けることができません
- 信頼するアプリケーションの文書化されたインターフェイスを使用する。このようなインターフェイスを使用すると、データ送受信は信頼するアプリケーションにより開始されます。しかし、データ送受信をコントロールするのは信頼するアプリケーションではなく、ファイアウォールの警告なしにこれらのインターフェイスを通してデータを外部に送信することができます
上記3つの方法を実装するリーク技術は、6つあります:
| № |
アイデア1 (欺き) |
アイデア 2 (信頼するアプリケーションの名前によるコードの実行) |
アイデア 3 (文書化されたインターフェイスの使用) |
| 1 |
置き換え |
|
|
| 2 |
|
起動 |
|
| 3 |
|
DLLインジェクション |
|
| 4 |
|
コードインジェクション |
|
| 5 |
|
|
ブラウザサービス |
| 6 |
|
|
システムサービス |
これらの技術と実装方法について詳しく見てみましょう。
リーク技術
1. 置き換え
ハードディスク上にある信頼するアプリケーションの実行ファイルを置き換えること、またはメモリ内で未知のプロセスのデータを信頼するプロセスのデータに置き換えること。この置き換えによる方法の主旨は、信頼するアプリケーションによってデータ送受信が開始されたとファイアウォールに「納得させる」ことです。
置き換えには3つの方法があります:
- ハードディスク上にある信頼するアプリケーションの実行ファイルを置き換える(リークテストRunnerで実施、「リークテスト」の項を参照)
- 未知のアプリケーションのファイル名を信頼するプロセスのファイル名に変更する(Leakテスト)
- メモリにロードされたプロセスイメージ内で、信頼するプロセスのデータを未知のプロセスのデータに置き換える(Coat)
次の図は、置き換えのひとつめの方法を示しています:

図9 ディスク上の信頼するプロセスのファイルを置き換える方法
2. 起動
コマンドラインパラメータを利用して信頼するアプリケーションを起動します。この方法は、開こうとするWebページのアドレスをほとんどのブラウザがコマンドラインパラメータの形で読みとって受け付けることをベースとしています。Webページにサーバ側スクリプト(cgiなど)が含まれる場合、アドレス行にはスクリプトによってインプットとして使用されるパラメータも含まれます。このパラメータには何かしらの機密情報、たとえばスパイプログラムにより盗まれた情報などが含まれることがあります。重要なことに、すべてのネットワークアクティビティはブラウザによって通常どおり実行されるため、ファイアウォールルールに従って許可されます。
ブラウザウインドウが開いたことにユーザが気づかないように、ブラウザは通常「隠しモード」で起動されます(Ghost, TooLeaky, Wallbreaker [1])。
さらに、悪質なコードはブラウザを直接起動するのではなく、次のように他のアプリケーションを利用して起動することもできます:
- Windows Explorer.exeのシェルプロセスを利用してブラウザを起動する(Wallbreaker [2])
- コマンドインタプリタcmd.exeを利用して起動するWindows Explorer.exeシェルプロセスを通じてブラウザを起動する(Wallbreaker [3])
- Windowsのタスクスケジューリングメカニズムを利用してブラウザのを起動する(Wallbreaker[4])。この場合、プロセスは次の順に起動します:AT.exe -> Svchost.exe-> Cmd.exe->Explorer.exe-> IExplore.exe
次の図は、上記の方法を示しています:

図10 コマンドラインパラメータを使った信頼するアプリケーションの起動
3. DLLインジェクション
信頼するプロセスのアドレス空間へのダイナミックライブラリを挿入します。この方法では、悪意あるプログラムに含まれるダイナミックライブラリが、信頼するプロセスのアドレス空間にダウンロードされます。これにはいくつかの方法がありますが、主なものは次のとおりです:
- ダイナミックライブラリに含まれるフックコードであるグローバルフックをインストールする(CPILSuite [2,3], FireHole, pcAudit, pcAudit2)
- システムレジストリ値を変更して、新たなプロセスごとに自動的にロードされる一連のDLLを追加する−AppInit_DLLs キー(Jumper)
これら2つの方法は文書化され、正当な用途を持つものです。
次の図は、上記の方法を示しています:

図11 信頼するプロセスへのダイナミックライブラリの挿入
4. コードインジェクション
ダイナミックライブラリを使用せずに信頼するプロセッサのアドレス空間へコードを挿入します。この方法では、信頼するプロセスのアドレス空間に実行コードを挿入します。挿入されたコードはデータ送受信を開始しますが、ファイアウォールはこのネットワークアクティビティを信頼するアプリケーションによるものと見なします。前述の方法との違いは、他のプロセスへのコード挿入には文書化された方法が存在しているものの、この操作の正当性は疑わしいという点です。このようなコードインジェクションは正当なプログラムでも使用されることがありますが(デバッガなど)、悪意あるプログラムで使用されることがほとんどです。
他のプロセスへのコード挿入には数多くの方法があります。使用事例は次のとおりです:
- 信頼するプロセスをメモリへロードし、そのプロセスのメモリに付け足す(AWFT [1], CPIL, DNStest)。この作業に先立ち、ファイアウォールがこの動作を検知しないようにフックが無効化されることがあります(CPILSuite[1])an attempt to avoid detection of this operation by the firewall by disabling firewall hooks (CPILSuite[1]);
- メモリ内で信頼するプロセスを特定し、そこにコードを挿入する(Thermite)
- 信頼するプロセスをメモリへロードし、メモリ中にリモートスレッドを作成する(AWFT [2,3])
- 信頼するプロセスをメモリへロードし、リモートスレッドを作成し、このスレッドから1つ以上の信頼するプロセスをロードして実行前にメモリへ付け足す(AWFT [4,5,6])
- SetThreadContext関数を使用して、信頼するプロセス内のスレッドを制御する(CopyCat)
最も攻撃の対象となりやすいプロセスは、インターネットブラウザのプロセス(Internet Explorerなど - AWFT [1,2,4], CopyCat, Thermite)、OSシェル(explorer.exe -AWFT [3,4], CPIL, CPILSuite [1])、ダイナミックライブラリからロードされWindowsを動かすためのメインプロセスであるsvchost.exeです(DNStest)。
次の図は、上記の方法を示しています:

図12 信頼するプロセスへの悪質なコードの挿入
5. ブラウザサービス
インターネットブラウザを管理するためのプログラムインターフェイスの使用。この方法では、各種コンポーネント/アプリケーションのプロセス間でのやりとりを促進するためにWindows系OSに導入されたさまざまなメカニズムを悪用します。メカニズムには、以下のものが含まれます:
- インターネットブラウザのウインドウへWindowsメッセージを送信する。これによりブラウザのアドレス行の値が変更され、[移動]ボタンを押すと挿入されたアドレスにリダイレクトされます(Breakout)
- ブラウザのDDEインターフェイス(Dynamic Data Exchangeメカニズム)を使用する。DDEライブラリはWindowsメッセージシステム機能を拡張するために開発されたもので、2つのアプリケーションが実行中にデータを動的に交換できるようにします。Internet Explorerブラウザのバージョン別DDEサポートについてはhttp://support.microsoft.com/kb/q160957を参照してください(Surfer, ZAbypass, WB [1,3,4]; CPILSuite [3])
- オートメーションサーバとしてブラウザを使用する(COMモデルに基づいたOLEオートメーションメカニズム)。OLEオートメーションとは、拡張されたDDE技術を指します。最新のブラウザはいずれも、別のプログラムがオートメーションサーバとして使用可能なCOMインターフェイスを備えています。外部アプリケーションにはMicrosoft Internet Explorerの2つのCOMコンポーネントがあります(英語資料:http://msdn2.microsoft.com/en-us/library/aa741313.aspx):
- shdocvw.dllに実装されたWebBrowserコントロール(OSfwbypass)
- mshtml.dllに実装されたMSHTMLインターフェイス(PCFlank)
次の図は、上記の方法を示しています:

図13 プログラムインターフェイスを使用したブラウザ制御
6. システムサービス
システムサービスにより提供されるプログラムインターフェイスの使用。この方法は前述の方法に似ていますが、インターネットブラウザではなくオペレーションシステムのコンポーネントにより提供されたプログラムインターフェイスを使用する点で異なります。Windows XPとWindows Vistaには、このようなインターフェイスが少なくとも3つあります:
- BITS (Background Intelligent Transfer Service) - Windows UpdateやWindows Server Update Servicesで使用されるインテリジェントファイルダウンロードサービス。通信チャネルに負荷をかけることなく、バックグラウンドモードでパッチや更新のダウンロードを行います。また、接続が切断された場合は自動的にダウンロードを再開します(BITSTester)
- Windows DNS API関数(英語資料:http://msdn2.microsoft.com/en-us/library/ms682100.aspx) - インターネットネームサーバに対してDNSクエリを再帰的に行うために使用できます。ユーザの機密情報などの追加データを、DNSパケットの一部として送信できます。このようなDNSクエリを処理するネームサーバをコントロールしている犯罪者は、この特別に作成されたパケットを処理することで、この情報を入手することができます(DNStester)
- Windowsのデスクトップ要素や壁紙を操作するインターフェイス(IActiveDesktop, 英語資料:http://msdn2.microsoft.com/en-us/library/ms647199.aspx) - Windows Active Desktopがアクティベートされている場合、HTMLページをWindowsデスクトップの壁紙に設定できます。HTMLページには外部リソースにリンクした要素が含まれる場合があり、新しい壁紙を起動する際にこれらのリソースがロードされてしまいます(Breakout2)
リークの分類の相違点
前述したリークの分類は、リーク分析に関する各種サイトに掲載されている分類とは多少異なります。
我々の理解では、リークを初めて体系的に扱ったサイトはhttp://www.firewallleaktester.comであり、http://www.firewallleaktester.com/categories.htmにはリークの分類が掲載されています。
2006年には、http://www.matousec.comが公開されました。代表的なプロジェクトのひとつが「Windows Personal Firewall Analysis」と題したレポートです(http://www.matousec.com/projects/windows-personal-firewall-analysis/introduction-firewall-leak-testing.php)。この調査で使用されたリーク分類はhttp://www.firewallleaktester.comの分類に似ていますが、いくつか相違点があります。
分類の違いを表にまとめました。この記事で使用した分類には、次の方法が含まれていません:
| № |
www.firewallleaktester.comの方法 |
www.matousec.comの方法 |
| 1 |
Hidden rules
(隠しルール) |
Default Rules
(デフォルトルール) |
| 2 |
Direct network interface use
(ネットワークインターフェイスの直接使用) |
Own Protocol Driver
(独自プロトコルドライバ) |
| 3 |
Timing attack
(タイミング攻撃) |
|
| 4 |
Recursive requests
(再帰的なリクエスト) |
| 5 |
Registry injection
(レジストリへのインジェクション) |
|
| 6 |
Windowsメッセージング + OLE |
Windowsメッセージ、LE オートメーション、DDE |
| 7 |
|
Unhooking
(フック解除) |
カスペルスキーの分類に上記の方法が含まれていない理由は次のとおりです:
- 「隠しルール」と呼ばれる方法は、ネットワークアクティビティを制御するファイアウォールメカニズムを回避する技術を実装していないため、それ自体はリークではありません(前述のリーク定義を参照)。この方法では、ファイアウォールがデフォルトで使用するパケットルール(システムのすべてのアプリケーションに適用)を調査します。ネットワークポートのひとつがすべてのアプリケーションに対して開かれていると、悪意あるアプリケーションはこのポートを使用してデータを外部に送信できます。
- 「ネットワークインターフェイスの直接利用」と呼ばれる方法は、「低」レベルでのネットワークフィルタリングメカニズムを回避するために使用されます。この方法では、システムスタック(TCP/IPなど)と並行してネットワークアダプタから送られてくるパケットを処理するネットワークドライバの代替スタックを作成します。この方法がここでの分類には含まれていないのは、最新OS(Windows XP/Vista)上で実行されたリークテストがないためです。さらに、この方法はその他のリーク方法に比べてはるかに手間がかかるため、新たなリークテストが出現する可能性(さらに言えばこの方法を使用った悪意あるプログラム)が出現する可能性はほとんどないといってよいでしょう。とはいえ、古いWindows 9x OS上で動作し、このリーク方法を使用する3つのリークテストが存在しています:
- MbTest (作者 “mbcx8nlp”, 2003), Winpcapのライブラリを使用
- Outbound (作者 - HackBusters, 2001)
- YALTA [2] (作者 - Soft4ever, 2001)
- 「タイミング攻撃」は、ここでの分類では個別のカテゴリとはなっていません。これは、この方法のベースとなる技術(独自のプロセスを再起動してPIDすなわちプロセスIDを変更する)を使っても現在のところファイアウォールを回避できないためです。
- 「再帰的なリクエスト」と呼ばれる方法は、カスペルスキーでは「システムサービス」に分類されています。
- 「レジストリへのインジェクション」は、カスペルスキーの分類では「DLLインジェクション」と呼ばれる方法のバリエーションのひとつです。この方法の本質はレジストリを変更することではなく、信頼するプロセスにダイナミックリンクライブラリを挿入することにあります。この目的を達成するひとつの方法としては、特別なレジストリキーの使用があります。
- 「Windowsメッセージング+OLE」にグループ分けされた方法は、カスペルスキーの分類では「ブラウザサービス」や「システムサービス」のカテゴリに属します。こちらの分類の方が論理的であると考えられる理由は、これが技術的な実装(メッセージの送信など)を説明したものではなく、これよりも高いレベル、つまりプログラムインターフェイスを使ったブラウザの制御やオペレーションシステムのネットワークサービスの使用というレベルでリーク技術の本質を反映しているところにあります。
- 「フック解除」。この方法は次の概念に基づいています:ファイアウォールは、一部のリーク技術からの保護を行う目的でシステム関数をフックします。これらのフックを無効にすると(フックを解除すると)、ファイアウォールはリークを防止できません。この説明からわかるように、この方法自体はリークではないので、カスペルスキーのリーク分類には含まれていません。しかし、実際のリーク技術と併用すれば、悪性コードがファイアウォール機能を積極的にブロックするような状況をシミュレートすることで、困難な状況下でファイアウォールがどのていど効果的にリークを防止できるかを調査することができます。
悪意あるプログラムでのリークの使用
数年前まではファイアウォールがパーソナルコンピュータの保護機能として使われることがほとんどなかったため、悪意あるプログラムのほんの一部がファイアウォールを回避するためにリークを使用していたに過ぎませんでした。しかし最近では、悪意あるプログラムの作者はプログラムの変種作成をスピードアップするために自動化ツールを使用しており、悪意あるプログラムの数は日に日に増加しています。こういった状況から、パーソナルコンピュータに保護機能を追加する必要性は目に見えて重要となり、ファイアウォールも一般的に使用されるようになっています。
ファイアウォールが広く使われるようになった状況を受けて、マルウェアの作者たちは、より積極的にリークを活用してファイアウォールを回避するようになりました。次の表は、主な6つのリーク方法を使用する実際の悪意あるプログラム例を示したものです。
リークはタイプごとに目的が異なり、それぞれの目的を達成するために悪意あるプログラムに採用されています。具体的には次のとおりです:
- ブラウザのコマンドラインパラメータを使って送信できるデータ範囲は限られていますが、BITS技術を使用した場合にはユーザのコンピュータから非常に大きいサイズのファイルをアップロードできます
- ダイナミックリンクライブラリの挿入や信頼するプロセスへのコード挿入の方法は、ファイアウォールを回避する以外にも利用されます。ユーザの気づかないうちに信頼するプロセスの代わりにデータを送信するだけでなく、さまざまな他の操作も実行可能です
- ブラウザ制御インターフェイス(WebBrowserコントロールなど)は、Internet Explorerに代わってデータを送信するだけでなく、ブラウザのコピー(ページのアドレスが一定の条件に適しないすべてのウインドウを閉じる)の制御、ブラウザにロードされた文書の変更、ブラウザでのメッセージウインドウ表示にも使用できます
リークテスト
現在知られている各種リークテストとその方法は、次の表のとおりです。ここに挙げられているテストのほとんどは次のサイトからダウンロードできます。
| № |
名称 |
作者 |
方法 |
年 |
| 1 |
AWFT [6] |
Jos Pascoa |
コードインジェクション |
2005 |
| 2 |
BITSTester |
Tim Fish |
システムサービス |
2006 |
| 3 |
Breakout |
Volker Birk |
ブラウザサービス |
情報なし |
| 4 |
Breakout2 |
Volker Birk |
システムサービス |
情報なし |
| 5 |
Coat |
David Matoušek |
置き換え |
2006 |
| 6 |
CopyCat |
«Bugsbunny» |
コードインジェクション |
情報なし |
| 7 |
CPIL |
Comodo |
コードインジェクション |
2006 |
| 8.1 |
CPILSuite [1] |
Comodo |
コードインジェクション + 起動 |
2006 |
| 8.2 |
CPILSuite [2] |
Comodo |
DLLインジェクション + 起動 |
2006 |
| 8.3 |
CPILSuite [3] |
Comodo |
DLLインジェクション + ブラウザサービス |
2006 |
| 9 |
DNStest |
Jarkko Turkulainen |
コードインジェクション |
2004 |
| 10 |
DNStest |
Jarkko Turkulainen |
システムサービス |
2004 |
| 11 |
FireHole |
Robin Keir |
DLLインジェクション |
2002 |
| 12 |
FPR (38) |
David Matoušek |
[フック解除] |
情報なし |
| 13 |
Ghost |
Guillaume Kaddouch |
起動 |
情報なし |
| 14 |
Jumper |
Guillaume Kaddouch |
DLLインジェクション |
2006 |
| 15 |
LeakTest |
Steve Gibson |
置き換え |
2002 |
| 16 |
OSfwbypass |
Debasis Mohanty |
ブラウザサービス |
2005 |
| 17 |
pcAudit |
Internet Security Alliance |
DLLインジェクション |
2002 |
| 18 |
pcAudit2 |
Internet Security Alliance |
DLLインジェクション |
情報なし |
| 19 |
PCFlank |
www.pcflank.com |
ブラウザサービス |
2006 |
| 20 |
Runner |
David Matoušek |
置き換え |
2006 |
| 21 |
Surfer |
Jarkko Turkulainen |
ブラウザサービス |
2004 |
| 22 |
Thermite |
Oliver Lavery |
コードインジェクション |
2003 |
| 23 |
TooLeaky |
Bob Sundling |
起動 |
2001 |
| 24 |
Wallbreaker [4] |
Guillaume Kaddouch |
起動 |
2004 |
| 25 |
YALTA |
Soft4ever |
[デフォルトルール] |
2001 |
| 26 |
ZAbypass |
Debasis Mohanty |
ブラウザサービス |
2005 |
次の表はカスペルスキーの分類によるリークテストです。
| № |
技術 |
リークテスト |
| 1 |
置き換え |
Coat, LeakTest, Runner |
| 2 |
起動 |
Ghost, TooLeaky, Wallbreaker |
| 3 |
DLLインジェクション |
CPILSuite [2, 3], FireHole, Jumper, pcAudit, pcAudit2 |
| 4 |
コードインジェクション |
AWFT, CopyCat, CPIL, CPILSuite [1], DNStest, Thermite |
| 5 |
ブラウザサービス |
Breakout, OSfwbypass, PCFlank, Surfer, ZAbypass |
| 6 |
システムサービス |
BITSTester, Breakout2, DNStester |
リークテストの結果からわかること
リークテストによるファイアウォール比較テストには、どんな利点があるのでしょうか。まず当然ながら、ユーザがコンピュータの総合セキュリティシステムを選ぶ上で、各セキュリティシステムの総合的な品質を判定することができます。
ユーザは、コンピュータのセキュリティシステムを選ぶ際に検出レベルや判定時間だけに注目しがちです(av-comparatives.org や av-test.de などのテスト結果を使用)。しかし、セキュリティシステムの品質を分析するのにそれで十分とはいえません。アンチウイルスソリューションのプロアクティブコンポーネント、感染したマシンの処理の有効性、活動中のルートキットへの対応能力、製品のセルフディフェンス機能なども重要なポイントではありますが、残念ながら比較テストの実施機関はこれらの点にあまり重きをおいていません。総合セキュリティ製品を選択する際には、アンチスパムシステムやファイアウォールのような追加コンポーネントも考慮する必要があります。
先に述べたように、ファイアウォールの性能は、受信データのコントロールと送信データのコントロールという2つの基準により判定されます。送信データのコントロールに関するテストでよい結果を出しているということは、ファイアウォールが単なるアンチウイルスの補足ではなく、アンチウイルスコンポーネントがトロイの木馬の活動をブロックできない場合でも、ユーザの機密情報が犯罪者の手にわたることを妨ぐ追加のシールドとなりうることを意味しています。
matousec.com にて実施されたテストで「Very good」や「Excellent」の格付けを獲得した製品は、ユーザに十分なレベルの保護を提供できると考えられます。ある製品が「Good」、または「Poor」や「Very Poor」などと評価された場合には、悪意あるプログラムの作者は使用する技術に関わらず、その製品のファイアウォールを回避できると考えられます。
まとめ
最近では、ファイアウォールは総合的なセキュリティシステムにおいて不可欠なコンポーネントとなっています。Windows Vistaのような最新のオペレーションシステムでさえ、すべてのタイプのリークを自力で防御することはできません(とはいえ、Windows XP SP2以降のWindowsオペレーションシステムにはファイアウォールが導入されており、その機能はWindows Vistaで大きく拡張されています)。
2007年3月にGuillaume Kaddouchが行ったテストの結果によると、デフォルト設定の64ビット版Windows Vista Ultimateによってブロックされたリークテストは9つだけでした(ブロックされたリークテストは次の表内で緑で示されています)。
| № |
名称 |
備考 |
| 1 |
置き換え |
Coat, LeakTest, Runner |
| 2 |
起動 |
Ghost, TooLeaky, Wallbreaker |
| 3 |
DLLインジェクション |
CPILSuite [2, 3], FireHole, Jumper, pcAudit, pcAudit2 |
| 4 |
コードインジェクション |
AWFT, CopyCat, CPIL, CPILSuite [1], DNStest, Thermite |
| 5 |
ブラウザサービス |
Breakout, OSfwbypass, PCFlank, Surfer, ZAbypass |
| 6 |
システムサービス |
BITSTester, Breakout2, DNStester |
UAC、IEの保護モード、Service Hardening、Kernel Patch Protection (Vista x64)など数多くの改良により、新しいオペレーションシステムは明らかにセキュリティが向上しているといえます。しかし、リークから十分に保護するためには、Windows Vistaであってもまだ外部のセキュリティプログラムを使用する必要があります。
今後、悪意あるプログラムは、現行のオペレーションシステムの保護メカニズムを回避するのと同様に、新しいオペレーションシステムに対しても新たな方法を使って回避を試みるでしょう。したがって、追加シールドとしてのファイアウォールの重要性は今後も高まり、悪意あるプログラムの作者もまたファイアウォールを回避するためのリーク技術をより積極的に活用すると予想されます。つまり、コンピュータのセキュリティの信頼性をチェックする上で、リークテストが不可欠となることでしょう。