UAC - User Account Control
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Trickestを使用して、世界で最も高度なコミュニティツールによって駆動されるワークフローを簡単に構築し、自動化します。 今すぐアクセスを取得:
ユーザーアカウント制御 (UAC)は、昇格された活動のための同意プロンプトを有効にする機能です。アプリケーションには異なるintegrity
レベルがあり、高いレベルのプログラムは、システムを危険にさらす可能性のあるタスクを実行できます。UACが有効になっている場合、アプリケーションやタスクは常に非管理者アカウントのセキュリティコンテキストの下で実行され、管理者が明示的にこれらのアプリケーション/タスクに管理者レベルのアクセスを許可しない限り、システムを実行します。これは、管理者が意図しない変更から保護される便利な機能ですが、セキュリティ境界とは見なされません。
インテグリティレベルに関する詳細情報:
Integrity LevelsUACが有効な場合、管理者ユーザーには2つのトークンが与えられます:通常のアクションを通常レベルで実行するための標準ユーザーキーと、管理者権限を持つものです。
このページでは、UACの動作について詳細に説明しており、ログオンプロセス、ユーザーエクスペリエンス、UACアーキテクチャが含まれています。管理者は、セキュリティポリシーを使用して、ローカルレベル(secpol.mscを使用)で自組織に特有のUACの動作を構成するか、Active Directoryドメイン環境でグループポリシーオブジェクト(GPO)を介して構成して展開できます。さまざまな設定については、こちらで詳しく説明されています。UACに設定できるグループポリシー設定は10個あります。以下の表は追加の詳細を提供します:
一部のプログラムは、ユーザーが 管理者グループに属している場合、自動的に自動昇格されます。これらのバイナリには、_Manifests内にautoElevateオプションがTrue_の値で含まれています。バイナリは、Microsoftによって署名されている必要があります。
次に、UACをバイパスするために(中のインテグリティレベルから高に昇格する)、一部の攻撃者はこの種のバイナリを使用して任意のコードを実行します。なぜなら、それは高いレベルのインテグリティプロセスから実行されるからです。
バイナリの_Manifestを確認するには、Sysinternalsのツールsigcheck.exe_を使用できます。また、_Process Explorer_または_SysinternalsのProcess Monitor_を使用してプロセスのインテグリティレベルを確認できます。
UACが有効かどうかを確認するには、次の操作を行います:
もし**1
であれば、UACは有効です。もし0
であるか、存在しない場合、UACは無効**です。
次に、どのレベルが設定されているかを確認します:
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
を使用して収集できます。
ユーザーのグループを確認し、整合性レベルを取得することもできます。
被害者にグラフィカルアクセスがある場合、UACバイパスは簡単です。UACプロンプトが表示されたときに「はい」をクリックするだけです。
UACバイパスは以下の状況で必要です: UACが有効で、プロセスが中程度の整合性コンテキストで実行されており、ユーザーが管理者グループに属している場合。
UACが最高のセキュリティレベル(常に)に設定されている場合、UACをバイパスするのは他のレベル(デフォルト)の場合よりもはるかに難しいことを言及することが重要です。
UACがすでに無効になっている場合(ConsentPromptBehaviorAdmin
が**0
)、次のようなもので管理者権限でリバースシェルを実行**できます(高整合性レベル)。
管理者グループに属するユーザーのシェルがあれば、C$ 共有をSMB(ファイルシステム)経由で新しいディスクにマウントすることができ、ファイルシステム内のすべてにアクセスできます(管理者のホームフォルダも含む)。
このトリックはもう機能していないようです
Cobalt Strikeの技術は、UACが最大のセキュリティレベルに設定されていない場合にのみ機能します。
Empire と Metasploit には、UAC を バイパス するためのいくつかのモジュールがあります。
ドキュメントとツールは https://github.com/wh0amitz/KRBUACBypass にあります。
UACME は、いくつかの UAC バイパスエクスプロイトの コンパイル です。UACME を Visual Studio または msbuild を使用してコンパイルする必要があります。コンパイルにより、いくつかの実行可能ファイル(例えば Source\Akagi\outout\x64\Debug\Akagi.exe
)が作成されます。どれが必要かを知っておく必要があります。
注意が必要です。なぜなら、いくつかのバイパスは、他のプログラムを促す ことがあり、ユーザー に何かが起こっていることを 警告 します。
UACME には、各技術が動作し始めた ビルドバージョン があります。あなたのバージョンに影響を与える技術を検索できます:
Also, using this page you get the Windows release 1607
from the build versions.
すべての技術は、AUCをバイパスするために完全なインタラクティブシェルを必要とします(一般的なnc.exeシェルでは不十分です)。
meterpreterセッションを使用して取得できます。Session値が1のプロセスに移行します:
(explorer.exe は動作するはずです)
GUIにアクセスできる場合、UACプロンプトが表示されたときにそれを受け入れるだけで済みます。 バイパスは本当に必要ありません。したがって、GUIにアクセスすることでUACをバイパスできます。
さらに、誰かが使用していたGUIセッション(おそらくRDP経由)を取得した場合、管理者として実行されるいくつかのツールがあり、そこからcmdを例えば管理者として直接実行でき、再度UACによるプロンプトが表示されることはありません。 https://github.com/oski02/UAC-GUI-Bypass-appverif。これは少しステルスかもしれません。
騒がしくなることを気にしない場合は、常に次のようなものを実行できます https://github.com/Chainski/ForceAdmin それはユーザーが受け入れるまで権限を昇格するように要求します。
UACMEを見てみると、ほとんどのUACバイパスはDLLハイジャックの脆弱性を悪用しています(主に悪意のあるdllを_C:\Windows\System32_に書き込むこと)。 DLLハイジャックの脆弱性を見つける方法を学ぶには、これをお読みください。
自動昇格するバイナリを見つけます(実行時に高い整合性レベルで実行されることを確認します)。
procmonを使用して、DLLハイジャックに脆弱な"NAME NOT FOUND"イベントを見つけます。
おそらく、書き込み権限がないいくつかの保護されたパス(C:\Windows\System32など)内にDLLを書き込む必要があります。これをバイパスするには、次のものを使用できます:
wusa.exe:Windows 7、8、8.1。これは、保護されたパス内にCABファイルの内容を抽出することを許可します(このツールは高い整合性レベルから実行されるため)。
IFileOperation:Windows 10。
保護されたパス内にDLLをコピーし、脆弱で自動昇格されたバイナリを実行するためのスクリプトを準備します。
自動昇格されたバイナリが実行されるためのバイナリまたはコマンドの名前/パスをレジストリから読み取ろうとするのを監視することに基づいています(これは、バイナリがHKCU内でこの情報を検索する場合により興味深いです)。
Use Trickest to easily build and automate workflows powered by the world's most advanced community tools. Get Access Today:
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)