Windows XP SP2以降のWindows OSは、インターネットゾーンからダウンロードしたファイルを保存するとき、ZoneIdというセキュリティ情報を付加する。こうしたファイルを実行しようとすると、実行してもよいかどうかをユーザーに問い合わせる。不正なプログラムを実行してしまう危険性を抑えるための仕組みだ。そのZoneIdの詳細を解説。
対象OS:Windows XP Service Pack 2
Windows XP Service Pack 2(以下XP SP2)のInternet Explorer(IE)では、セキュリティ対策の一環として、新たに「ZoneId(ゾーンID)」と呼ばれる仕組みが導入された。インターネットゾーンからダウンロードしたファイルや、Outlook Expressで保存したメールの添付ファイルに対して、ZoneIdと呼ばれる一種の「目印(マーカー)」を付けておき、エクスプローラなどでダブルクリックして実行しようとすると、本当に実行してもよいかどうかがユーザーに対して問い合わせられる機能である。そして、ユーザーが許可した場合にのみプログラムの実行が行われる。従来は、いったんローカルにダウンロードすれば何の制約もなくファイルを実行することができたが、ZoneIdにより、インターネットゾーンから取得したファイルに対しては、ある程度の制約を課すことができるようになった。
例えば、以下はマイクロソフト社のサイトからダウンロードしたgdidettool.exeという実行プログラム(「Microsoft GDI+ 検出ツール (KB873374)」からダウンロードしたツール)をローカルのNTFSディスク上に保存し、それをエクスプローラ上でダブルクリックして実行しようとしたところである。
通常の実行ファイルならばすぐに実行されるのだが、インターネットゾーンからダウンロードしたファイルであれば、このようにローカルのディスク上に保存されている場合でも、警告ダイアログが表示される。これは、IE上でダウンロードして直接実行しようとした場合の挙動と同じである。いきなり実行するのではなく、一度ユーザーに警告して判断を仰ぐことにより、いくらかでも(不正なファイルの実行による)危険性を軽減することができる。
実行ファイルだけでなく、アプリケーションによっては、このようなファイルに対していちいち警告メッセージを表示したり、実行の許可を求めたりする場合がある。例えば次の例は、Visual Studio .NET 2003でソリューションファイルを開こうとしているところである。インターネットからダウンロードしたファイルの場合は、このように確認のためのダイアログが表示される。
ZoneIdは、XP SP2のIEと、NTFSの「ストリーム」の両方の機能を使うことによって実現されている。
ストリームとは、ファイルの中に格納されているデータの列(流れ)のことである。一般にファイルといえば、単なるバイトデータの集まり(連なり)として扱われているが、NTFSを始めとして、ストリームをサポートしたファイルシステムでは、1つのファイルの中に複数のストリームを格納することができる。ストリームを利用すれば、メインとなるデータストリームのほかに、補助的な情報を格納したり、複数のバージョンのファイルデータを同時に格納したりすることができる。ストリームを指定しなければ、メインとなる(無名の)ストリームにしかアクセスできない。ストリームを理解しない従来のアプリケーションからは、メインのストリームのみが見える。
XP SP2のIEでは、ダウンロードしたファイルに対して「Zone.Identifier」という名前のストリームを付加し、インターネットゾーンからダウンロードしたことを表す属性データを記録している。実際にこの内容を確認するには、次のようにすればよい。
C:\Download>more < gdidettool.exe:Zone.Identifier ……ストリームの読み出し
[ZoneTransfer] ……これが読み出したストリームの内容
ZoneId=3 ……「3」はインターネットゾーンを表していると考えられる
ストリームデータへアクセスするには「ファイル名:ストリーム名」という書式を利用する。この例では、「gdidettool.exe」がダウンロードしたファイル名で、その後ろに付けた「:Zone.Identifier」がストリーム名の指定である(ストリーム名では大文字/小文字は関係ない)。ここではmoreコマンドでストリームの内容を確認しているが、例えば「notepad gdidettool.exe:Zone.Identifier」とすればメモ帳で内容を確認したり、書き換えたりすることができる。
この例で分かるように、Zone.Identifierストリームにはテキスト形式でゾーン情報が記録されている。ここでは「ZoneId=3」となっているので、3はインターネットゾーンを表していると考えられるが、実際には3以外の値は記録されることはないようである(ほかのゾーンからのダウンロードの場合は、このストリーム自体が存在しない)。
このようなファイルをエクスプローラでアクセスし、そのプロパティを表示させると次のようになっている。
一番下に表示されている[セキュリティ:]の部分が、インターネットゾーンからダウンロードされたファイルであることを表している。それ以外のファイルでは、このようなセキュリティ情報は表示されない。Zone.Identifierストリームが存在していて、さらにZoneId=3となっていれば、このようなセキュリティ情報が表示される。ただし実際には、3ではなく、1〜4のいずれであってもこのセキュリティ情報が表示されるが、ダブルクリックによる実行のブロック(警告ダイアログの表示)は、ZoneId=3の場合だけに限られるようである。
上のダイアログには[ブロックの解除]というボタンがあるが、これをクリックすると、ZoneId情報(正確にはZone.Identifierストリーム)が削除され、ZoneId情報を持たないほかのファイルと同様に扱われるようになる。つまりエクスプローラ上でダブルクリックしても、警告ダイアログが表示されずに従来のようにすぐに実行されるし、Visual Studio.NETでも警告なしでファイルを開くことができるようになる。安全であることが分かっているファイルの場合は、手動でZoneId情報を削除し(ブロックを解除し)、煩わしい警告ダイアログが表示されないようにするとよいだろう。
以上のように、ZoneIdの仕組みは実際にはNTFSのストリーム機能に大きく依存している。XP SP2のIEでは、インターネットゾーンからファイルをダウンロードした場合、ファイルの内容を書き込むだけでなく、ZoneIdを表すストリーム情報も同時に書き込んでいるのである。そのため、ダウンロードしたファイルから何らかの理由でZoneIdのストリーム情報が欠落してしまうと、この機能は働かなくなる。
実際にはこのような欠落は、頻繁に起こる可能性がある。例えばNTFS以外のファイルシステム(FAT16やFAT32など)へファイルをダウンロードしたり、NTFSから非NTFSファイルシステムへファイルをコピーした場合である。FATファイルシステムはストリーム機能をサポートしていないので、このようなファイルシステムへファイルをダウンロードしたり、コピーしたりするとZoneId情報を付けることはできない。そういう操作を行うと、ZoneId情報が欠落して、通常のファイルと同じように扱われる。ネットワーク上の共有フォルダを利用する場合は、それがNTFSファイルシステムならば正しくZoneId情報は保存されるが、そうでなければ(FATファイルシステムを公開していて、そこへコピーしたりすると)やはりZoneId情報は欠落する。
また、ストリームをサポートしていないプログラムを利用する場合にも、ZoneId情報の欠落が生じる可能性がある。エクスプローラやコマンドプロンプト上のcopyコマンド、標準のバックアップツールなどはストリームをサポートしているため、これらでファイルをコピーやバックアップしてもZoneId情報は正しく維持される。だがサードパーティ製のプログラムやフリーソフトウェア、従来のWindows 9xしかサポートしていないプログラムなどでファイルをコピーすると、ストリーム情報がコピーされず、ZoneId情報が欠落する可能性がある。
なおエクスプローラを使う場合でも、.ZIPファイル(圧縮ファイル)を扱う場合には注意が必要である。ダウンロードした.ZIPファイルを解凍する方法として、XP SP2では次の2通りの方法があるが、方法1ではZoneId情報が欠落するので注意が必要である。
■方法1―ダブルクリックによる解凍
エクスプローラで.ZIPファイルの内容を解凍する第1の方法は、単にエクスプローラで.ZIPファイルをダブルクリックしてその内容(ファイルやフォルダ)を一覧表示させ、ドラッグ&ドロップでほかの場所へコピーすることである。この方法は簡便ではあるが、ZoneId情報はコピーされない(欠落する)ので、注意が必要である。
■方法2―展開ウィザードによる解凍
もう1つの方法は、エクスプローラ上で.ZIPファイルを選択し、[ファイル]メニューの[すべて展開]を選ぶか、右クリックしてポップアップメニューから[すべて展開]を選択する方法である。このメニューを選ぶと、.ZIPファイルの[展開ウィザード]が起動され、展開先を指定するとファイルが展開される。この方法では、手間はかかるが、展開された各ファイルには正しく元の.ZIPファイルと同じZoneId情報が付けられる。
以上の例で分かるように、ZoneId情報の欠落は頻繁に起こる可能性がある。ZoneIdがあるからXP SP2は安全だと考えるのではなく、あくまでも、(少しばかり)安全性を高めるための1つの機能にすぎないことを認識しておく必要がある。いくら確認ダイアログが表示されても、よく考えずに[OK]をクリックしてしまっては意味がないので注意していただきたい。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.