特集
» 2003年04月18日 00時00分 公開

自動構成ファイルにおける“DIRECT”の意味を理解する:IEの自動Proxy設定とセキュリティ・ゾーン (2/2)

[デジタルアドバンテージ,著]
前のページへ 1|2       

イントラネット・ゾーンとして扱われる原因は?

 ある種の自動構成スクリプトを使うと(正確には「return "DIRECT"」を実行すると)、本来「インターネット ゾーン」となるべきサイトが「イントラネット ゾーン」となってしまうのは、IEの仕様なのだろうか、それとも何か重大なセキュリティ上の脆弱性なのだろうか、気になるところである。そこでこの件をMicrosoft Security Response Center(Microsoft社の総合的なセキュリティ担当部署)に問い合わせてみたところ、これは“仕様”であるとの回答を得た。にわかには信じ難いかもしれないが、これには理由があるし、対策もある。

 次の図を見ていただきたい。IEではアクセス先に応じて(基本的には)、「インターネット ゾーン」と「イントラネット ゾーン」の2つのゾーンに分類しているが、その判断基準は先に述べたとおりである。デフォルトでは、「. (ピリオド)」を含まない単純なホスト名やUNC、ローカル・ホストの属しているネットワーク(IPアドレスで判断する)などが「イントラネット ゾーン」に、そしてそれ以外が「インターネット ゾーン」になる。

IEにおけるゾーンの扱い
IEが接続されているネットワークが「ローカルネット エリア ネットワーク(LAN)」、組織の内部全体が「イントラネット ゾーン」、そしてそれ以外が「インターネット ゾーン」である。

 だが実際の会社組織などでは、社内に複数のIPサブネットが存在し(例:192.168.0.0/16以外に、10.0.0.0/8や172.16.0.0/20なども使われることが多い)、それらも同じイントラネットとして扱う必要があるだろう。またドメインも1つだけでなく、複数のドメインが存在していて、それらも同じイントラネットとして扱いたいケースがある。そうしないと、これらのユーザーの間でお互いに通信したり、イントラネットのアプリケーションを使ったりできなくなるからだ。

 つまり、IPアドレスやホスト名だけではイントラネットであるかどうかをうまく決めることができず、関連する社内のグループなどを正しく同じイントラネットであると認識するためには、何らかの補助的な情報が必要になるということである。ユーザーが手動でProxy設定を記述する場合は、[インターネット オプション]ダイアログの[接続]タブにある[LANの設定]−[詳細設定]で、[次で始まるアドレスにはプロキシを使用しない]に必要なドメインやIPアドレスを列挙すればよい。

[プロキシの設定]ダイアログ
これはProxyサーバなどの設定をすべて手動で行う場合のダイアログボックス。関連するドメインなどを列挙することにより、イントラネットの範囲を自由に拡大することができる。
 (1)ProxyサーバのIPアドレスとポート番号を設定する。
 (2)ここにドメイン名やIPアドレスを列挙することにより、「イントラネット ゾーン」として扱われるドメインやネットワークを拡大することができる。

