Abusing Tokens
トークン
Windowsアクセス・トークンが何か分からない場合は、続行する前にこのページを読んでください:
Access Tokens既に持っているトークンを悪用して特権を昇格できるかもしれません
SeImpersonatePrivilege
これは、ハンドルを取得できる場合に、任意のトークンの偽装(作成は不可)を許可するプロセスが保持する特権です。特権トークンは、Windowsサービス(DCOM)からNTLM認証を行うように誘導することで取得でき、その後、SYSTEM特権でプロセスを実行することが可能になります。この脆弱性は、juicy-potato、RogueWinRM(winrmが無効である必要があります)、SweetPotato、およびPrintSpooferなどのさまざまなツールを使用して悪用できます。
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotatoSeAssignPrimaryPrivilege
これはSeImpersonatePrivilegeに非常に似ており、特権トークンを取得するために同じ方法を使用します。 この特権は、新しい/一時停止中のプロセスにプライマリトークンを割り当てることを許可します。特権偽装トークンを使用してプライマリトークンを派生させることができます(DuplicateTokenEx)。 このトークンを使用して、'CreateProcessAsUser'で新しいプロセスを作成するか、一時停止したプロセスを作成してトークンを設定できます(一般的に、実行中のプロセスのプライマリトークンを変更することはできません)。
SeTcbPrivilege
このトークンが有効になっている場合、KERB_S4U_LOGONを使用して、資格情報を知らなくても他の任意のユーザーの偽装トークンを取得でき、トークンに任意のグループ(管理者)を追加し、トークンの整合性レベルを「中」に設定し、このトークンを現在のスレッドに割り当てることができます(SetThreadToken)。
SeBackupPrivilege
この特権により、システムは任意のファイルに対してすべての読み取りアクセス制御を付与します(読み取り操作に限定)。これは、レジストリからローカル管理者アカウントのパスワードハッシュを読み取るために使用され、その後、ハッシュを使用して「psexec」や「wmiexec」などのツールを使用できます(Pass-the-Hash技術)。ただし、この技術は、ローカル管理者アカウントが無効になっている場合や、リモート接続するローカル管理者から管理権限を削除するポリシーが適用されている場合に失敗します。 この特権を悪用することができます:
または、以下のバックアップオペレーターによる特権昇格セクションで説明されているように:
SeRestorePrivilege
この特権により、ファイルのアクセス制御リスト(ACL)に関係なく、任意のシステムファイルへの書き込みアクセスが許可されます。これにより、サービスの変更、DLLハイジャックの実行、さまざまな他の技術の中で、イメージファイル実行オプションを介してデバッガを設定するなど、特権昇格の可能性が広がります。
SeCreateTokenPrivilege
SeCreateTokenPrivilegeは強力な権限であり、特にユーザーがトークンを偽装する能力を持っている場合に便利ですが、SeImpersonatePrivilegeがない場合にも有用です。この能力は、同じユーザーを表すトークンを偽装する能力に依存し、その整合性レベルが現在のプロセスの整合性レベルを超えないことが条件です。
重要なポイント:
SeImpersonatePrivilegeなしの偽装: 特定の条件下でトークンを偽装するためにSeCreateTokenPrivilegeを利用することが可能です。
トークン偽装の条件: 成功する偽装には、ターゲットトークンが同じユーザーに属し、整合性レベルが偽装を試みるプロセスの整合性レベル以下である必要があります。
偽装トークンの作成と変更: ユーザーは偽装トークンを作成し、特権グループのSID(セキュリティ識別子)を追加することで強化できます。
SeLoadDriverPrivilege
この特権により、特定の値を持つレジストリエントリを作成することでデバイスドライバをロードおよびアンロードすることができます。HKLM
(HKEY_LOCAL_MACHINE)への直接書き込みアクセスが制限されているため、HKCU
(HKEY_CURRENT_USER)を代わりに使用する必要があります。ただし、ドライバ設定のためにHKCU
をカーネルに認識させるには、特定のパスに従う必要があります。
このパスは\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
であり、<RID>
は現在のユーザーの相対識別子です。HKCU
内にこの全パスを作成し、2つの値を設定する必要があります:
ImagePath
、実行されるバイナリへのパスType
、値はSERVICE_KERNEL_DRIVER
(0x00000001
)。
従うべき手順:
制限された書き込みアクセスのために
HKLM
の代わりにHKCU
にアクセスします。HKCU
内に\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
のパスを作成します。ここで、<RID>
は現在のユーザーの相対識別子を表します。ImagePath
をバイナリの実行パスに設定します。Type
をSERVICE_KERNEL_DRIVER
(0x00000001
)として割り当てます。
More ways to abuse this privilege in https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege
SeTakeOwnershipPrivilege
これはSeRestorePrivilegeに似ています。その主な機能は、プロセスがオブジェクトの所有権を引き継ぐことを可能にし、WRITE_OWNERアクセス権の提供を通じて明示的な裁量的アクセスの要件を回避します。このプロセスは、まず書き込み目的のために対象のレジストリキーの所有権を確保し、その後DACLを変更して書き込み操作を有効にすることを含みます。
SeDebugPrivilege
この特権は、他のプロセスをデバッグすることを許可し、メモリの読み書きが可能です。この特権を使用して、ほとんどのアンチウイルスおよびホスト侵入防止ソリューションを回避できるメモリ注入のさまざまな戦略を実行できます。
メモリのダンプ
ProcDumpを使用して、SysInternals Suiteからプロセスのメモリをキャプチャできます。具体的には、ユーザーがシステムに正常にログインした後にユーザーの資格情報を保存するローカルセキュリティ機関サブシステムサービス(LSASS**)**プロセスに適用できます。
その後、このダンプをmimikatzにロードしてパスワードを取得できます:
RCE
NT SYSTEM
シェルを取得したい場合は、次のものを使用できます:
権限を確認する
無効として表示されるトークンは有効にすることができ、実際に_有効_および_無効_トークンを悪用することができます。
すべてのトークンを有効にする
トークンが無効になっている場合は、スクリプトEnableAllTokenPrivs.ps1を使用してすべてのトークンを有効にできます:
Or the script embed in this post.
Table
Full token privileges cheatsheet at https://github.com/gtworek/Priv2Admin, summary below will only list direct ways to exploit the privilege to obtain an admin session or read sensitive files.
Privilege | Impact | Tool | Execution path | Remarks |
---|---|---|---|---|
| Admin | 3rd party tool | "ユーザーがトークンを偽装し、potato.exe、rottenpotato.exe、juicypotato.exeなどのツールを使用してntシステムに昇格することを可能にします" | Thank you Aurélien Chalot for the update. I will try to re-phrase it to something more recipe-like soon. |
| Threat | Built-in commands |
| - %WINDIR%\MEMORY.DMPを読み取ることができる場合、より興味深いかもしれません
- |
| Admin | 3rd party tool |
| |
| Admin | PowerShell |
| Script to be found at FuzzySecurity |
| Admin | 3rd party tool | 1. | 1. |
| Admin | PowerShell | 1. SeRestore特権を持つ状態でPowerShell/ISEを起動します。 2. Enable-SeRestorePrivilegeで特権を有効にします。 3. utilman.exeをutilman.oldに名前変更します。 4. cmd.exeをutilman.exeに名前変更します。 5. コンソールをロックし、Win+Uを押します。 | 攻撃は一部のAVソフトウェアによって検出される可能性があります。 代替方法は、同じ特権を使用して「Program Files」に保存されたサービスバイナリを置き換えることに依存します。 |
| Admin | Built-in commands | 1. | 攻撃は一部のAVソフトウェアによって検出される可能性があります。 代替方法は、同じ特権を使用して「Program Files」に保存されたサービスバイナリを置き換えることに依存します。 |
| Admin | 3rd party tool | トークンを操作してローカル管理者権限を含める。SeImpersonateが必要な場合があります。 確認が必要です。 |
Reference
Take a look to this table defining Windows tokens: https://github.com/gtworek/Priv2Admin
Take a look to this paper about privesc with tokens.
Last updated