Windows 7におけるセキュリティはその基礎として、 Windows Vistaのものを踏襲しています。現時点では、Windows XPから大きく変更されたWindows VistaおよびWindows 7のセキュリティをきちんと理解されている方は少ないかもしれません。そこで Windows XPからどのように変更されたのかを説明しましょう。

ユーザーアカウント制御と整合性レベル

 例として、悪意のあるプログラムがシステムで共有されているファイルを書き換えようとした場合を考えてみましょう。実は、Windows 7においては、たとえ管理者 (Administrators)に属するユーザーとしてログオンした場合でも、通常のプロセスから、Program Filesディレクトリ(フォルダ)のようなシステム全体に影響を及ぼす領域に変更を加えることはできません。これは、ユーザーアカウント制御(User Account Control、UAC)が動作しているためです。このユーザーアカウント制御により、普通に起動されたプロセスはたとえ管理者に属する権限のユーザーでログオンしていても管理者権限が無効化されて「標準ユーザー」として実行されるため、管理者権限が必要な変更は拒否されます。

 またプロセスだけでなく、ファイルやディレクトリなどに対しても「高」、「中」、「低」の3段階の整合性レベル(Integrity Level、IL)を割り当てることが可能です。

 例えば、整合性レベル「低」が割り当てられている普通に起動されたプロセスから、整合性レベル「中」(既定値)や「高」に設定されているファイルやディレクトリを操作することはできません。これを利用することで、さらに強力な保護が可能になっています。後述するように、Internet Explorerは整合性レベル「低」で制限されています。このように管理者権限が必要な操作や高い整合性レベルが設定されたオブジェクトに対して操作を行う際には、アプリケーション側で必要な権限を要求するよう、昇格の承認を要求する必要があります(図11)。

図11●昇格の承認を求めるウィンドウ
図11●昇格の承認を求めるウィンドウ

 次に悪意のあるプログラムが試しそうなことは、「それでは、整合性レベルの高いプログラムを経由して、保護されたリソースにアクセスできないか」でしょう。しかし、この整合性レベルの仕組みはプロセス間でも有効です。整合性レベル「中」のプロセスから「高」のプロセスにウィンドウメッセージを送信することも、ウィンドウに対しフックをかけることもできません。

 また、現実問題として、悪意のあるプログラムにはインターネットを経由して感染するケースが多くなっています。そのため、Internet Explorerからのコンピュータリソースへのアクセスは、さらに厳しい制限下に置かれています。インターネットサイトの閲覧時には保護モードが有効になり、整合性レベル「低」でプロセスが実行されるのです。このため、Internet Explorer上で動作するActiveXコントロールなどは決められた手続きを踏まない限り、一時ファイルやCookieディレクトリなど限られたリソースにしかアクセスできません。

 さらに、Windowsのシステムリソース(Windowsディレクトリ内の、拡張子が.dllのファイルなど)に対してはより厳しい制限が課せられます。Windows Vistaから強化された「Windowsリソース保護」により、管理者に対しても変更権限が与えられていません

 このように、Windows Vista以降のWindowsでは、PCの保有者自身が管理者としてログオンするという“パーソナル コンピュータ”ならではの性質を強く意識したセキュリティの仕組みが備わっています。Windows 7では、このような信頼性の高いセキュリティを踏襲しつつ、Windows Vistaに寄せられたフィードバックに基づいた細かな改良がなされています。例えば、Windows 7では、図11のような昇格の承認が何度も表示されることを回避しています。