自動構成スクリプトにおける“DIRECT”の意味は?

 さてそれでは、Proxyの設定を手動ではなく、自動構成スクリプトを使って行う場合は、どうやって「イントラネット ゾーン」の範囲を決めればよいのであろうか? もともとproxy.pacという自動構成スクリプトは、ゾーン定義などないNetscape Navigatorのために開発されたものであるということはすでに述べた。proxy.pacは、どのProxyサーバを利用するかを決めるためのものであって、ゾーンを判別してそれを返す機能は持っていないのである。

 このスクリプトが、例えば「return "PROXY 192.168.0.10:8080"」を返せば、それはProxyサーバのIPアドレスが192.168.0.10で、ポート番号が8080番であるということを表しているにすぎない。また「return "DIRECT"」を返せば、それはProxyサーバを使わずに直接通信することができる、という意味である。さらに「return "PROXY 192.168.0.10:8080; DIRECT"」となっていれば、まず192.168.0.10のProxyサーバをチェックして、それと通信できなければ(サーバがダウンしていた場合など)、今度は直接通信を試みよ、という意味である。複数のProxyサーバ(と最後にDIRECT)を列挙することにより、ある1台のProxyサーバがダウンしていてもほかのサーバが利用できるので、障害対策や負荷分散に役立つ。

 このように単にProxyサーバ(のリスト)を返すだけの自動構成スクリプトであるが、IEではこのスクリプトに、新たに「イントラネット ゾーン」の範囲を定義する機能も持たせることにした(残念ながらこのことをはっきりと記述したマイクロソフトの公式なドキュメントは存在しないようだ)。とはいっても、元のスクリプトの文法や関数、機能などを拡張してしまっては、proxy.pacを利用するほかのアプリケーションが動作しなくなる可能性がある。このファイルを使うのはマイクロソフトのIEだけではないからだ。

 そこでマイクロソフトのIEが取った方法とは、次のようなものである。まず次のような前提条件が満たされているものとする。

■仮定1■
企業においては、インターネットとイントラネットは、明確にファイアウォールなどで分離されている

■仮定2■
インターネットへアクセスするためには、必ずProxyサーバを経由しなければならない


 これに基づき、IEでは次のような基準でイントラネットを定義している。

