Windowsがユーザーインターフェイス特権分離を導入する前は、すべてのアプリケーションがすべての種類のウィンドウメッセージを同じデスクトップ上の任意のウィンドウに送信し(粉砕攻撃)、特権の昇格を許可していました。
現在、UIPIは、特権の低いアプリケーションがほとんどのウィンドウメッセージを特権の高いアプリケーションに送信することを停止しています。 ウィキペディアは言う :
ユーザーインターフェイス特権分離(UIPI)は、Windows Vista/2008 Serverで導入された技術であり、粉砕攻撃の攻撃に対抗します。 Mandatory Integrity Controlを利用することで、「完全性レベル」(IL)の低いプロセスがメッセージをより高いILプロセスに送信することを防ぎます(非常に特定のUIメッセージセットを除く)。
それは問題に対処すべきだと思われます-その記事にリンクされている this PDF によれば、WM_NULL
、WM_MOVE
、WM_SIZE
、WM_GETTEXT
、WM_GETTEXTLENGTH
、WM_GETHOTKEY
、WM_GETICON
、WM_RENDERFORMAT
、WM_DRAWCLIPBOARD
、WM_CHANGECBCHAIN
、WM_THEMECHANGED
、文書化されていない0x313
および0x31B
は許可されます。 (PDFは、57ページから始まる、サービス拒否攻撃の可能性について言及していますが、問題は特権の昇格ではありません。DLLの大まかな検査も行いました_責任があり、Windows 8では問題につながるメッセージが実際に登録されていないようです)。
WM_TIMER
によって作成された問題 が原因でターゲットプロセスが任意のアドレスにジャンプしたようではありません。ただし、Microsoftのブロガー(Raymond Chen)による この記事 は、粉砕攻撃が依然として問題であることを強く示唆しています。
できることは、サービスにプログラムをセッションに挿入させ、ログオンしたユーザーとして実行させることです。 (粉砕攻撃を回避するために、ログオンユーザーとして実行する必要があります。)
このUACに関するMicrosoftドキュメント 一部のリソースは、「まだ異なる特権レベルのプロセス間で共有されている」ことに注意してください。
- 画面ウィンドウを実際に所有するデスクトップウィンドウ。
- デスクトップヒープの読み取り専用共有メモリ。
- グローバルatomテーブル。
- クリップボード
それでも、異なる特権レベルのプロセスからそれらにアクセスできるようにするだけでは、特権の昇格を引き起こす実際のジャンプを許可するようには見えません。そして、ジャンプが行われたとしても、データ実行防止により、挿入されたコードが実際に実行されなくなると思います。
では、特権の低いユーザーのデスクトップでプロセスからウィンドウをSYSTEM
として実行しても、そのユーザーに特権を昇格させる機会はありますか?
UIPIは、整合性レベルが低いプロセスがWM_TIMER
またはEM_GETLINE
より高い整合性レベルのプロセスへのメッセージ。これらは、システムの特権を昇格するために悪用される可能性のある2つのメッセージタイプです。整合性レベルの低いプロセスでも、限られたメッセージタイプを高レベルのプロセスに送信できますが、プロセスの実行を制御するために使用することはできません。 [〜#〜] dep [〜#〜]が節約の猶予である限り、WM_TIMER
またはEM_GETLINE
ROPチェーンの実行を開始します。この場合、スタックをピボットできるオペコードを見つける必要があります(これがWM_TIMER
コールバックは、ROPチェーンのアドレスを含む新しい場所に実行を送信します。