XML Web サービスをハッカーから守るには (第 1 部)
Matt Powell Microsoft Corporation
2001 年 9 月 5 日
日本語版最終更新日 2001 年 11 月 26 日
はじめに
XML Web サービスが持つ可能性の話題になると必ず耳にする開発者の大きな懸念事項の 1 つに、悪質なユーザーがサービスを攻撃することを可能にしてしまう脆弱性の不安があります。攻撃の結果、サービスの可用性が制限されたり、プライベートなデータが損なわれる可能性があり、最悪の場合、こうした悪質なユーザーにマシンを占拠され、制御できなくなる可能性もあります。しかし、幸いなことに、このような攻撃にまつわるリスクを制限できる真の防御手段を講じることが可能です。ここでは、どのような攻撃が存在するかについて検討し、自らを守るために配置、設計、および開発の領域で行うことができる手段を説明します。第 1 部では、配置に関して考慮すべき問題について説明し、第 2 部では、XML Web サービスを配置する際に注意すべき設計および開発上の問題について説明します。
攻撃の種類
リスクについて理解し、リスクを回避するために行うことができる手段を把握する最初のステップは、サービスを狙う可能性がある攻撃の種類について理解することです。攻撃されやすい問題点を理解すれば、適切な処置を行うことで、それらのリスクを軽減できます。
攻撃は、3 つの一般的なカテゴリに分かれます。
スプーフィング
認証の必要なシステムに対して最も一般的に行われる攻撃の 1 つに、ハッカーがユーザーの認証資格情報を見つけだし、そのユーザーになりすましてログオンし、ユーザーの情報にアクセスするというものがあります。これだけでも十分被害は甚大ですが、漏洩した資格情報が、システム管理者や何らかの特権を持つユーザーのものであった場合、さらに危険な事態となりえます。このような場合、1 人のユーザーのデータだけでなく、全ユーザーのデータが漏洩する可能性もあります。
ハッカーがユーザーのパスワードを調べる手法はいくつも存在します。たとえば、ユーザーの名前、ペットの名前、誕生日など、ユーザーにとって意味を持っている可能性のある単語で試す方法です。さらに執拗なハッカーであれば、辞書にある単語すべてを試すこともあります ("辞書攻撃")。資格情報を見つける方法としては、ネットワーク パケットを傍受し、送られているデータから情報を読み取る方法、DNS スプーフィングにより、クライアントとサーバー間に悪質なマシンを介入させる方法、システム管理者を装い、トラブルシューティング用に資格情報を提供するようユーザーに要求する方法、サーバーとのログオン ハンドシェイクを記録し、シーケンスを再現して認証を試す方法などがあります。
スプーフィングの危険性のほとんどは、強力なパスワードの使用を義務付けたり、セキュリティで保護された認証メカニズムを使用するなどの手段を講じることによって軽減できます。
バグの利用
攻撃に対するシステムの脆弱性を決める主な要素の 1 つに、システムで実行されているコードの品質があります。システムにバグがあると、単に特定のスレッドで例外が発生するだけでなく、それ以上の影響が生じかねません。ハッカーはこれらの弱点をついて、システム上で独自のコードを実行したり、高いレベルの権限でリソースにアクセスしたり、単に (バグに基づく) リソース リークを利用して、システムの処理速度を低下させたり使用できない状態にする可能性があります。この種の攻撃で最も有名なものの 1 つが、Code Red Worm ウィルスです。このウィルスは、Index Server ISAPI 拡張機能のバグを利用して、感染したシステム上で自由にコードを実行し、弱点のあるほかのマシンを探します。
また、一般的な攻撃の別の例として、入力データが妥当なものであると仮定している箇所のバグを利用するというものがあります。たとえば、パラメータとしてユーザー名が入力される XML Web サービスについて考えてみます。ユーザー名に ASCII 文字列のみが含まれると仮定して、それを直接 SQL クエリに送ると、サービスは重大な弱点をさらす可能性があります。たとえば、次のようなコードで SQL クエリが記述されているとします。
sqlQuery = "SELECT * FROM Users WHERE (Username='" & UsernameInput & "')
このとき、UsernameInput パラメータに、次のような文字列が含まれているとします。
Bob') or not (Username='0
すると、サービスは特定のユーザーのレコードだけでなく、すべてのレコードを返す可能性があります。
サービス拒否
サービス拒否攻撃は、サイトへの侵入やデータの改竄が目的ではなく、サイトをダウンさせて、正当な要求に対しサービスを提供できなくすることを目的としています。Code Red Worm ウィルスは、マシンへの感染後、さらにほかのマシンを探して感染させただけでなく、感染したマシンから大量のパケットをホワイト ハウスの公式 Web サイトに送りました。何千ものマシンが感染したため、ホワイト ハウスの Web サイトには非常に多くの要求が送られました。多数のマシンから要求を送ることで、Code Red Worm ウィルスは "分散サービス拒否攻撃" と見なされるようになりました。関与するマシンがあまりにも多いため、これは制限するのが非常に難しい攻撃です。
サービス拒否の要求は、さまざまな形で送られる可能性があります。これは、システムを攻撃する偽の要求はいろいろなレベルで送ることができるためです。たとえば、サイトで IP アドレスに対する PING を許可している場合、サーバーに ICMP メッセージが送られ、その後返されます。これは、接続に関する問題のトラブルシューティングを行う効果的な手段です。ところが、数百台のマシンが何千ものパケットを同時にサーバーに送ると、おそらくマシンは PING 要求の処理でビジー状態になり、ほかの正常な要求を処理する CPU 時間を確保できなくなります。
これより少し高レベルのものでは SYN 攻撃があります。この攻撃では、TCP 接続のハンドシェイクで最初のパケット (SYN パケット) らしきものを送信するよう記述された下位レベルのネットワーク プログラムが使われます。この攻撃は、PING 要求より大きな損害を与えがちです。無視しようと思えばできる PING 要求とは異なり、TCP ポートでリッスンしているアプリケーション (Web サーバーなど) が存在する限り、有効な接続要求と思われる要求を受け取るたびに、リソースが消費される危険性があるからです。
かなり高度なものになると、サービスの拒否攻撃は、基本的には有効な SOAP 要求を XML Web サービスに対して複数送り、データベース参照を発生させるという形をとることがあります。データベース参照は長時間かかる場合があり、したがって、1 秒間に何千もこのような要求がサーバーに送られると、要求を受け取る Web サーバーとバックエンドのデータベース サーバーの両方が極度のビジー状態になる可能性があります。この場合も、サービスにおいてほかの要求をすぐに処理できなくなる可能性があります。
マシン上にバグを含むコードが存在すると、サービスの拒否攻撃をさらに簡単に行える場合があります。たとえば、稼動中の Web サービスで、特定の種類のエラーが発生した際にメッセージ ボックスが表示されるというバグがある場合、ハッカーがこの欠点を利用し、マシンに比較的少数の要求を送ってメッセージ ボックスが表示されるようにする可能性があります。これにより、要求を処理しているすべてのスレッドがロックされるので、ほかのユーザーがサービスにアクセスできなくするには効果的です。
配置に関する考慮事項
さまざまな種類の攻撃について理解したところで、次に、こうした悪質な攻撃に対しどのような手段を講じることができるかについて説明します。幸い、自らを守るために可能な手段は数多くあり、そのほとんどは非常に簡単なものです。まず、Web サーバーおよびバックエンド サーバーの構成方法を制御するだけで有効にできる保護手段の種類から説明します。
最新のセキュリティ アップデートが必ずインストールされているようにするといった明らかな方法も含め、攻撃される弱点を Web サーバーが持たないようにするため講じる必要のある重要な保護手段はいくつかあります。以下では、防御のために行うことができる最も重要な手段について説明します。これらの手段の多くは、ホストしている Web サービスに固有のものではなく、コンテンツをホストしているすべての Web サーバーに適用できます。
セキュリティ アップデートをインストールする
まず、Code Red Worm ウィルスに攻撃される危険をなくすため、最新のアップデートがインストールされていることを確認します。パッチをダウンロードするためのリンクなど、アップデートのインストール方法については、「Installing the patch that stops the Code Red worm」 (英語) を参照してください。
Code Red Worm ウィルスに対する修正およびその他の修正プログラムは、最終的に Microsoft® Windows® 2000 の次のサービス パックに含まれます。Microsoft® Windows® XP では既に対処済みです。
ユーザーにとってもっと重要な関心事は、その他の潜在的な弱点を完全に把握し、今後起こる可能性がある問題から自らを守る方法です。Microsoft 製品のセキュリティ事項については、Microsoft Security Notification List を参照してください。この一覧は購読することができ、購読者には、新たに発生した問題が電子メールで通知されます。購読のサインアップ方法については、Product Security Notification ページ (英語) を参照してください。
Web サーバーにアクセスできるユーザーを制限する
攻撃の心配がある場合、特に、プライベートな情報が XML Web サービス上にある場合、正規のユーザーだけがサイトにアクセスできるよう制限する必要があります。これを行う方法は数多くありますが、ここでは XML Web サービスへの不正なアクセスを防ぐことができる方法をいくつか紹介します。
- HTTP 認証を使用してユーザーを認証し、次に、ユーザーがアクセスできるリソースを制限します。認証を設定する方法は以下のとおりです。インターネット サービス マネージャで Web サイト、仮想ディレクトリ、または個々のファイルをマウスの右ボタンでクリックします。ポップアップ メニューの [プロパティ] をクリックします。[ディレクトリ セキュリティ] タブをクリックし、[匿名アクセスおよび認証コントロール] の [編集] をクリックします。
- Web サーバーにアクセスできる IP アドレスを制限します。サイトを使用する正規ユーザーの数が少ない場合、これらのユーザーが持つ特定の IP アドレスにのみアクセスを許可することができます。また、アクセスを特定の範囲の IP アドレスに制限したり、単一の IP アドレスまたは特定範囲の IP アドレスに対してアクセスを拒否することもできます。ドメイン名に基づいてアクセスを制限することもできますが、その場合、マシンに接続する IP アドレスに対するドメイン名を参照が必要ですが、参照に時間が掛かるかもしれません。IP アドレスの制限を変更するには、手順 1 で使用した [ディレクトリ セキュリティ] タブをクリックし、[IP アドレスとドメイン名の制限] の [編集] をクリックします。図 1 は、[IP アドレスとドメイン名の制限] ダイアログ ボックスを示しています。ここでは、アクセスは 3 つの特定の IP アドレスに制限されています。

