検索
連載

第7回 特権的な操作を制限するUAC(ユーザーアクセス制御)Windows OS入門(1/2 ページ)

Windows OSでは、管理者権限のあるアカウントでログオンして作業しがちだが、これは危険な行為である。だがWindows OSの仕様上、さまざまな場所で管理者権限を求められるので、ついこういった運用をしがちだ。このような状況を改善するために導入されたUACの仕組みを解説する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
Windows OS入門
Windows Server Insider


「Windows OS入門」のインデックス

連載目次

 前回は、レジストリの「リダイレクト」や「リフレクション」「仮想化」とレジストリを操作するツールなどについて解説した。今回はWindows OSの安全性を高めるための機能の1つ、UACについて見ていく。

何でも「管理者権限」で実行する悪癖

 Windows XPまでのWindows OSでは、PCに一般ユーザー(Usersグループ)権限ではなく、管理者(Administratorsグループ)権限でログインして利用することが多かった。もちろん管理が厳格な企業や組織では、管理者権限でPCを利用することの危険性に早くから気付いており、一般ユーザーには過剰な権限を与えずにPCを使うという習慣が普及していた。だがActive Directoryドメインもないような組織では、管理者権限で使うことが少なくなかった。このような運用方法が一般的だったのにはいくつか理由がある。

  • システムの設定を変更したり、アプリケーションをインストールしたりするたびに、いちいち管理者権限のあるユーザーでログオンし直すのが面倒
  • 一般ユーザー権限ではうまく動作しないプログラムやインストーラーがある
  • どうせ自分1人しか使わないのだから(特にPCは個人で所有していることが多いため)、いちいちアカウントを使い分けるのが面倒
  • Windows OSの設計上、管理者権限が必要になるケースが少なくない。例えば時刻を修正したいだけでも管理者権限が必要

 他にもいくつか理由があるが、使い分けるのが面倒だとか、Windows OSがその設計上、管理者権限を要求することがたびたびあるから、というのが主要な理由だろうか。

 だがこれは望ましくないことは明らかだろう。管理者権限でPCを使っていると、ウイルスなどに感染した場合、システムが書き換えられたり、スパムメールやDoS攻撃の踏み台にされたりしてしまうなど、あっという間に被害が拡大してしまう。

 このような事態を避けるため、たとえ管理者権限でログオンしていたとしても、システムの利用(設定変更)に制限を加える機能が用意された。それがUACである。

UACとは?

 「UAC(ユーザーアクセス制御)」は、Windows Vista/Windows Server 2008以降のWindows OSで利用できる、管理者権限の利用を制限する機能である。たとえAdministratorsグループやDomain Adminsグループに所属するアカウントでログオンしていても、UACによる確認ダイアログに明示的に同意しないと、管理者権限が利用できない。

 少し分かりづらいかもしれないが、UACは管理者アカウントで利用できる機能や権限を削減するものではない。従来のAdministratorsやDomain Adminsなどのアカウントが持つ権限はそのままで、その「管理者権限の利用を一時的に制限(保留)する」という機能である。利用できる機能(特権)を制限した、全く別の新しいユーザーアカウントやグループを用意する、といったものではないため、従来のアプリケーションなどとの互換性も高い。

 UACが有効な場合は、管理者権限が必要な操作のためのUIには「盾(シールド)」のようなマークが表示され、そのままでは実行できないことを表している。例えば次の画面は、コントロールパネルでユーザーアカウントの種類を変更しようとしているところである。[アカウントの種類の変更]というリンクには盾のマークが表示されているが、これをクリックしてみよう。

UACによるブロックが行われる操作の例
UACによるブロックが行われる操作の例
UACが有効なWindows OSでは、UACが有効か無効かにかかわらず、管理者特権が必要な操作のためのUIには盾のマークが表示される。
  (1)このマークが付いているリンクやボタンを利用するには、UACによる確認ダイアログに同意する必要がある。
  (2)このリンクをクリックしてみる。

 すると画面が暗転し、次のようなUACによる確認ダイアログが表示される。ここで[はい]ボタンを明示的にクリックした場合にのみ、以後の操作が行えるようになる。

