Windows XPでは、USBメモリなどの書き込み可能なリムーバブルメディアをフォーマット(初期化)するには、「管理者権限」(Administratorsローカルグループのメンバー)が必要でした。この仕様は、Windows NTまでさかのぼることができます。


とはいっても、Windows NTのころ、USBは登場したばかりの先進の規格であり、OS標準では対応していませんでした。Windows NT時代の書き込み可能なリムーバブルメディアといえば、フロッピーディスク(FD)ですが、フロッピーディスクのフォーマットにも管理者権限が必要でした。

企業の一般的なドメイン環境では、社員を標準ユーザーの権限でクライアントPCにログオンさせていることが多いと思います。「メディアのフォーマットには管理者権限が必要」という理由だけで、“ローカルの管理者権限”は付与したくないでしょう。でも、メディアのフォーマットをIT部門の仕事にさせられるのも面倒ですよね。

ご安心ください。この仕様は、Windows Vistaで緩和され、標準ユーザー(Usersローカルグループのメンバー)でもリムーバブルメディアのフォーマットが可能になりました。しかし、時と場合によっては、メディアをフォーマットしようとするとローカル管理者の資格情報を要求されることがあります。それはなぜでしょう。表示画面の中に答えのヒントがあります。

●アクセス許可が緩和された背景とは?

答えを教える前に、ここで少しばかり背景となるお話など。

先ほども触れましたが、企業のドメイン環境では、社員を標準ユーザーの権限でクライアントPCにログオンさせることが、セキュリティ面から推奨されます。個人であっても、日常的な作業で利用するユーザーは、標準ユーザーの方がセキュリティリスクは少なくて済みます。

しかし、Windows XP以前は、標準ユーザーとして作業中に管理者権限を必要とするシステム変更やインストール要求があると、管理者権限を持つユーザーで再度ログオンし直す必要があり、何かと面倒でした。セキュリティよりも利便性を優先すると、ログオンユーザーにローカルの管理者権限を付与してしまうということになります。

Windows XP(およびWindows Server 2003)では、ローカルコンソールにログオンすると、常に「セッション0」というターミナルサービスセッション(後にリモートデスクトップサービスセッション)にログオンすることになります。このセッション0では、システムアカウント(SYSTEM)がサービスを実行するのにも使用されます。そのため、ログオンユーザーが管理者権限を持つと、ユーザーが誤って取り込んでしまったウイルスや悪意のあるコードの実行が、システム全体に影響してしまうリスクが非常に高くなってしまいます。

Windows Vistaでは、ログオンしたまま管理者特権を行使できる利便性を維持しながら、セキュリティを強化するために、幾つか設計変更が行われました。その1つが「セッション0の分離」です。Windows Vista以降では、セッション0はシステムがサービスを実行するために専用で使用し、ログオンユーザーは常に「セッション1」以降にログオンするようになりました。

もう1つは「ユーザーアカウント制御(User Account Control:UAC)」の導入です。UACにより、管理者ユーザー(Administratorsローカルグループのメンバー)であっても、ログオン時に特権グループや特権が制限された、標準ユーザー相当の権限で日常的な作業を行うことになり、特権が必要なときにUACの昇格プロンプトで明示的に許可するようになりました。

一方で、標準ユーザーでログオンしている場合でも、特権が必要な操作をしようとすると、UACの昇格プロンプトに管理者ユーザーの資格情報を入力するように要求されるので、企業のIT部門や家庭のPCを管理する人は、管理者ユーザーでログオンし直すという手間を省けます。

この他、「整合性レベル(Integrity Level)」や「ファイルシステムとレジストリの仮想化」など、Windows Vistaには今日のWindows 10へとつながる、多数のセキュリティ強化機能が導入されました。

Windows Vistaにおけるセキュリティ強化と利便性の向上の結果、企業では標準ユーザーが以前よりも導入しやすくなったはずです。リムーバブルメディアを標準ユーザーでもフォーマットできるという「アクセス許可の緩和」は、そんな背景があってのことだと、私は勝手に想像しています。

