EternalWindows
GINA / Winlogonとデスクトップ

ユーザー入力を求めるようなグラフィカルなセキュリティ操作は、 それが他のアプリケーションから検出できないようになっていなければなりません。 たとえば、何らかのダイアログボックスにユーザー名とパスワードを入力する場合、 その入力した文字列が他のアプリケーションから取得されては明らかに情報の漏洩です。 Windowsはこのような問題を回避するためにデスクトップという概念を取り入れ、 ユーザーがシステムにログオンするときやワークステーションを制御するときは、 デスクトップを切り替えることによってセキュリティを維持しようとしています。

デスクトップやそれに関わるウインドウステーションについては別の節で説明しますが、 簡単にいえばデスクトップとは、1つの論理的なディスプレイを持つユーザーオブジェクトのことで、 現在ディスプレイに表示されているもの(つまり今、あなたの眼に映っているもの)は、 現在アクティブであるデスクトップのディスプレイになります。 デスクトップは複数存在することが可能で、それらはセキュリティが設定可能となっています。 このため、あるデスクトップ上で動作するアプリケーション(正確にはスレッド)は、 他のデスクトップ内に存在するオブジェクトには基本的にアクセスできません。 ウインドウやフックはデスクトップの一部であるため、 他のデスクトップのエディットボックスから文字列を取得したり、 スレッドにフックを掛けて動作を監視することはできないわけです。

デスクトップはディスプレイを持ちますから、それが作成される段階も早くなっています。 システムプロセスの1つであるWinlogon(winlogon.exe)は、 Winsta0というウインドウステーションを作成した後、 defaultとwinlogonという2つのデスクトップを作成します。 このwinlogonというデスクトップはセキュアデスクトップなどとも呼ばれ、 グラフィカルなセキュリティ操作を行うときにアクティブになります。

この図では、1つのダイアログを除いてなにも表示されていませんが、 それはエクスプローラ等の他のアプリケーションが起動されていないということではなく、 winlogonデスクトップがアクティブになっているためにdefaultデスクトップの ディスプレイが表示されていないということを意味します。 winlogonデスクトップにアクセスできるのはシステムだけであるため、 このデスクトップに切り替えてセキュリティ操作を行えば、 他のアプリケーションからの干渉を遮断することができます。 Winlogonはセキュリティ操作の終了を検出した後、 winlogonデスクトップをdefaultデスクトップ(アプリケーションデスクトップ)に切り替えます。

基本的には専用のデスクトップに切り替えるだけでセキュリティは向上するのですが、 それはアクセスコントロール上での話であり、絶対的なものではありません。 WinlogonはGINAをロードする前に、システムプロセスの1つであるservice.exeを起動します。 このプロセスは、自動起動で開始するサービスを全て起動するため、それらは ユーザーがログオンダイアログボックスに認証情報を入力する時点で既に起動されています。 一般にサービスは独自のウインドウステーション上で動作することから、 Winlogonデスクトップへのアクセスは許可されませんが、 サービス自体がローカルシステムアカウントで動作していることから、 特権を通じて所有権を取得し、DACLの修正を行うことも不可能ではありません。 WinlogonがCtrl + Alt + Delの押下を要求するダイアログを表示するのは、 このSASと呼ばれる入力メカニズムがWinlogon以外に検出されないからであり、 これを期に実際にセキュリティ操作を入ることで、悪意のあるサービスによって予め 表示されていた偽のログオンダイアログを見分けることが可能となるのです。


戻る