Proxyサーバを介さずに直接通信できるホストは、(デフォルトでは)イントラネットと見なす……(*1

*1 これはあくまでも自動構成ファイル(proxy.pac)を使った場合の話であり、手動もしくはActive Directoryのグループ・ポリシーなどで(上の画面の)Proxyサーバを設定している場合はこれに該当しない。


 つまり、Proxyを経由するとそれはインターネットで、Proxyを通らないとイントラネットということである。これをproxy.pacの具体的な記述と重ね合わせてみると、IEがどのような基準でインターネットとイントラネットを区別しているかが分かるだろう。つまり「return "PROXY 192.168.0.10:8080"」というふうにアクセスするとそれはインターネット、「return "DIRECT"」でアクセスすればそれはイントラネットということになる。

 さてもうお分かりであろう。冒頭で「return "DIRECT"」だけを返す自動構成ファイルを使ったところ、世界中がすべてイントラネットになってしまったといったが、それはこのような理由によっているのである。もともとこのように作られているのであるから、「すべてがイントラネット ゾーンになる」のは、セキュリティ上の脆弱性ではなくて、仕様通りである(と、マイクロソフトの技術者は語っている)。

DIRECTをイントラネット・ゾーンとしないための方法

 自動構成ファイル中でreturn "DIRECT"を使用すると、それはイントラネットになってしまうというのがデフォルトのIEの設定であるが、今回のような場合にはこれを無効にできると問題が解決するだろう。つまり自動構成ファイルが返す値(PROXYかDIRECTか)は無視して、ホスト名に「.(ピリオド)」が含まれるかどうかなどだけで判断させたいということである。IEにはこのためのオプションが用意されている。ステータス・バーのゾーン名をダブルクリックするか、[ツール]メニューから[インターネット オプション]を選択し、[セキュリティ]タブを選択する。そして[イントラネット]アイコンを選択して、その下にある[サイト]ボタンをクリックする。

イントラネット・ゾーンの判断基準を変更する
デフォルトでは自動構成ファイル中にDIRECTがあるかどうかでイントラネット・ゾーンかどうかが判断される。これを無効にするには、ステータス・バーのゾーン名をダブルクリックして[インターネット セキュリティのプロパティ]を表示させるか、[ツール]メニューから[インターネット オプション]を選択し、[セキュリティ]タブを選択する。
 (1)[イントラネット]アイコンをクリックする。
 [A]これをクリックして設定する→[A]

[A]

Proxyサーバの使用/不使用に基づいてゾーンを判断する
このチェック・ボックスをオンにすると、Proxyサーバを使わない場合(つまりDIRECTの場合)サイトはすべてイントラネットと見なされる。デフォルトではオンになっている。
 (1)これをオフにすると、イントラネット・ゾーンの判定において自動構成ファイルの内容を使わなくなる。

 このチェック・ボックスは、(IEインストール直後の)デフォルトではオンになっている。そのため、自動構成ファイル中でreturn "DIRECT"を使用すると、そのサイトはイントラネット・ゾーンになってしまう。これを無視させるためには、チェック・ボックスを無効にすればよいが、この設定は各ユーザー・アカウントごとにいちいち行わなければならないことに注意していただきたい。また、IEインストール時のデフォルトをオフにすることもできないので、マシンに新しいユーザー・アカウントを作って、ログオンするたびに忘れずに設定を行う必要がある。

 なお、Active Directoryのドメイン・ユーザーならば、グループ・ポリシーでこの値を設定することもできるが、ローカルのユーザー・アカウントでログオンしたりした場合には制御できないので、注意が必要である。

この仕様は正しいか?

 そもそも、今回のような問題が発生した一番の原因は、IEが(デフォルトでは)自動構成ファイルの返す内容(PROXYかDIRECTか)に応じてインターネット・ゾーンとイントラネット・ゾーンを判定していることにある。マイクロソフトとしては、自動構成ファイルを使うような規模の企業では、ファイアウォールやProxyサーバもきちんと整備されており(勝手にNATやNAPT経由でインターネットにはアクセスできない)、このようなネットワーク環境は十分現実的であると考えているようである。だがこれは本当に正しい仕様といえるのだろうか? この機能が始めて導入された4、5年前ならばともかく、残念ながら現在では、やや問題があるといわざるをえないだろう。

 例えば、社内のサーバに対してProxyサーバ経由でアクセスすると(このような形態を許可している企業も多いだろう)、インターネット・ゾーンになってしまう。逆に、透過型のProxyサーバ(外部からはルータのように見える、その存在を意識しなくても済むようなProxyサーバ)を使ってインターネットにアクセスする場合は、明示的なProxyの指定が不要である。そこでreturn "DIRECT"を指定すると、イントラネット扱いになってしまう。

 ほかの例として、例えば「return "PROXY 192.168.0.10:8080; DIRECT"」などが挙げられるだろう。192.168.0.10のProxyサーバがきちんと稼働していれば、これはPROXYの方が使われるのでインターネット・ゾーンになるが、もしこのサーバがダウンしていると、DIRECTが使われるので今度はイントラネット・ゾーンになってしまう。つまり同じURLにアクセスしても、Proxyサーバの稼働/不稼働に応じてゾーンが変わってしまうのである。現実的にはPROXYとDIRECTを組み合わせて使うケースは多いので、Proxyサーバがダウンしないように注意する必要があるだろう。

 もう少し変わった例として、IEAKのドキュメントに掲載されている次のようなサンプル・スクリプトがある。

function FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT"))
  return "PROXY proxy:80";
else
  return "DIRECT";
}

 これは、曜日によってProxyサーバを使うか直接接続を使うかを切り替えるスクリプトの例である(トラフィックの多い日はProxyサーバを使い、少ないときは直接接続をさせるということもできる、という例)。実際にこれを使うと、曜日によってインターネット・ゾーンになったり、イントラネット・ゾーンになったりする。


 以上で述べたように、自動構成ファイルを使う場合は、DIRECTの扱いに注意しなければならない。IEのデフォルトではDIRECTはイントラネットと同じ扱いになっているので、クライアントのIEの安全性を高めたければ、NATやNAPT経由のWebアクセスは禁止するなどの措置が必要かもしれない。いずれにしろ、今後出荷されるIEもずっとこの仕様を引き継ぐであろうから(急にデフォルト設定を変更すると、たぶんネットワークがつながらなくなるユーザーが増えて、さらに面倒なことになるだろう)、管理者はそのあたりをよく理解してProxyサーバやネットワークの設計、運用を行っていただきたい。

「検証」のインデックス

検証

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。