[基礎解説]
Windowsセキュリティ・メカニズム入門(後編)

4.別のユーザーとして実行する機能とWindows Vista

畑中 哲
2006/06/16

「別のユーザーとして実行」する機能

 Windows 2000以降のOSでは、「別のユーザーとして実行」という機能(RunAs/Secondary Logon)がある。コマンド・プロンプト上でrunasというコマンドを利用するか、プログラムの起動時に[別のユーザーとして実行]を選択すると利用できる。

「別のユーザーとして実行する」機能
プログラムを起動する場合、右クリックしてポップアップ・メニューから「別のユーザーとして実行する」を選択する(Windows XP/Windows Server 2003の場合)。すると実行するユーザー・アカウントとパスワードを問い合わせるダイアログが表示される。また、プログラムのショートカットのプロパティを表示させ、[ショートカット]タブにある[詳細設定]をクリックして表示されたダイアログでも設定することができる。Windows 2000の場合は、ショートカットのプロパティ・ダイアログにある[別のユーザーとして実行]をチェックする。コマンド・プロンプト上から利用する場合は、runasコマンドを利用する。
  プログラムのショートカットを右クリックし、ポップアップ・メニューからこれを選択すると、別のユーザー資格情報で実行させることができる。

 この機能で行っていることは、「デスクトップにログオンしたときに作成されたトークンとは別のトークンを新たに作成し、そのトークンを持つプロセスを実行する」ということである。

 すでに解説したように、トークンの書き換えには特権が必要である。特権がない普通のユーザーは、トークンを書き換えることはできない。そのため、「別のユーザーとして実行」機能では、ユーザーの代わりに「RunAs Service(Windows 2000)」/「Secondary Logon(Windows XP以降)」というサービスがプロセスの起動を行う。これが可能なのは、RunAs/Secondary Logonサービスのプロセスが「私はローカル・システムです」というトークンを持っており、自由にトークンを書き換えられるからである(前回の最後の「トークンの書き換えとセキュリティ」参照)。

 Windows NT 4.0には「別のユーザーとして実行」の機能はないが、仕組みとしては Windows NT 4.0でも可能なものであった(Windows NT 4.0で同様の機能を持つサード・パーティ製アプリケーションもある)。