図 1. Web サイトの IP アドレス制限の設定
- クライアント証明書を使用した SSL (Secure Sockets Layer) 接続を要求します。これは、サイトにアクセスするユーザーを認証する最も安全な方法と考えられます。SSL 制限は、[ディレクトリ セキュリティ] タブの [セキュリティで保護された通信] で設定することもできます。
必要なアクセスだけを許可するようルーターを設定する
ルーターはファイアウォールであり、マシンに送信される可能性のある不正な要求の大半をブロックできます。一般的なルーターは特定の TCP ポートへのアクセスを制限できるため、既定の HTTP ポートであるポート 80 に着信する要求だけを許可することができます。これにより、ファイアウォールの外部のユーザーが、マシン上のその他のサービスに接続しようとするのを制限できます。その他のサービス用にポートを開放する場合は注意が必要です。リモート管理を行うため、ターミナル サービス クライアントを使用して Web サーバーに接続できるようポートを開放しておくと便利ですが、ターミナル サーバー接続を利用してほかのユーザーが接続を試みることも可能になります。有効なユーザー名とパスワードを知らなくても、複数のセッションを同時に確立してログオン画面を表示させるだけで、ハッカーはマシンのリソースを大量に消費することができます。
マシンのリソースを大量に消費する不正なパケットを除去する上では、ルーターも主なツールです。明らかに異常なパケットは単に破棄されます (これはほとんどのルーターで自動的に行われます)。ただし、現在の多くのルーターには、送信元と異なる IP アドレスから送られたことを示す TCP SYN パケットなどを検出する機能もあります。このような保護機能を有効にすることで、サービスの拒否攻撃に関する説明で述べた SYN 攻撃を回避できます。
また、ファイアウォールによる制限は、ファイアウォールでのトラフィックにのみ影響を及ぼすことにも留意してください。これは言うまでもないことのように思われるかもしれません。しかし、インターネット サービス プロバイダ (ISP) と T1 回線を契約し、T1 回線の末端上にルーターを設置して、セキュリティで保護する例を考えてみてください。ISP がルーターでの無効な SYN 要求の検出を有効にしていない場合、ルーターは SYN 攻撃を受ける危険性があり、T1 回線外部に対するサービスが拒否され、サイトへのアクセスが事実上不能になる可能性が生じます。
特定の接続の両側に無数のルーターが存在するような複雑な環境では、各ルーターは攻撃に対し弱点を持つ可能性のある標的であり、正規のユーザーにサイトへのアクセスを許可する機能に影響が及ぶ場合があります。パケットがサーバーに到達するまでに経由するルーターを調べるには、TRACERT.EXE ユーティリティを使用します。
TCP/IP フィルタリングを構成して、接続を受け付けるポートを制限する
ファイアウォール用のルーターがない場合、または何らかの理由で自らルーターを管理することができない場合は、着信接続の種類を制限することで、自分のマシンを事実上のファイアウォールにすることができます。Windows 2000 の場合、[スタート] ボタンをクリックして [設定] をポイントし、[ネットワークとダイヤルアップ接続] をクリックします。インターネットに接続されるネットワーク カードを右クリックして [プロパティ] をクリックします。次に、[インターネット プロトコル (TCP/IP)] を選択して [プロパティ] をクリックし、[詳細設定] ボタンをクリックして [オプション] タブをクリックします。[TCP/IP フィルタリング] を選択して [プロパティ] をクリックすると、図 2 に示すダイアログ ボックスが表示されます。ここでは、接続を受け付けるポートを制限できます。図 2 の例では、HTTP 接続および HTTPS 接続がポート 80 とポート 443 でのみ許可されるようアクセス制限されています。

