2025年11月4日火曜日

ユーザーにバレない方法でUAC/管理者保護を突破するほうほう

このブログではWindowsのUAC(User Account Control)、そして新しく追加された管理者保護機能をを突破する新しい手法を啓発目的で書きます!!!

導入 

最初、WindowsのUACの機能を調べていた時にそれがどのように機能するのか調べていました。それでバグバウンティができないかなぁと少年心でうきうきで調べてました。

UACの動作

UACはインストーラーやレジストリエディタを開くとよく出てくる「このアプリが変更を加えることを許可しますか?」と警告してくるあれですね。
そしてそれをを調べていくうちに、Consent.exeというプロセスがUACを呼び出す際に実行されていることを知りました。ありがとうCharGPT。Consent.exeはUACの呼び出し時に必ず実行され、そのあとに動作を終了します。(↓こんなやつ)

背景

Consent.exeをどのように悪用するかを考えたときにまずそれを検知することから考えました。Windowsでは標準ユーザー権限でプロセスはコンピュータ上に存在するすべての現在実行されているプロセス名を取得できます。それを使えばイケるって、確信したね。

前提条件

  • コード実行権限: 攻撃者が標的システム上で、標準ユーザー権限で任意のコードを実行できる状態にあること。
  • ユーザー操作: ログインしているユーザーが、何らかの正当な理由で管理者権限昇格を伴う操作を自発的に行うこと。(これは、管理者アカウントでログインしているユーザー、または標準ユーザーが管理者資格情報を入力して昇格させるシナリオの両方を含みます。

攻撃ベクター

  • ローカル。この手法は、既にシステムに侵入したプロセスが権限を昇格するために使用されます。

目的

  • ユーザーを欺き、攻撃者のプログラムに対するUACプロンプトを承認してもらうこと。

シナリオ

攻撃者は用意したプログラムが標準ユーザー権限でバックグラウンドに潜伏します。プログラムは昇格プロンプト(実際にはConsent.exe)を検知する監視ループを実行します。

ユーザーが、ごく普通の操作としてなんらかのアプリケーションを管理者権限で実行しようとします(任意のインストーラーやレジストリエディタなど)。今回の例ではSteamのインストーラーを右クリックし、「管理者として実行」を選択したとします。

これにより一つ目の正当なUACプロンプトが表示されます。ユーザーは自身が行った操作であるため、これを疑うことなく承認します。潜伏していたプログラムはここでConsent.exeの動作を検出します。

ユーザーがプロンプトを承認し、ダイアログを閉じたその瞬間に潜伏していたプログラムはConsent.exeが終了したことを検知し、即座にUACプロンプトを要求します。この場合ではコマンドプロンプトを管理者権限で起動しようとします。これには悪意あるペイロードを乗せられる。(僕が行ったPoCでは詳細を表示を押すとプログラムの場所という項目にペイロードとなるコマンドが表示されてしまうが、隠す方法があると思う)
この「正当なプロンプトの終了をトリガーに、即座に悪意のあるプロンプトを生成する」というものが今回の手法です。

ユーザーの視点では、1つ目のプロンプトを承認した直後に、間髪入れずに2つ目のプロンプトが表示されます。多くのユーザーは、これを最初のSteamのインストールに必要な追加処理だと誤認し、深く確認することなく承認してしまうでしょう。

対策

管理者権限を必要としないソフトウェアでも安易にダウンロード、実行しないでください。

事後

僕がこの手法を思いついてPoCを作ったあとにMicrosoftに報告しましたが、UACはセキュリティー境界ではないため、セキュリティサービス基準を満たさないため修正されませんでした。管理者保護機能はセキュリティ境界だけれども、これはそれをバイパスしているのではなくユーザーを巧妙に欺いているにすぎないので修正されませんでした。

0 件のコメント:

コメントを投稿

ユーザーにバレない方法でUAC/管理者保護を突破するほうほう

このブログではWindowsのUAC(User Account Control)、そして新しく追加された管理者保護機能をを突破する新しい手法を啓発目的で書きます!!! 導入  最初、WindowsのUACの機能を調べていた時にそれがどのように機能するのか調べていました。 それでバ...