そしてWindows Vistaへ

 これまでの内容をまとめると、以下のようになる。

  • 「誰」であるかの境界線は、プロセス。

  • 身元と権利を示すのは、トークン。

  • 各プロセスは独立したトークンを持ち、各プロセスのトークンは独立して書き換えられる。デスクトップに誰がログオンしているかは関係ない。

  • オブジェクトに対するアクセスは、トークンのユーザー/グループと、オブジェクトの ACL とによって、許可/拒否が決定される。デスクトップに誰がログオンしているかは関係ない。

  • 特権的操作は、トークンに特権が与えられているかどうかによって、許可/拒否が決定される。デスクトップに誰がログオンしているかは関係ない。

  • いわゆる「管理者権限」というものはない。「管理者権限でログオンする」というのは、通常、ローカル Administrators グループに所属するユーザーとしてログオンすることをいう。

  • デフォルトのオブジェクトのACLでは、通常、ローカルAdministratorsグループに強力なアクセス権が認められている。

  • デフォルトでは、ローカルAdministratorsグループにさまざまな特権が与えられている。

  • そのため、ローカル Administrators に所属するユーザーとしてログオンすると、それ以降に起動するプロセスすべてで、さまざまなオブジェクトにフル・コントロールでアクセスでき、多くの特権的操作を行うことができる。だがそれは、ログオンしたユーザーに「管理者権限」というものがあるからではない。ローカルAdministrators にたまたま強力なアクセス権を認める ACL が付いているオブジェクトが多く、また、たまたまデフォルトで多くの特権が与えられているからにすぎない。

  • 「管理者権限でログオン」したとしても、トークンから「ローカルAdministratorsグループに所属している」という情報や各種特権が削除されれば、そのプロセスは、「管理者権限を必要とする」ような操作は何もできない。

 このような仕組みを利用すると、「Aliceがログオンしたら常にC:\Windowsフォルダへのフル・コントロールを認める」といったような静的な制御でなく、より柔軟な制御が可能になる。そのような柔軟性は、すでにこれまでのWindows OSでも活用されてきた。例えば、リモート・デスクトップ/ターミナル・サーバにログオンすると、同じユーザーがコンソールにログオンした場合とは異なるトークンがプロセスに与えられる。従って、同じユーザーが同じコンピュータ上の同じオブジェクトにアクセスする場合であっても、リモート接続かどうかによって、許可されるかどうかは動的に変化するのである(参照:Windows TIPS「リモート・ログオン・ユーザーからのファイル・アクセスを制限する」)。

 一方では、Windows OSのユーザーが、「管理者権限でログオンする」のが常態となっているという問題がある。トークンには本来柔軟性があるのだが、互換性や利便性といった理由から、常日ごろどんなプロセスも同じ「管理者権限」で動作させるのが習慣になっている。これはセキュリティ上好ましい習慣ではない。

 「別のユーザーとして実行」するという機能は、そのような習慣から脱却し、セキュリティ機能を有効に利用する助けとなるはずのものだが、あくまでユーザーが意識して使用しなければならず、利便性が十分ではない。また、「別のユーザーとして実行」機能はトークンを書き換えすぎるきらいがあり、互換性や実用上の問題もある。

 そこでマイクロソフトは、次期OSであるWindows Vistaに「ユーザー アカウント制御(User Account Control)」という機能を搭載することにした(ただしこれは現時点での予定であり、最終的な製品版でどのようになるかは不明)。これは基本的には、ログオン時に与えられるトークンから自動的に多くのグループや特権を取り除き、必要なときにだけすべてのグループと特権を書き戻す機能である。トークンを書き戻すには、ユーザーは、画面上に自動的に現れるダイアログにクリックで応答するだけでよい。残念ながら現時点ではダイアログがあまりに頻繁に現れるために、便利とはいえないようである。だが、互換性を保ちつつ、よりOSを安全に使用するための次の一歩であるとはいえるだろう。

Windows Vistaのユーザー・アカウント制御ダイアログ画面
これは、Windows Vistaで新たに導入される「ユーザー アカウント制御」の確認ダイアログの例(これはビルド5384のベータ版の画面)。「リモートの設定」ダイアログ([システムのプロパティ]にある[リモート]タブ画面)を起動しようとしたところ。たとえ管理者グループに属するアカウントでログオンしていても、特権的な操作を行おうとすると、画面全体がこのようにフェードアウトし、前面にこのような確認ダイアログが表示される。[続行]をクリックしない限り、特権的な操作は行えないので、知らないうちにシステムが書き換えられたり、間違って操作してしまうなどのミスを防ぐことができる。ただしこのベータ版では、このようなダイアログが非常に頻繁に表示されるため、うるさいと感じるユーザーも多いだろう。
  起動しようとしている機能。
  プログラムの発行元。
  これをクリックしないと、操作が行えない。

 Windowsのセキュリティ・メカニズムの基礎についてこれまで解説してきた。実は今回の記事は、Windows Vistaのユーザー・アクセス制御を解説する前段階として作成されたものだ。Vistaのユーザー・アカウント制御については、次の記事を参照していただきたい。End of Article

 

 INDEX
  [基礎解説]
  Windowsセキュリティ・メカニズム入門(前編)
    1.セキュアなOSに必要なこと
    2.プロセスとトークンとACL
    3.トークンと特権的操作
    4.トークンの作成と書き換え
 
  Windowsセキュリティ・メカニズム入門(後編)
    1.管理者権限でログオンするとは?
    2.トークンの内容を確認する
    3.トークンの内容を書き換えてみる
  4.別のユーザーとして実行する機能とWindows Vista
 
目次ページへ  「基礎解説」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間