みなさん、こんにちは。 SPNの塩月です。
東北・関東地方を襲った巨大地震の発生から三週間が過ぎようとしています。被災された方々には心よりお見舞い申し上げます。
さて今回のSPN通信は、Windows Vistaで導入された「整合性レベル」によるアクセス制御についてお話しましょう。先日のことですが、米国SANSのWebサイトで以下の記事が公開されました。
Limiting Exploit Capabilities by Using Windows Integrity Levels http://isc.sans.edu/diary.html?storyid=10531この中ではWindows Vista、7、Server 2008に実装されている整合性レベル(Integrity Levels)がマルウェア活動の制約にいかに役立つかについて述べられています。
そもそもWindowsには、オブジェクト(ファイル、レジストリ、プロセス等)の「アクセス許可」を設定することにより、どのプロセス(プログラム)がどのオブジェクトに対してどのようなアクセス(読み出し、書き込み等)ができるかを制御する機能が備わっています。アクセス許可はユーザ(あるいはグループ)に対してアクセスを許可する/拒否するという具合に設定し、例えばこのユーザのプロセスからは読み出しアクセスを許したい、このユーザのプロセスからは書き込みアクセスを拒否したい、といったようにプロセスを起動するユーザ単位で制御を行います。ですので、あるユーザが起動したプロセスAと同じユーザが起動したプロセスBには、あるオブジェクトについていずれも同じアクセス許可が適用されることになります。
Vista以降、上記の「アクセス許可によるアクセス制御」に加え、「整合性レベルによるアクセス制御」の仕組みが導入されました。整合性レベルによるアクセス制御は、オブジェクトを「信頼性」に基づいて分類・レベル分けし、それらの相互のアクセスをアクセスポリシーで制御します。以下に主要な整合性レベルと該当するプロセスの例、およびアクセスポリシーの種類を示します。
主要な整合性レベルとプロセスの例 -------------------------------------------------------------------- 低レベル 保護モードのIEやそれから起動されたプロセス 中レベル 標準ユーザや権限昇格していない管理者ユーザのプロセス 高レベル 管理者権限に昇格したユーザのプロセス システムレベル Local Systemなどのサービスプロセス 整合性レベルのアクセスポリシー -------------------------------------------------------------------- No-Write-Up 下位の整合性レベルからの書き込みを拒否 No-Read-Up 下位の整合性レベルからの読み出しを拒否 No-Execute-Up 下位の整合性レベルからの実行を拒否 Inside Windows Vista User Account Control http://technet.microsoft.com/en-us/magazine/2007.06.uac.aspxアクセス許可の目的がユーザ単位でのアクセス制御であるのに対し、整合性レベルの目的は他の(下位の)整合性レベルのプロセスからのアクセスを制御することにあります。例えばあるユーザがIE(Internet Explorer)を使用している場合を考えてみましょう。仮にそのIEのプロセスがバッファオーバーフローなどの脆弱性によりセキュリティ侵害を受けてしまうと、従来のアクセス許可では当該ユーザが所有するファイルやプロセス等のオブジェクトを効果的に保護することができません。自分のモノに対して自分がアクセスするわけですので、当然といえば当然ですよね。
一方、保護モードで動作しているIEは整合性レベルが「低」に、一般ユーザのオブジェクトの整合性レベルはデフォルトで「中」になります。オブジェクトのデフォルト・アクセスポリシーは、プロセスがNo-Write-UpおよびNo-Read-Up、ファイルやレジストリはNo-Write-Upですので、IEがセキュリティ侵害を受けたとしても、整合性レベルによるアクセス制御がそのユーザのオブジェクトに対する不正行為(特に書き込み行為)を防いでくれます。なお整合性レベルによるアクセス制御は、アクセス許可よりも優先して評価されます。
下の図は整合性レベルによるアクセス制御の概念を表したものです。
+------------+ +--------------------+ | | 書き込み禁止 | 高いレベルの | | | -------------------------> |ファイルやレジストリ| | | +--------------------+ | | +--------------------+ | | すべて許可 | 同じ/低いレベルの | | | -------------------------> |ファイルやレジストリ| | プロセス | +--------------------+ | | +--------------------+ | | 読み出し/書き込み禁止 | 高いレベルの | | | -------------------------> | プロセス | | | +--------------------+ | | +--------------------+ | | すべて許可 | 同じ/低いレベルの | | | -------------------------> | プロセス | +------------+ +--------------------+このように整合性レベルによるアクセス制御には、Webブラウザに代表される攻撃を受けやすいプロセス(すなわち信頼性の低いプロセス)をサンドボックスに閉じ込め、マルウェアに感染した場合にその行動を制限する効果があります。ただし低レベルの整合性でプロセスを実行させるためには、基本的にそのプログラムが低レベルで実行できるように設計されていなければなりません。
Designing Applications to Run at a Low Integrity Level http://msdn.microsoft.com/en-us/library/bb625960.aspxWindowsの標準プログラムでは前述の通り保護モードのIEが整合性レベル「低」として実行するように作られています。また先に紹介したSANSの資料によると、Google ChromeやAcrobat Reader Xも低レベルの整合性で動作するとのことです。どのプロセスやファイルがどの整合性レベルなのかを確認する方法や、整合性レベルを変更する方法については、また次回以降にご紹介したいと思います。
それではみなさん、またお会いしましょう。
合同会社セキュリティ・プロフェッショナルズ・ネットワーク
代表社員 塩月誠人
Copyright (C) 2011 Security Professionals Network Inc. All Rights Reserved.