UACによる操作の確認画面
UACによる操作の確認画面
UACが有効な場合は、システムの設定を変更しようとすると、このように確認ダイアログが表示され、ユーザーが明示的に許可しない限り、実行できない。これはWindows 8.1での実行画面例。
この例では、次の「UAC設定の変更」画面で示しているUACのレベルを一番上にした状態で実行している。デフォルトの状態(上から2つ目の状態)では、ユーザーによる操作だと、この確認ダイアログは表示されない。
  (1)画面が暗転して、このダイアログだけが表示される。これにより、UACによる操作のブロックが行われていることがすぐ分かる。
  (2)ユーザーが実際に[はい]ボタンをクリックしない限り、設定変更画面などは表示されない。これにより、意図しないシステム設定の変更を抑止できる。
  (3)どのプログラムやツールなどがUACによる許可を求めているかを確認できる。
  (4)これをクリックすると、UACの設定を変更できる。次の「UAC設定の変更」画面を呼び出す。

 このような確認画面は、例えばアプリケーションが勝手に特権的な操作を行おうとした場合にも自動的に表示される。つまりウイルスや悪意のあるプログラムなどが勝手にシステムの重要な設定を変更しようとしても、このような画面が表示されるということだ。

 もしこの操作がユーザーの意図したものなら[はい]ボタンをクリックすればよいが、そうでない場合は[いいえ]ボタンをクリックするか、[Esc]キーを押して操作をキャンセルすればよい。このようにUACを有効にしておくと、ユーザーの意図しない操作(システムの設定変更)からシステムを保護できる。

 UACを有効にするか無効にするか、どのような操作に対してUACを有効にするかなどは、[コントロールパネル]の[ユーザー アカウントとファミリー セーフティ]−[ユーザー アカウント]を起動して、[ユーザー アカウント制御設定の変更]というリンクをクリックする。上の画面にある(4)のリンクをクリックしてもよい。すると次のような画面が表示されるので、左側のスライダーを使ってUACのレベルを変更する。

UAC設定の変更
UAC設定の変更
この画面では、UACによってユーザーに通知するタイミングを変更できる。これはWindows 8.1の画面例。
  (1)特権的な操作を行おうとした場合は、常にUACの確認画面が表示される。Windows Vista/Windows Server 2008のデフォルト設定。
  (2)ユーザーによるWindowsの設定変更の場合はUACの確認画面を表示させない。Windows 7/Windows Server 2008 R2以降のデフォルト設定。Windows Vista/Windows Server 2008にはこのレベルはない。
  (3)上の(2)と同じだが、画面暗転せずにUACの確認画面を表示する。
  (4)UACを無効にする。

 これはWindows 8.1におけるUACの設定画面の例である。Windows 7/Windows Server 2008 R2以降はこのように4段階の設定レベルがあるが、Windows Vista/Windows Server 2008にはオン/オフの2段階しかない。それぞれのOSにおける操作方法については、以下のTIPSを参照していただきたい。

 4つのレベルにおけるUACの挙動は次の通りである。

レベル 意味
(1)常に通知 ユーザーやプログラムがシステムの設定を変更したり、プログラムをインストールしたりしようとすると、常に確認を求める。Windows Vista/Windows Server 2008のデフォルト設定
(2)限定的な通知 ユーザーによる操作の場合は確認画面を表示しないが、プログラムが設定を変更しようとしたり、新しいプログラムをインストールしたりしようとすると、確認を求める。Windows 7/Windows Server 2008 R2以降のデフォルト設定
(3)暗転無しの通知 上の「限定的な通知」と同じだが、画面が暗転しない。描画が乱れたり、遅くなったりするような場合に利用する
(4)UAC無効 UACを無効にする。UACによる確認画面が一切表示されなくなるので、システム的には脆弱になる。この設定はなるべく使わないようにすること
※Windows 8/Server 2012以降の場合:このレベルに設定しても、例えばコマンドプロンプトは管理者権限では起動しない(特権が制限されたモードで起動する)。UACを完全に無効にするには、上記のTIPS中の最後にある「UACを完全に無効化する」ための設定を行ってからシステムを再起動すること
UACの通知レベル