●答えは「ボリュームのアクセス許可」にあり!

前出した管理者権限が必要のアラート画面では、標準ユーザーでログオンし、「エクスプローラー(Explorer.exe)」のコンテキストメニュー(右クリックメニュー)からメディアをフォーマットしようとしたところ、UACのプロンプトに阻まれました。

コマンドプロンプトから「FORMAT」コマンドを実行してフォーマットしようとすれば、「十分な特権がないので、アクセスは拒否されました」と表示され、フォーマットは失敗します。しかし、“あること”をするとフォーマットが成功します。

同じコマンドプロンプトでのコマンドにおいても、実は「リモートデスクトップ経由でログオンしたセッション」であるか、「ローカルコンソールへの対話的なログオンセッション」であるかの違いで変わります。

リモートデスクトップ接続を使用して標準ユーザーがPCにログオンした場合、そのPCに接続されたUSBメモリは標準ユーザーの権限ではフォーマットできません。ところが、ここでリモートデスクトップ接続を「切断」し、ローカルコンソールから同じセッションに再接続すると、2番目のFORMATコマンドのように成功します(リモートデスクトップ接続からログオフして、ローカルコンソールからログオンするのでも同じ)。

リモートデスクトップ接続とローカルログオンで、リムーバブルメディアに対する挙動が異なるのは、リムーバブルメディアのボリュームに設定された「既定のアクセス許可」に関係しています。しかし、Windowsには「ボリュームのアクセス許可」(セキュリティ記述子)を設定したり、参照したりするインタフェースは用意されていません。

そこで今回は、マイクロソフトのツール集「Windows Sysinternals」の「AccessChk」ツールを使ってみたいと思います。AccessChkはユーザーやグループが、ファイル、ディレクトリ、ボリューム、レジストリキー、サービス、プロセス、その他のさまざまなオブジェクトに対して持つアクセス許可の要約や詳細なセキュリティ記述子をダンプするユーティリティーです。

ボリュームのアクセス許可の要約を参照するには、次のような形式でドライブ文字(以下の例では「E:」)を指定します。完全なセキュリティ記述子を確認するには、「-l」オプションを追加します。



読み取りアクセス許可は「R」、書き込みアクセス許可は「W」で示されます。「-l」オプションを付けない場合、このアクセス許可は要約であるため、フルコントロールのアクセス許可も「RW」と表示されます。これはボリューム(ドライブ)に対するアクセス許可であり、そのボリューム上のファイルシステムのアクセス許可とは関係ないので、アクセス許可を設定できないFATやFAT32のUSBメモリにもボリュームのアクセス許可は存在します。

Windows 10でOSドライブ(C:)とUSBメモリ(E:)に対して実行した場合と、Windows XPでUSBメモリ(E:)に対して実行した場合を比べると、コマンドの出力内容に少し違いがあります。

Windows 10(Windows Vista以降)の方には、「NT AUTHORITY\INTERACTIVE」に対する「RW」アクセス許可が追加されています。

「NT AUTHORITY\INTERACTIVE」には、ローカルコンソールから対話的にログオンしたユーザーのセッションは含まれますが、リモートデスクトップ接続でログオンしたユーザーのセッションは含まれません。そのため、リモートデスクトップ接続の標準ユーザーのセッションでは、Windows XPと同じように「Everyone」に対する「R(読み取り)」のアクセス許可が適用され、標準ユーザーはUSBメモリをフォーマットできなかったのです。

ちなみに、Windows Sysinternalsのユーティリティーは、Windows NT時代から続く歴史のあるものですが、最新バージョンは古いOSでは動かないものも出始めています。例えば、最新のAccessChk(現時点では6.10)はWindows XPで動作しなかったため、手元にあった古いバージョン(5.01)を使う必要がありました。

 

【関連記事】

Windows上のアンチウイルスソフトをマルウェアに変えるゼロデイ脆弱性