図 2. TCP/IP フィルタリングの設定
不要なサービスおよびソフトウェアを削除する
マシン上で実行しているソフトウェアが多ければ、それだけ攻撃を受ける可能性は高くなり、何らかの特権を持つユーザーとしてサービスを実行している場合はなおさらです。使用しているマシンが Web サービスのみを実行する専用マシンの場合、まず、マシン上のその他のサービスの一部を無効にします。これには、FTP サービスや SMTP サービスが含まれ、ターミナル サービス クライアントなどの Windows サービスも含まれます。
Internet Information Server を介して実行またはアクセスされるソフトウェアの数も制限する必要があります。必要最低限の仮想サイトや仮想ディレクトリだけを構成するようにしてください。まず最初に、管理者 Web サイトを削除する必要があります。また、IISSamples 仮想ディレクトリも削除する必要があります。前述したように、Web サービスの実行専用のマシンがある場合、その他の仮想ディレクトリをすべて削除します。
意図的にインストールした仮想ディレクトリの場合でも、要求がアクセスできるソフトウェアの種類について注意する必要があります。インターネット サービス マネージャで、サイトまたは仮想ディレクトリを右クリックし、[プロパティ] をクリックします。[仮想ディレクトリ] タブをクリックし、[構成] ボタンをクリックすると、[アプリケーションのマッピング] タブが表示されます。このタブには、ほかの ISAPI 拡張機能または CGI アプリケーションに関連付けられているすべての拡張機能が表示されます。これらの拡張機能を使用していない場合は一覧から削除します。IDQ ファイル用のインデックス サーバー拡張機能にはバグがあり、これが Code Red Worm ウィルスに対する脆弱性の原因でした。この変更を仮想サイト レベルで行うと、作成した仮想ディレクトリごとに変更を行う必要はなくなります。
Microsoft Internet Information Server セキュリティ チェックリストを使用する
Microsoft では、Internet Information Server 4.0 用のセキュリティ チェックリストを作成しました。このリストには、ここで述べたすべての注意事項、およびその他多くのチェック項目が記載されています。このチェックリストを使用して、セキュリティに関するあらゆるオプションを一通り検討するようにしてください。Internet Information Server 4.0 を使用していない場合でも (Windows 2000 に含まれるバージョンは 5.0)、ほとんどの手順は適用できますし、Internet Information Server の将来のバージョンにも適用できます。チェックリストは、「Microsoft Internet Information Server 4.0 セキュリティ チェックリスト」で入手できます。
まとめ
自分の Web サーバーを守るために講じることのできる手段は数多く存在します (特にマシンおよびネットワークの構成方法について)。次回のコラムでは、XML Web サービスの作成時に開発者および設計者が注意する必要がある問題を検討し、XML Web サービスを攻撃から守る方法について引き続き説明します。
At Your Service
|