UACによる特権の制限

 以上がUAC機能の概要である。UACを有効にしておくと、意図しないプログラムやウイルスなどからシステムの設定が変更されるのを防ぐことができる。だがそのために、いちいちユーザーに対してUACの確認ダイアログが表示されるため、煩わしいと思うかもしれない。けれども安全を高めるためには、ある程度操作に制限がかけられるのは仕方がないだろう。

 以下では、UACの仕組みについて見ていこう。ただしUACの機能はWindows OSのログオンシステムやセキュリティメカニズムなどと密接に関連しているため、UAC機能の全貌を理解するのは容易ではない。本稿では、その概要を述べるだけにとどめる。より詳細なUACの機能解説や、ファイル/レジストリの仮想化、アプリケーションの昇格などについては、関連記事を参照していただきたい。

ユーザーアカウントと特権/権利

 連載第1回「ユーザーとグループアカウント」で、「ユーザーアカウント」と、そのアカウントに対して割り当てられている「特権(privileges)」「権利(rights)」について解説した(特権と権利は少し意味が異なる。詳細は第1回の記事参照。以後両方まとめて特権と呼ぶ)。Windows OSではアカウントごとに利用できる特権が決まっているが、それは実際にはローカルセキュリティポリシーによって、特権と、それを利用できるアカウントが対応付けられているからである。

 以下にローカルセキュリティポリシーの例を挙げておく。

Windows OSで利用可能な権利と割り当てられているアカウント
Windows OSで利用可能な権利と割り当てられているアカウント
Windows OSで利用可能な特権/権利と、それが利用可能なアカウントは、ローカルセキュリティポリシー内で「ユーザーの権利」として設定されている。これはWindows 8.1で「ローカル セキュリティ ポリシー」の管理ツールを起動したところ(「ファイル名を指定して実行」で「secpol.msc」を起動する)。
  (1)「ユーザー権利の割り当て」を開く。
  (2)利用可能な特権や権利の例。ポリシー名のうち、「〜としてのログオンを拒否/許可」となっているのが権利、それ以外が特権。あまり大した違いではないので、以後ではまとめて特権と呼ぶことにする。
  (3)特権が利用可能なユーザー/グループアカウント。

 あるアカウントが「管理者権限を持つ」ということは、実際には、この画面で示されているような「各種の権限がユーザーアカウントに対して割り当てられている」ということを意味している。

 例えば「システム時刻の変更」という特権は、「LOCAL SERVICE」と「Administrators」に割り当てられている。システムにログオンしているアカウントがこれらのうちのいずれか(のグループ)に属していれば、時刻情報を変更できる。

 だがUsersグループだけに属しているアカウントでは時刻情報の変更はできない。

時刻情報の変更
時刻情報の変更
Administratorsグループに属していないアカウントで時刻情報を変更しようとしたところ。user11はUsersグループにしか属していないので、時刻は変更できない(UACを無効にしてもエラーになる)。UACを無効にしてから、同じことをAdministratorsグループのアカウントで実行すると、エラーにならずに実行できる。
  (1)user11アカウントの所属グループ情報を確認してみる。
  (2)Usersグループにしか属していない。
  (3)timeコマンドで、時刻を12時34分に変更してみる。
  (4)時刻変更の特権を持っていないので、エラーとなる。

 このuser11アカウントにどのような特権が割り当てられているかは、「whoami /priv」コマンドを実行すると分かる。

特権の確認
特権の確認
現在使用中のアカウントに割り当てられている特権は、コマンドプロンプト上で「whoami /priv」コマンドを実行すると確認できる。
  (1)引数無しでwhoamiコマンドを実行すると、現在ログオン中のユーザーアカウントが表示される。
  (2)このアカウントでログインしている。user11はUsersグループに属するアカウント。
  (3)このアカウントに割り当てられている特権を確認するには/privオプションを付ける。
  (4)特権名。この例では5つの特権が割り当てられていることが分かる。
  (5)特権の説明。
  (6)特権を使用したかどうかの状態。特権が利用できるか否か、という意味ではない。


Copyright© Digital Advantage Corp. All Rights Reserved.

       | 次のページへ
ページトップに戻る