Q

Windows XP Service Pack 2(SP2)を適用した後,PC上のプログラムを起動すると,セキュリティ警告メッセージが表示されるようになりました。すべてのプログラムではありません。どんな条件のときに,どのような仕組みでこの警告が出るのでしょうか?

A


△ 図をクリックすると拡大されます
図1●ダウンロードしたファイルで出る警告の例
Windowsでは従来も,ブラウザでWebページにある実行ファイルに対するリンクをクリックして,すぐ実行するように指定すると警告が出ていました。Windows XP SP2では,これに加えて,ダウンロードしたファイルをPC上で実行する場合にも表示されることがあります(図1)。

 しかし,XP SP2で警告が表示されるのは,起動しようとしたファイルをインターネット上のWebサイトなどから入手した場合だけです。「ファイルはインターネットからダウンロードされたものである」という情報は巧妙な仕組みで記録しています。

警告が出るには2つの条件が必要
 まず,警告を表示する条件を詳しく述べると(1)実行ファイルをWindows XP SP2以降のInternet Explorerでインターネットからダウンロードした,(2)ファイルを保存したディスクのフォーマットがNTFSである――の2つになります。つまり,「かつてインターネットからダウンロードしたものかどうか」という情報は,NTFSの機能を応用してIEが格納しています。

 ここで応用されているNTFSの機能は,「複数ストリーム」と呼ばれています。実はNTFSは複数の単位のデータを1つのファイルとして保存できます。この情報の単位がストリームです。あまり知られていませんが,複数ストリームはWindows NT 3.1のころからNTFSに備わっています。詳細は,マイクロソフトのWebページ「プログラマから見たNTFS 2000 Part1: ストリームとハードリンク」をご参照ください。

 ただし,ユーザーは通常,メイン・ストリームという部分のみをファイル・データとして利用可能で,その他のサブストリームの情報は意識できません。一般的なプログラムは,複数ストリーム・ファイルのうち,メイン・ストリームのみを扱うためです。ストリームは,NTFS固有の機能で,FATなどほかのファイル・システムとの互換性がないため,これまであまり目立って使用されることはありませんでした。

サブストリームにゾーンを記録
 しかし,XP SP2のIEは,NTFSのサブストリームを使用して,ファイルの入手経路に関する情報を記録しています。サブストリームの内容は,プログラムを作成したり,マイクロソフトのツールを実行したりすると,表示できます。

 マイクロソフトが提供するツールは,先に紹介したページの原文「A Programmer's Perspective on NTFS 2000 Part 1: Stream and Hard Link」にあります。利用手順は以下の通りです。

(1)上記Webサイトから,「NTFSext.exe」をダウンロードします。
(2)実行すると「StrmExt.zip」というファイルが展開されます。
(3)その中に「ReleaseMinDependency」というフォルダがあります。その中身全部(StrmExt.dll,RWStream.vbs,HardLinks.vbs)をローカル・ディスクにコピーして,「StrmExt.dll」をRegSvr32.exeでシステムに登録します。登録はコマンド・プロンプトで「RegSvr32 StrmExt.dll」を実行してください。


△ 図をクリックすると拡大されます
図2●NTFSのストリームをツールで表示したところ
 以降は,エクスプローラ上でファイルのプロパティを表示すると,[Streams]というタブで,ストリーム情報が参照可能になります(図2)。

 例えば,警告が表示される実行ファイルには,Zone.Identifierという名前のストリームが作成されており,その中にダウンロード元のWebサイトの情報が数字で設定されています。

 数字は,IEのインターネット・オプションなどで見えるセキュリティ・ゾーンと対応しており,「0」が「マイコンピュータ」を,「1」が「イントラネット」を,「2」が「信頼済みサイト」を,「3」が「インターネット」,「4」が「制限付きサイト」を示しています。


△ 図をクリックすると拡大されます
図3●実行時の警告を表示しなくする設定
 ファイル実行時の警告を消すには,このゾーン情報が入ったストリームをファイルから削除してください。

 例えば,実行ファイルのプロパティ・ウインドウの[全般]タブの[ブロックの解除]ボタンを押すという操作で警告が出なくなります(図3)。また,「いったんUSBメモリーなどFATでフォーマットされた記憶媒体に実行ファイルをコピーする」「実行ファイルのプロパティ・ウインドウの[Streams]タブからゾーン・データを削除する」などの方法も有効です。

ゾーン情報の認識に時間が必要
 多少注意点がありますが,前述したツールで表示される[Streams]タブの機能で,ゾーン情報を変更することも可能です。テスト用のファイルを作成するときのために,覚えておくと便利でしょう。ここでは「インターネット」から「制限付きサイト」に変えてみます。

(1)図6のプロパティ・ウインドウで[Edit Streams…]ボタンを押します。
(2)ファイル名の入力ダイアログが表示されますので,そのまま[OK]を押します。
(3)ストリーム名の入力が求められますので,これに「Zone.Identifier」と入力します。
(4)ストリームの内容を入力(または変更)します。

 既に,ストリームの内容が存在する場合には(2)の操作の後,内容が表示されます。警告が表示される実行ファイルでは,

[ZoneTransfer] ZoneId=3

と表示されるはずです。この「3」の部分だけを注意深く,半角の「4」に置き換えます。「注意深く」と書いたのは,編集場所を的確に選ぶ必要があるためです。本来,このストリームの内容は改行文字を含む複数行から成りますが,マイクロソフトのツールでは,改行文字を表示・入力できません。このため,表示されない改行文字を残すように編集します。

 編集が終わったら,入力ダイアログを閉じます。続けてストリームを開こうとしてファイル名入力ダイアログが表示されますので,これを[キャンセル]ボタンで閉じます。


△ 図をクリックすると拡大されます
図4●ゾーンIDを4に修正したファイルの起動画面
 実際に編集したストリームが反映されるには,ここでプロパティ・ウインドウを閉じ,さらにいったんエクスプローラも閉じる必要があります。

 この後,このゾーンIDを「4」に設定したファイルを実行してみると,比較的危険性が高い「制限付きサイト」から入手したファイルの設定になるため,実行できなくなります(図4)。

 ただし,何回か試したところ,ストリーム情報はキャッシュされているらしく,ストリームを編集した直後には,実行ファイルの動作が変わりませんでした。反映に少し時間がかかることを考えて利用する必要があります。


日立ソフトウェアエンジニアリング
技術開発本部 .NETセンタ 主任技師