権限昇格ダイアログを回避するBypassUACみなさん、こんにちは。今回のSPN通信では、UACの権限昇格ダイアログを回避する「BypassUAC」という攻撃手法についてお話しましょう。Vistaから導入されたUAC(ユーザアカウント制御)の機能により、管理者権限グループ(Administratorsグループ)に所属する管理者ユーザは、ログオン時には標準ユーザレベルの権限しか持たないように制限がかけられています。この状態は「管理者承認モード」と呼ばれますが、管理者承認モードでログオン中の管理者ユーザがシステム管理に関する操作を実行する際、つまり管理者権限を必要とする操作を行う際には「権限昇格ダイアログ」ウィンドウによってユーザに実行の同意が求められます。ここで「はい」ボタンを押すことによりはじめて本来の管理者権限が与えられ、システム管理操作を実行することが可能になります。XPまではこのような機能がなかったため、管理者ユーザが例えばWebブラウザの脆弱性によりマルウェアに感染した場合、マルウェアはユーザの管理者権限をフルに利用してシステム全体を制御することができました。Vista以降ではたとえ管理者ユーザがマルウェアに感染したとしても、ユーザが権限昇格ダイアログで「はい」を押さない限りシステム全体に影響を与えるような行為は制限されます。「比較的」安全に管理者ユーザとしてログオンし、システムを利用することができるようになったということですね。Vistaでは管理者ユーザがログオンしてシステム管理操作を頻繁に行う場合、この権限昇格ダイアログがそのたびに表示されるのでユーザにとって利便性が悪いというネガティブな面も表面化しました。7では、デフォルト設定で一定の条件下における権限昇格については権限昇格ダイアログを表示しない(「自動昇格」と呼ばれています)ように変更が加えられました。OSに含まれる機能で、かつ利便性向上のために必要なものをマイクロソフトが選択したと考えていただければよいかと思います。ユーザーアカウント制御の内部http://technet.microsoft.com/ja-jp/magazine/2009.07.uac.aspxこの自動昇格の機能を巧みに利用し、管理者承認モードから通常の管理者へとダイアログによる意志確認なしに権限昇格するのが「BypassUAC」という攻撃手法です。Frameworkの中ではBypassUACというモジュール名で実装されています(そのため本稿ではこれをBypassUACと呼んでいます)。7および8の両方において有効です。Bypasshttp://metasploit.org/modules/post/windows/escalate/bypassuacさてBypassUACの中身を見ていきましょう。BypassUACは以下の二つの自動昇格を利用することで攻撃を実現しています。通常、WindowsフォルダやSystem32フォルダ以下のような保護領域は管理者権限がないとファイルの作成ができません。ファイルのコピーや削除等を行う特定のCOMオブジェクトは、Windowsの標準プログラムから呼ばれた場合に限り自動昇格しますので、このCOMオブジェクトを利用すると権限昇格ダイアログなしでファイルを作成することが可能になります。BypassUACはまず、エクスプローラ(explorer.exe)のプロセスにこのCOMオブジェクトを呼び出させることで、不正なDLLファイルを以下のパスに作成します。OSにもともと存在する下記のプログラムファイルを実行します。C:\Windows\System32\sysprep\sysprep.exesysprep.exeが何であるかはこの際あまり関係がありません。重要なのはこのプログラムが起動時に管理者権限へと自動昇格すること、そして、同一フォルダに存在するCRYPTBASE.DLLという名称のDLLファイルをロードすることです。sysprep.exeは本来であればSystem32フォルダにある本物のCRYPTBASE.DLLをロードするのですが、同一フォルダに同じ名前のDLLがあればそちらを優先して使用する性質を持っています。そのためsysprep.exeは偽のCRYPTBASE.DLLをロードし、その中の不正なプログラムコードを管理者権限で実行してしまうのです。7および8のデフォルト設定下において管理者ユーザでログオンしマルウェアに感染した場合、比較的容易に管理者権限で不正行為を行われてしまう危険性があります。それでは、このような攻撃に対処するためにはどうすればよいのでしょうか?一つはすべての権限昇格でダイアログを表示させるように、UACの設定を変更することが考えられます。具体的にはコントロールパネルの「ユーザーアカウント制御の設定」でスライダーを一番上の「常に通知する」にセットします。この設定により、Vistaがそうであったように管理者ユーザのすべての権限昇格についてダイアログで同意が求められるようになりますので、たとえマルウェアがBypassUACを実行しようとしても権限昇格ダイアログの表示によりユーザに気づく機会が与えられます。このような設定で運用すると、ユーザは頻繁に出現するダイアログに慣れてしまい、盲目的に「はい」を押すようになるかもしれません。面倒なのでユーザがUACの機能そのものをOFFにしてしまう危険性もあるでしょう。「痛し痒し」の状況ですが、管理者ユーザとして日常的にログオンする必要がある限り、自動昇格機能を不正に利用されるリスクは避けるべきだと私は思います。一つの方法は、システム管理者であっても管理者ユーザではなく標準ユーザとしてログオンして使用することです。標準ユーザ(Usersグループ所属)が権限昇格する際には管理者ユーザのIDとパスワードが必要なため、常にそれらを要求するダイアログが表示されます。当然のことながら自動昇格は行われないので、ユーザがわざわざダイアログで管理者のパスワードを入力しない限りBypassUACは成功しません。日常的にシステム管理業務を行わないのであれば、極力標準ユーザでログオンすることが推奨されます。安全性と利便性のバランスをどのようにとるかは非常に難しい問題です。7および8のデフォルトとしてUACの設定を現状のように決定しましたが、これがすべての環境にとって必ずしもベストであるとは限りません。選択肢は用意されています。UACのスライダーをどの位置にセットするかはみなさん次第です。それではみなさん、またお会いしましょう。それぞれ各社・各団体の商標または登録商標です。