セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.62 Webのマーク(Mark of the Web)が外れない?|最新OSのここに注目(注意)!
2024年11月21日配信
執筆者:山内 和朗
先日、お客様との打ち合わせ中、Windows 11バージョン24H2で認識している気になる問題についての話になりました。その中の1つに、Webからダウンロードしたファイルに付与される「Webのマーク(Mark of the Web≪MOTW≫)」をファイルのプロパティから解除しても、再度プロパティを開くと解除されていないという問題があるということを聞きました。その場で手元のPCで確認してみると、確かにご指摘の通りでした。今回は、その打ち合わせ中に調査し、その場で出した結論(自論)についてお伝えするとともに、「Webのマーク」について少し詳しく説明します。
Webのマーク(WOTW)は、(Webのマークに対応した)アプリケーションを使用してWebや信頼されていない共有(IPアドレス指定など)からダウンロードしたファイルやメールの添付ファイルに付与される特別なファイル属性です。ファイルにWebのマーク属性があると、(Webのマークに対応した)アプリケーションはファイルが信頼されていないところから入手されたものとみなし、マクロやアプリケーションの実行をブロックしたり、警告したりします。ちなみに、Invoke-WebRequestやcurlコマンド、copyコマンドなどでダウンロード/コピーしたファイルにはWebのマークは付きません。
Webのマークは、エクスプローラーでファイルのプロパティを開き、「全般」タブの「セキュリティ:」のところにある「許可する」のチェックボックスをチェックして「OK」または「適用」をクリックすることで削除することができます(画面1)。
画面1 ファイルのプロパティで「許可する」をチェックしてWebのマークを解除する
本来であれば、Webのマークが削除されると、ファイルのプロパティの「全般」タブの「セキュリティ:」の項目そのものが表示されなくなります。しかし、Windows 11バージョン24H2の場合(少なくともOSビルド26100.2033では)、「適用」をクリックすると削除されたように見えますが、「OK」をクリックしてファイルのプロパティを開き、もう一度、ファイルのプロパティを開くと、「セキュリティ:」の項目が依然として表示されてしまいます。ちなみに、同じファイルに対して、もう一度、「許可する」をチェックして「OK」または「適用」をクリックすると、「属性の適用エラー」が表示されます(画面2)。
これらの操作やエラーに何ら危険なことはないので、もしWindows 11バージョン24H2を利用している場合は、ぜひ試してみてください。Windows Server 2025(OSビルド26100)でも同様の問題が発生することを確認しました。
画面2 再びファイルのプロパティを開くと、削除したはずのWebのマークがまだ存在するかのように見える。もう一度「許可する」をチェックすると、「属性の適用エラー」が発生
お客様からは、“ツール(スクリプト)を使ってWebのマークを削除すると、すぐに削除できる”“「許可する」をチェックしてプロパティを閉じてから、サインアウト/サインインし直すと削除される”という情報をいただきました。そのことを踏まえ、私は、実際には一度目の「許可する」の適用でWebのマークは削除されていて、問題はエクスプローラー側にあるのではないかと疑いました。2度目の「許可する」適用時に遭遇した「属性の適用エラー」も、私の疑いと矛盾しないものです。
Webのマークは、Winows XP Service Pack(SP)2の時に導入された機能で「ゾーン識別子(Zone Identifier)」とも呼ばれます。ゾーン識別子は、NTFSの「代替データストリーム(Alternate Data Streams《ADS》)」(Windows NT 3.1からの機能)と呼ばれるファイル属性として保存されます。具体的には、代替ファイルの代替データストリーム「Zone.Identifier」に「ZoneId=番号(通常インターネットを示す3)」としてゾーン情報が保存されます。
Windows Sysinternalsの「Streams」ユーティリティ(→Streams| Sysinternals|Microsoft Learn)を使用すると、代替データストリームの有無を簡単に確認および削除(-dパラメーターを使用)することができます。Streamsはサブディレクトリ内のファイルを再帰的に処理できるため(-sパラメーターを使用)、多数のファイルからWebのマークをすばやく削除できて便利です。今回はStreamsをWebのマークの有無の確認のために使用しました。
Windows Sysinternals 徹底解説 改訂新版(2017年 日経BP) ※書籍の正誤情報、およびユーティリティのこれまでの更新情報については、旧ブログサイトをご覧ください。 |
インターネットからWordファイル(.docx)をダウンロードし、ファイルをダブルクリックして開くと、インターネットから入手したファイルと判断され、注意を促すとともに、保護ビューで開きます(画面3)。Webマーク属性があることで、もし危険なマクロが含まれていたとしても、それが実行されることはありません。Webのマークがセキュリティ機能に有効であることを示すよい例です。
画面3 インターネットからダウンロードしたWordファイルを開くと、Webマーク属性を見つけて保護ビューで安全に開く
次に、Wordファイルのプロパティを開き、「許可する」をチェックして適用します。もう一度、ファイルのプロパティを開くと、「セキュリティ:」の項目が表示され、Webのマークが外れていないように見えます。しかし、「許可する」をチェックする前と後のStreamsの実行結果(コマンドプロンプト)を見てください。ファイルのプロパティに「セキュリティ:」の項目は表示されますが、実際のファイルからはWebのマーク属性(Zone.Identifier)が削除されています(画面4)。
画面4 ファイルのプロパティを開くと、削除したはずのWebのマークがまだあるように見えるが、Streamsの実行結果では削除されているのがわかる
実際のファイルからはWebのマーク属性が削除されているため、ファイルをダブルクリックして開くと、保護モードを経ずに、編集モードで直接開くことができるようになります。誤解しているのはエクスプローラーだけということです。2度目の「許可する」適用時の「属性の適用エラー」は、Webのマークの属性(Zone.Identifier)を更新しようとしたけど、既に削除されているため見つからずに発生したエラーなのでしょう。
画面5 Webのマークが外れたため、アプリケーションは保護ビューではなく編集モードで直接ファイルを開くことができるようになる
このエクスプローラーの表示上の問題は、サインアウト/サインインし直せば問題のファイルについては解消します。サインアウト/サインインの他に、「explorer.exe」プロセスを強制的に停止し、実行し直すことでも解消されます。しかし、次にファイルをダウンロードしたときに、同じ問題が再現します。エクスプローラーの表示上の問題を解消するために、何度もサインアウト/サインインしたり、プロセスを再起動したりするのは現実的ではありません。Microsoftがこの問題を早期に修正することを期待しましょう。
別の回避策としては、Webのマークの属性の削除にエクスプローラーを使わないことです。例えば、前出のStreamsを利用できる場合は、次のコマンドラインを実行します。Streamsの-dパラメーターは、Webのマークの属性だけでなく、すべての代替データストリーム属性を削除します。Streamsで属性を削除してから、そのファイルのプロパティを“初めて”開けば、「セキュリティ:」の項目が表示されることはありません。
C:¥> Streams -d <ファイルのパス> |
Streamsはファイル名のアスタリスク(*)指定やサブディレクトリの再帰的な処理(-sパラメーターを使用)ができるので、多数のファイルを一括で処理したい場合には便利です。しかし、実は、ツールを使わずにWebのマークを削除する方法もあります。PowerShellで次のコマンドラインを実行すれば、指定したファイルからWebのマークの属性だけを削除することができます(画面6)。
PS C:¥> Remove-Item -Path <ファイルのパス>:Zone.Identifier または PS C:¥> Remove-Item -Path <ファイルのパス> -stream Zone.Identifier |
画面6 代替データストリーム属性の有無の確認(dir /rおよびStreams)と、属性の表示(more)、属性の削除(Remove-ItemおよびStreams)
ちなみに、Webのマークを含む代替データストリーム属性の有無は、コマンドプロンプト(PowerShellの場合はcmd.exe /cに続けて)でdir /rコマンドを実行することで確認することができます。また、Webのマーク属性に含まれるゾーン情報(ZoneIdなど)については、moreコマンドに代替データストリームのファイルパスをリダイレクトすることで参照することができます。
C:¥> dir /r <ファイルのパス> C:¥> more < <ファイルのパス>:Zone.Identifier |
Windowsの現在のバージョンでは、Webからダウンロードしたファイルには、Webのマークであるゾーン情の属性(Zone.Identifier)の他に、「Windows Defender SmartScreen」の属性(SmartScreen)も付与されます(この属性の値には「Anaheim」とだけ記述されていますが、その意味は不明です)。Windowsの以前のバージョンでは、ゾーン情報の属性(Zone.Identifier)がある実行可能ファイルを実行しようとすると「セキュリティの警告」が表示されましたが、最近はその画面に遭遇することが無くなったと思いませんか? Windows Defender SmartScreenがオンの場合、ゾーン情報の属性(Zone.Identifier)があったとしても、Windows Defender SmartScreenがそのファイルを安全だと判断すれば、注意や警告なく実行できるようになっています(画面7)。
画面7 Windowsの現在のバージョンではWebのマークが付いている実行可能ファイルを警告なく実行できる場合がある。それはWindows Defender SmartScreen制御しているから(画面左)。Windows Defender SmartScreenをオフにすると、ゾーン属性によって従来のセキュリティの警告が表示される(画面右)
最後にもう1つWebのマークに関する雑学を。ファイルのプロパティに存在するWebのマークを削除するための「許可する(K)」チェックボックスは、以前は「ブロックの解除(K)」チェックボックス、さらに以前は「ブロックの解除(K)」ボタンでした。ボタンからチェックボックスに切り替わった際、ウィンドウサイズとの関係で最後の「)」が表示されない(表示エリアから溢れる)という問題が日本語版で発生し、その後、「許可する(K)」に変更されました。英語版では、今も昔も変わらず「Unblock」であり、ショートカットキー「K」は「Unblock」の最後の「K」です。旧ブログの以下の記事では、その画面の変化を確認することができます。
Windows 10 ver 1709 は「ブロックの解除(K)」改め「許可する(K)|山市良のえぬなんとかわーるど(アーカイブ)
WebのマークはWindows XP SP2で導入された古くからある機能ですが、Windows 10初期のバージョンおよびWindows Server 2016で挙動が変更されたことがあります。当時の「ブロックの解除(K)」をチェックしてWebのマークを解除すると、ゾーン情報の属性(Zone.Identifier)が削除されることはなく、ゾーン情報に含まれる「ZoneID=3」が削除され、「AppZoneId=4」が追加される、つまり「ZoneID=3」が「AppZoneId=4」に書き換える仕様になりました(画面8)。「AppZoneId」は、Windows Defender SmartScreenの古いバージョンが使用していた情報のようです。インターネットを検索すると、その挙動を解説する古い記事が見つかるので、現在の仕様とは異なることに注意してください。Windowsの現在のバージョンでは、再びゾーン情報の属性が削除される仕様に戻っています。いつ戻ったのかまでは押さえていませんが、少なくともWindows Server 2019(Windows 10バージョン1809)までには現在の仕様に戻っていました。
画面8 Windows 10の初期のバージョンおよびWindows Server 2016(この画面)では、「ブロックの解除」をチェックしてWebのマークを削除すると、ゾーン情報を削除するのではなく、ゾーン情報の「ZoneId=3」が「AppZoneId=4」に書き換えられる
Windows 11バージョン24H2のエクスプローラーにはこの他にも、「・・・(もっと見る)」のサブメニューがウィンドウの位置に関係なく上向きに展開されるなど問題が確認されています。今回に限らず、Windowsの新しいバージョンにはバグがつきものです。これまでのリリースされた品質更新プログラムの内容を確認すると、既知の問題にリストされることなく、修正された問題も少なからずあります(例: KB5044384ではシャットダウン中にSTOPエラーが発生する問題を修正)。こうしたバグにイラつきたくなければ、いそいでアップグレードせずに、しばらく様子を見たほうがよいでしょう。