Active Directory Methodology
Reading time: 62 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本概要
Active Directoryは、ネットワーク管理者がネットワーク内でドメイン、ユーザー、およびオブジェクトを効率的に作成および管理できる基盤技術として機能します。これはスケーラブルに設計されており、膨大な数のユーザーを管理可能なグループおよびサブグループに整理し、さまざまなレベルでアクセス権を制御します。
Active Directoryの構造は、ドメイン、ツリー、およびフォレストの3つの主要な層で構成されています。ドメインは、共通のデータベースを共有するユーザーやデバイスなどのオブジェクトのコレクションを含みます。ツリーは、共有構造によってリンクされたこれらのドメインのグループであり、フォレストは、相互に信頼関係を持つ複数のツリーのコレクションを表し、組織構造の最上層を形成します。特定のアクセスおよび通信権は、これらの各レベルで指定できます。
Active Directory内の主要な概念には以下が含まれます:
- ディレクトリ – Active Directoryオブジェクトに関するすべての情報を保持します。
- オブジェクト – ディレクトリ内のエンティティを示し、ユーザー、グループ、または共有フォルダーを含みます。
- ドメイン – ディレクトリオブジェクトのコンテナとして機能し、複数のドメインがフォレスト内で共存でき、それぞれが独自のオブジェクトコレクションを維持します。
- ツリー – 共通のルートドメインを共有するドメインのグループです。
- フォレスト – Active Directoryにおける組織構造の頂点であり、信頼関係を持ついくつかのツリーで構成されています。
**Active Directory Domain Services (AD DS)**は、ネットワーク内での集中管理および通信に不可欠な一連のサービスを含みます。これらのサービスは以下を含みます:
- ドメインサービス – データストレージを集中化し、ユーザーとドメイン間の相互作用を管理し、認証および検索機能を含みます。
- 証明書サービス – 安全なデジタル証明書の作成、配布、および管理を監督します。
- 軽量ディレクトリサービス – LDAPプロトコルを通じてディレクトリ対応アプリケーションをサポートします。
- ディレクトリフェデレーションサービス – 複数のWebアプリケーションでユーザーを認証するためのシングルサインオン機能を提供します。
- 権利管理 – 著作権資料を保護するために、その無許可の配布および使用を規制します。
- DNSサービス – ドメイン名の解決に不可欠です。
詳細な説明については、TechTerms - Active Directory Definitionを確認してください。
Kerberos認証
ADを攻撃する方法を学ぶには、Kerberos認証プロセスを非常によく理解する必要があります。
まだその仕組みがわからない場合はこのページを読んでください。
チートシート
https://wadcoms.github.io/にアクセスして、ADを列挙/悪用するために実行できるコマンドの概要を素早く確認できます。
warning
Kerberos通信は、アクションを実行するために**完全修飾名 (FQDN)**を必要とします。IPアドレスでマシンにアクセスしようとすると、NTLMを使用し、Kerberosは使用されません。
Recon Active Directory (クレデンシャル/セッションなし)
AD環境にアクセスできるが、クレデンシャル/セッションがない場合は、次のことができます:
- ネットワークのペンテスト:
- ネットワークをスキャンし、マシンとオープンポートを見つけ、そこから脆弱性を悪用したり、クレデンシャルを抽出したりします(例えば、プリンターは非常に興味深いターゲットになる可能性があります)。
- DNSを列挙することで、ドメイン内の主要なサーバーに関する情報を得ることができます。ウェブ、プリンター、共有、VPN、メディアなど。
gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt
- 一般的なペンテスト手法を確認して、これを行う方法に関する詳細情報を見つけてください。
- smbサービスでのnullおよびGuestアクセスを確認(これは最新のWindowsバージョンでは機能しません):
enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>
smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>
smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //
- SMBサーバーを列挙する方法に関する詳細なガイドはここにあります:
- Ldapを列挙
nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>
- LDAPを列挙する方法に関する詳細なガイドはここにあります(匿名アクセスに特に注意してください):
389, 636, 3268, 3269 - Pentesting LDAP
- ネットワークを毒する
- Responderを使用してサービスを偽装してクレデンシャルを収集
- リレー攻撃を悪用してホストにアクセス
- 偽のUPnPサービスを公開してクレデンシャルを収集SDP
- OSINT:
- 内部文書、ソーシャルメディア、サービス(主にウェブ)からユーザー名/名前を抽出し、公開されている情報からも収集します。
- 会社の従業員の完全な名前が見つかった場合、さまざまなADのユーザー名の慣習を試すことができます(これを読む)。最も一般的な慣習は:NameSurname、Name.Surname、NamSur(各3文字)、Nam.Sur、NSurname、N.Surname、SurnameName、Surname.Name、SurnameN、Surname.N、3つの_ランダムな文字と3つのランダムな数字_(abc123)です。
- ツール:
- w0Tx/generate-ad-username
- urbanadventurer/username-anarchy
ユーザー列挙
- 匿名SMB/LDAP列挙: ペンテストSMBおよびペンテストLDAPページを確認してください。
- Kerbrute列挙: 無効なユーザー名が要求されると、サーバーはKerberosエラーコード_KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_を使用して応答し、ユーザー名が無効であることを判断できます。有効なユーザー名は、AS-REP応答でTGTを引き起こすか、エラー_KRB5KDC_ERR_PREAUTH_REQUIRED_を示し、ユーザーが事前認証を行う必要があることを示します。
- MS-NRPCに対する認証なし: ドメインコントローラーのMS-NRPC(Netlogon)インターフェースに対してauth-level = 1(認証なし)を使用します。この方法は、MS-NRPCインターフェースにバインドした後、
DsrGetDcNameEx2
関数を呼び出して、ユーザーまたはコンピュータが存在するかどうかを確認します。クレデンシャルなしで。 NauthNRPCツールは、このタイプの列挙を実装しています。研究はこちらで見つけることができます。
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
nmap -p 88 --script=krb5-enum-users --script-args="krb5-enum-users.realm='DOMAIN'" <IP>
Nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm='<domain>',userdb=/root/Desktop/usernames.txt <IP>
msf> use auxiliary/gather/kerberos_enumusers
crackmapexec smb dominio.es -u '' -p '' --users | awk '{print $4}' | uniq
python3 nauth.py -t target -u users_file.txt #From https://github.com/sud0Ru/NauthNRPC
- OWA (Outlook Web Access) サーバー
ネットワーク内にこれらのサーバーの1つを見つけた場合、ユーザー列挙を実行することもできます。たとえば、ツールMailSniperを使用できます:
ipmo C:\Tools\MailSniper\MailSniper.ps1
# Get info about the domain
Invoke-DomainHarvestOWA -ExchHostname [ip]
# Enumerate valid users from a list of potential usernames
Invoke-UsernameHarvestOWA -ExchHostname [ip] -Domain [domain] -UserList .\possible-usernames.txt -OutFile valid.txt
# Password spraying
Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summer2021
# Get addresses list from the compromised mail
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
warning
ユーザー名のリストはこのgithubリポジトリやこのリポジトリ(統計的に可能性のあるユーザー名)で見つけることができます。
ただし、事前に実施したリコンステップから会社で働いている人々の名前を持っている必要があります。名前と姓があれば、スクリプトnamemash.pyを使用して、潜在的な有効なユーザー名を生成できます。
1つまたは複数のユーザー名を知っている場合
さて、有効なユーザー名がすでにあるがパスワードがない場合... 次のことを試してください:
- ASREPRoast: ユーザーが**DONT_REQ_PREAUTH属性を持っていない場合、そのユーザーのためにAS_REPメッセージを要求**でき、そのメッセージにはユーザーのパスワードの派生によって暗号化されたデータが含まれます。
- Password Spraying: 発見した各ユーザーに対して最も一般的なパスワードを試してみましょう。もしかしたら、あるユーザーが悪いパスワードを使用しているかもしれません(パスワードポリシーに注意してください!)。
- OWAサーバーをスプレーして、ユーザーのメールサーバーにアクセスを試みることもできます。
Password Spraying / Brute Force
LLMNR/NBT-NS ポイズニング
ネットワークのプロトコルをポイズニングすることで、いくつかのチャレンジハッシュを取得できるかもしれません:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks
NTLM リレー
アクティブディレクトリを列挙できた場合、より多くのメールとネットワークの理解が得られます。NTLMのリレー攻撃を強制してAD環境にアクセスできるかもしれません。
NTLM クレデンシャルの盗難
nullまたはゲストユーザーで他のPCや共有にアクセスできる場合、ファイルを配置(SCFファイルなど)して、何らかの形でアクセスされるとNTLM認証をトリガーし、NTLMチャレンジを盗むことができます:
認証情報/セッションを使用したアクティブディレクトリの列挙
このフェーズでは、有効なドメインアカウントの認証情報またはセッションを侵害している必要があります。 有効な認証情報またはドメインユーザーとしてのシェルがある場合、前に示したオプションは他のユーザーを侵害するためのオプションとして依然として有効です。
認証された列挙を開始する前に、Kerberosダブルホップ問題が何であるかを知っておく必要があります。
列挙
アカウントを侵害することは、ドメイン全体を侵害するための大きなステップです。なぜなら、アクティブディレクトリの列挙を開始できるからです:
ASREPRoastに関しては、今やすべての脆弱なユーザーを見つけることができ、Password Sprayingに関しては、すべてのユーザー名のリストを取得し、侵害されたアカウントのパスワード、空のパスワード、新しい有望なパスワードを試すことができます。
- CMDを使用して基本的なリコンを実行できます。
- リコンのためにPowerShellを使用することもでき、よりステルス性があります。
- より詳細な情報を抽出するためにPowerViewを使用することもできます。
- アクティブディレクトリのリコンにおいてもう1つの素晴らしいツールはBloodHoundです。これはあまりステルス性がありません(使用する収集方法によります)が、それを気にしないのであれば、ぜひ試してみるべきです。ユーザーがRDPできる場所を見つけたり、他のグループへのパスを見つけたりします。
- 他の自動化されたAD列挙ツールは: AD Explorer、 ADRecon、 Group3r、 PingCastleです。
- ADのDNSレコードは、興味深い情報を含んでいるかもしれません。
- ディレクトリを列挙するために使用できるGUIツールは、SysInternalスイートのAdExplorer.exeです。
- ldapsearchを使用してLDAPデータベースを検索し、_userPassword_および_unixUserPassword_フィールド、または_Description_を探すことができます。cf. PayloadsAllTheThingsのADユーザーコメントのパスワードで他の方法を確認してください。
- Linuxを使用している場合、pywerviewを使用してドメインを列挙することもできます。
- 自動化ツールを試すこともできます:
- tomcarver16/ADSearch
- 61106960/adPEAS
- すべてのドメインユーザーを抽出する
Windowsからすべてのドメインユーザー名を取得するのは非常に簡単です(net user /domain
、Get-DomainUser
またはwmic useraccount get name,sid
)。Linuxでは、次のように使用できます:GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username
またはenum4linux -a -u "user" -p "password" <DC IP>
。
この列挙セクションは小さく見えるかもしれませんが、これはすべての中で最も重要な部分です。リンク(特にcmd、powershell、powerview、BloodHoundのリンク)にアクセスし、ドメインを列挙する方法を学び、快適に感じるまで練習してください。評価中、これはDAへの道を見つけるための重要な瞬間になるか、何もできないと判断する瞬間になります。
Kerberoast
Kerberoastingは、ユーザーアカウントに関連付けられたサービスによって使用されるTGSチケットを取得し、その暗号化をクラックすることを含みます—これはユーザーパスワードに基づいており、オフラインで行われます。
詳細については:
リモート接続(RDP、SSH、FTP、Win-RMなど)
いくつかの認証情報を取得したら、マシンへのアクセスがあるかどうかを確認できます。そのために、CrackMapExecを使用して、ポートスキャンに応じて異なるプロトコルで複数のサーバーに接続を試みることができます。
ローカル特権昇格
通常のドメインユーザーとしての認証情報またはセッションを侵害し、ドメイン内の任意のマシンにこのユーザーでアクセスできる場合、ローカルで特権を昇格させ、認証情報を探す方法を見つけるべきです。これは、ローカル管理者権限がないと、他のユーザーのハッシュをメモリ(LSASS)やローカル(SAM)でダンプできないためです。
この本には、Windowsにおけるローカル特権昇格に関する完全なページとチェックリストがあります。また、WinPEASを使用することを忘れないでください。
現在のセッションチケット
予期しないリソースにアクセスする権限を与えるチケットを現在のユーザーで見つけることは非常に可能性が低いですが、確認することができます:
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
## Dump the interesting one by luid
.\Rubeus.exe dump /service:krbtgt /luid:<luid> /nowrap
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("<BASE64_TICKET>"))
NTLM Relay
Active Directoryを列挙できた場合、より多くのメールとネットワークの理解が得られます。NTLM リレー攻撃を強制することができるかもしれません。
コンピュータ共有内のクレデンシャルを探す | SMB共有
基本的なクレデンシャルを持っているので、AD内で共有されている興味深いファイルを見つけることができるか確認するべきです。手動で行うこともできますが、非常に退屈で繰り返しの作業です(特に確認する必要のある数百のドキュメントを見つけた場合はなおさらです)。
使用できるツールについて学ぶにはこのリンクをフォローしてください。
NTLMクレデンシャルを盗む
他のPCや共有にアクセスできる場合、ファイル(SCFファイルなど)を配置することができ、何らかの形でアクセスされると、あなたに対してNTLM認証をトリガーするので、NTLMチャレンジを盗むことができます:
CVE-2021-1675/CVE-2021-34527 PrintNightmare
この脆弱性により、認証された任意のユーザーがドメインコントローラーを侵害することができました。
特権のあるクレデンシャル/セッションを使用したActive Directoryの特権昇格
以下の技術には、通常のドメインユーザーでは不十分で、これらの攻撃を実行するために特別な特権/クレデンシャルが必要です。
ハッシュ抽出
幸運にも、AsRepRoast、Password Spraying、Kerberoast、Responderを含むリレー、EvilSSDP、ローカルでの特権昇格を使用して、ローカル管理者アカウントを侵害できたことを願っています。
次に、メモリとローカルのすべてのハッシュをダンプする時です。
ハッシュを取得するさまざまな方法についてこのページをお読みください。
パス・ザ・ハッシュ
ユーザーのハッシュを取得したら、それを使用してなりすますことができます。
そのハッシュを使用してNTLM認証を実行するツールを使用する必要があります。または、新しいsessionlogonを作成し、そのハッシュをLSASS内に注入することができます。これにより、NTLM認証が実行されると、そのハッシュが使用されます。**最後のオプションはmimikatzが行うことです。
詳細についてはこのページをお読みください。
オーバーパス・ザ・ハッシュ/パス・ザ・キー
この攻撃は、ユーザーのNTLMハッシュを使用してKerberosチケットを要求することを目的としています。これは、一般的なNTLMプロトコルを介したパス・ザ・ハッシュの代替手段です。したがって、これは特にNTLMプロトコルが無効で、Kerberosのみが認証プロトコルとして許可されているネットワークで役立つ可能性があります。
Over Pass the Hash/Pass the Key
パス・ザ・チケット
パス・ザ・チケット(PTT)攻撃手法では、攻撃者はユーザーの認証チケットを盗む代わりに、パスワードやハッシュ値を盗みます。この盗まれたチケットは、その後ユーザーになりすますために使用され、ネットワーク内のリソースやサービスへの不正アクセスを得ることができます。
クレデンシャルの再利用
ローカル管理者のハッシュまたはパスワードを持っている場合は、それを使用して他のPCにローカルでログインしてみるべきです。
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
warning
注意してください、これは非常に騒がしいものであり、LAPSが軽減します。
MSSQLの悪用と信頼されたリンク
ユーザーがMSSQLインスタンスにアクセスする権限を持っている場合、MSSQLホストでコマンドを実行したり(SAとして実行されている場合)、NetNTLMのハッシュを盗むことができたり、リレー攻撃を行うことができるかもしれません。
また、MSSQLインスタンスが別のMSSQLインスタンスによって信頼されている場合(データベースリンク)。ユーザーが信頼されたデータベースに対する権限を持っている場合、信頼関係を利用して他のインスタンスでもクエリを実行することができます。これらの信頼は連鎖することができ、ユーザーはコマンドを実行できる誤設定されたデータベースを見つけることができるかもしれません。
データベース間のリンクは、フォレストの信頼を越えても機能します。
制約のない委任
ADS_UF_TRUSTED_FOR_DELEGATION属性を持つコンピュータオブジェクトを見つけ、コンピュータにドメイン権限がある場合、コンピュータにログインするすべてのユーザーのメモリからTGTをダンプすることができます。
したがって、ドメイン管理者がコンピュータにログインすると、そのTGTをダンプしてPass the Ticketを使用して彼を偽装することができます。
制約のある委任のおかげで、プリントサーバーを自動的に侵害することさえ可能です(できればDCであることを願っています)。
制約された委任
ユーザーまたはコンピュータが「制約された委任」を許可されている場合、コンピュータ内のいくつかのサービスにアクセスするために任意のユーザーを偽装することができます。
その後、もしこのユーザー/コンピュータのハッシュを侵害すれば、任意のユーザー(ドメイン管理者を含む)を偽装していくつかのサービスにアクセスすることができます。
リソースベースの制約された委任
リモートコンピュータのActive Directoryオブジェクトに対してWRITE権限を持つことは、昇格された権限でのコード実行を可能にします:
Resource-based Constrained Delegation
権限/ACLの悪用
侵害されたユーザーは、ドメインオブジェクトに対して興味深い権限を持っている可能性があり、それにより横移動や権限の昇格が可能になります。
Abusing Active Directory ACLs/ACEs
プリンタースプーラーサービスの悪用
ドメイン内でスプールサービスがリスニングしていることを発見することは、新しい資格情報を取得し、権限を昇格させるために悪用される可能性があります。
Force NTLM Privileged Authentication
第三者セッションの悪用
他のユーザーが侵害されたマシンにアクセスすると、メモリから資格情報を収集し、彼らのプロセスにビーコンを注入して彼らを偽装することが可能です。
通常、ユーザーはRDPを介してシステムにアクセスするため、ここでは第三者のRDPセッションに対していくつかの攻撃を実行する方法を示します:
LAPS
LAPSは、ドメインに参加しているコンピュータ上のローカル管理者パスワードを管理するためのシステムを提供し、それがランダム化され、ユニークで、頻繁に変更されることを保証します。これらのパスワードはActive Directoryに保存され、アクセスは認可されたユーザーのみにACLを通じて制御されます。これらのパスワードにアクセスするための十分な権限があれば、他のコンピュータへのピボットが可能になります。
証明書の盗難
侵害されたマシンから証明書を収集することは、環境内で権限を昇格させる方法となる可能性があります:
証明書テンプレートの悪用
脆弱なテンプレートが設定されている場合、それを悪用して権限を昇格させることが可能です:
高権限アカウントによるポストエクスプロイト
ドメイン資格情報のダンプ
ドメイン管理者またはさらに良いエンタープライズ管理者の権限を取得すると、ドメインデータベースをダンプできます:ntds.dit。
権限昇格としての持続性
前述のいくつかの技術は持続性のために使用できます。
例えば、次のことができます:
- ユーザーをKerberoastに対して脆弱にする
Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}r
- ユーザーをASREPRoastに対して脆弱にする
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
- ユーザーにDCSync権限を付与する
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
シルバーチケット
シルバーチケット攻撃は、特定のサービスのために正当なチケット授与サービス(TGS)チケットをNTLMハッシュを使用して作成します(例えば、PCアカウントのハッシュ)。この方法は、サービス権限にアクセスするために使用されます。
ゴールデンチケット
ゴールデンチケット攻撃は、攻撃者がActive Directory(AD)環境内のkrbtgtアカウントのNTLMハッシュにアクセスすることを含みます。このアカウントは特別で、すべての**チケット授与チケット(TGT)**に署名するために使用され、ADネットワーク内での認証に不可欠です。
攻撃者がこのハッシュを取得すると、任意のアカウントのTGTを作成することができます(シルバーチケット攻撃)。
ダイヤモンドチケット
これらは、一般的なゴールデンチケットの検出メカニズムを回避する方法で偽造されたゴールデンチケットのようなものです。
証明書アカウントの持続性
アカウントの証明書を持っているか、要求できることは、ユーザーアカウントに持続するための非常に良い方法です(たとえ彼がパスワードを変更しても):
証明書ドメインの持続性
証明書を使用することは、ドメイン内で高権限を持続することも可能です:
AdminSDHolderグループ
Active Directory内のAdminSDHolderオブジェクトは、特権グループ(ドメイン管理者やエンタープライズ管理者など)のセキュリティを確保するために、これらのグループ全体に標準の**アクセス制御リスト(ACL)**を適用して、無許可の変更を防ぎます。しかし、この機能は悪用される可能性があります。攻撃者がAdminSDHolderのACLを変更して通常のユーザーに完全なアクセスを与えると、そのユーザーはすべての特権グループに対して広範な制御を得ることになります。このセキュリティ対策は保護を目的としていますが、厳重に監視されない限り、無許可のアクセスを許すことになります。
AdminDSHolderグループに関する詳細情報はここにあります。
DSRM資格情報
すべてのドメインコントローラー(DC)内には、ローカル管理者アカウントが存在します。このようなマシンで管理者権限を取得することで、mimikatzを使用してローカル管理者のハッシュを抽出できます。その後、このパスワードを使用可能にするためのレジストリ変更が必要で、ローカル管理者アカウントへのリモートアクセスを可能にします。
ACL持続性
特定のドメインオブジェクトに対して特別な権限をユーザーに与えることで、そのユーザーが将来的に権限を昇格させることができるようになります。
Abusing Active Directory ACLs/ACEs
セキュリティ記述子
セキュリティ記述子は、オブジェクトがオブジェクトに対して持つ権限を保存するために使用されます。オブジェクトのセキュリティ記述子に少し変更を加えることができれば、そのオブジェクトに対して特権グループのメンバーである必要なく、非常に興味深い権限を取得できます。
スケルトンキー
LSASSをメモリ内で変更して、すべてのドメインアカウントにアクセスを許可するユニバーサルパスワードを確立します。
カスタムSSP
SSP(セキュリティサポートプロバイダー)についてはこちらで学んでください。
自分のSSPを作成して、マシンにアクセスするために使用される資格情報を平文でキャプチャすることができます。
DCShadow
ADに新しいドメインコントローラーを登録し、指定されたオブジェクトに属性(SIDHistory、SPNsなど)をプッシュするために使用しますが、変更に関するログを残さずに行います。DA権限が必要で、ルートドメイン内にいる必要があります。
間違ったデータを使用すると、非常に醜いログが表示されることに注意してください。
LAPS持続性
以前に、LAPSパスワードを読むための十分な権限がある場合に権限を昇格させる方法について説明しました。しかし、これらのパスワードは持続性を維持するためにも使用できます。
確認してください:
フォレスト権限昇格 - ドメイン信頼
Microsoftはフォレストをセキュリティ境界と見なしています。これは、単一のドメインを侵害することが、フォレスト全体の侵害につながる可能性があることを意味します。
基本情報
ドメイン信頼は、あるドメインのユーザーが別のドメインのリソースにアクセスできるようにするセキュリティメカニズムです。これは、2つのドメインの認証システム間にリンクを作成し、認証確認がシームレスに流れることを可能にします。ドメインが信頼を設定すると、特定のキーを**ドメインコントローラー(DC)**内で交換し保持します。これは信頼の整合性にとって重要です。
典型的なシナリオでは、ユーザーが信頼されたドメインのサービスにアクセスしようとする場合、まず自分のドメインのDCからインターレルムTGTと呼ばれる特別なチケットを要求する必要があります。このTGTは、両方のドメインが合意した共有キーで暗号化されています。ユーザーはこのTGTを信頼されたドメインのDCに提示してサービスチケット(TGS)を取得します。信頼されたドメインのDCによってインターレルムTGTが正常に検証されると、TGSが発行され、ユーザーはサービスにアクセスできるようになります。
手順:
- ドメイン1のクライアントコンピュータが、**ドメインコントローラー(DC1)からチケット授与チケット(TGT)**を要求するプロセスを開始します。
- クライアントが正常に認証されると、DC1は新しいTGTを発行します。
- クライアントは次に、ドメイン2のリソースにアクセスするために必要なインターレルムTGTをDC1に要求します。
- インターレルムTGTは、DC1とDC2の間で共有された信頼キーで暗号化されています。
- クライアントはインターレルムTGTを**ドメイン2のドメインコントローラー(DC2)**に持っていきます。
- DC2は、共有信頼キーを使用してインターレルムTGTを検証し、有効であれば、クライアントがアクセスしたいドメイン2のサーバーのために**チケット授与サービス(TGS)**を発行します。
- 最後に、クライアントはこのTGSをサーバーに提示し、サーバーのアカウントハッシュで暗号化されているため、ドメイン2のサービスにアクセスします。
異なる信頼
信頼は1方向または2方向であることに注意することが重要です。2方向のオプションでは、両方のドメインが互いに信頼しますが、1方向の信頼関係では、1つのドメインが信頼されたドメインであり、もう1つが信頼するドメインです。この場合、信頼されたドメインから信頼するドメイン内のリソースにのみアクセスできます。
ドメインAがドメインBを信頼している場合、Aは信頼するドメインであり、Bは信頼されたドメインです。さらに、ドメインAでは、これはアウトバウンド信頼であり、ドメインBでは、これはインバウンド信頼です。
異なる信頼関係
- 親子信頼:これは同じフォレスト内で一般的な設定であり、子ドメインは自動的に親ドメインとの双方向の推移的信頼を持ちます。基本的に、これは認証要求が親と子の間でシームレスに流れることを意味します。
- クロスリンク信頼:これは「ショートカット信頼」と呼ばれ、子ドメイン間で設立され、参照プロセスを迅速化します。複雑なフォレストでは、認証参照は通常、フォレストのルートまで上昇し、ターゲットドメインまで下降する必要があります。クロスリンクを作成することで、旅が短縮され、特に地理的に分散した環境で有益です。
- 外部信頼:これは異なる、無関係なドメイン間で設定され、性質上非推移的です。Microsoftのドキュメントによると、外部信頼は、現在のフォレスト外のドメインのリソースにアクセスするために便利であり、フォレスト信頼で接続されていないドメインに対して有効です。外部信頼ではSIDフィルタリングを通じてセキュリティが強化されます。
- ツリー根信頼:これらの信頼は、フォレストのルートドメインと新しく追加されたツリーのルート間で自動的に確立されます。一般的には遭遇しませんが、ツリー根信頼は新しいドメインツリーをフォレストに追加するために重要であり、ユニークなドメイン名を維持し、双方向の推移性を確保します。詳細情報はMicrosoftのガイドで確認できます。
- フォレスト信頼:このタイプの信頼は、2つのフォレストルートドメイン間の双方向推移的信頼であり、セキュリティ対策を強化するためにSIDフィルタリングを施します。
- MIT信頼:これらの信頼は、非WindowsのRF4120準拠のKerberosドメインとの間で確立されます。MIT信頼は、Windowsエコシステム外のKerberosベースのシステムとの統合を必要とする環境に特化しています。
信頼関係の他の違い
- 信頼関係は推移的(AがBを信頼し、BがCを信頼すれば、AがCを信頼する)または非推移的であることができます。
- 信頼関係は双方向信頼(両方が互いに信頼する)または一方向信頼(一方だけが他方を信頼する)として設定できます。
攻撃パス
- 信頼関係を列挙する
- どのセキュリティプリンシパル(ユーザー/グループ/コンピュータ)が他のドメインのリソースにアクセスできるかを確認します。ACEエントリや他のドメインのグループにいることによって、ドメイン間の関係を探します(このために信頼が作成された可能性があります)。
- この場合、kerberoastが別のオプションになる可能性があります。
- アカウントを侵害し、ドメインをピボットします。
攻撃者は、他のドメインのリソースにアクセスするために、主に3つのメカニズムを使用できます:
- ローカルグループメンバーシップ:プリンシパルは、サーバーの「Administrators」グループなどのマシンのローカルグループに追加されることがあり、そのマシンに対して重要な制御を与えます。
- 外国ドメイングループメンバーシップ:プリンシパルは、外国ドメイン内のグループのメンバーでもあります。ただし、この方法の効果は信頼の性質とグループの範囲に依存します。
- アクセス制御リスト(ACL):プリンシパルは、特定のリソースへのアクセスを提供するACL内のACEのエンティティとして指定されることがあります。ACL、DACL、およびACEのメカニズムに深く入りたい方には、ホワイトペーパー「An ACE Up The Sleeve」が貴重なリソースです。
外部ユーザー/グループの権限を見つける
CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com
を確認して、ドメイン内の外国のセキュリティプリンシパルを見つけることができます。これらは外部ドメイン/フォレストのユーザー/グループです。
これをBloodhoundで確認するか、powerviewを使用して確認できます:
# Get users that are i groups outside of the current domain
Get-DomainForeignUser
# Get groups inside a domain with users our
Get-DomainForeignGroupMember
子から親へのフォレスト特権昇格
# Fro powerview
Get-DomainTrust
SourceName : sub.domain.local --> current domain
TargetName : domain.local --> foreign domain
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : WITHIN_FOREST --> WITHIN_FOREST: Both in the same forest
TrustDirection : Bidirectional --> Trust direction (2ways in this case)
WhenCreated : 2/19/2021 1:28:00 PM
WhenChanged : 2/19/2021 1:28:00 PM
ドメイン信頼を列挙する他の方法:
# Get DCs
nltest /dsgetdc:<DOMAIN>
# Get all domain trusts
nltest /domain_trusts /all_trusts /v
# Get all trust of a domain
nltest /dclist:sub.domain.local
nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
warning
2つの信頼されたキーがあります。1つは Child --> Parent 用、もう1つは Parent --> Child 用です。
現在のドメインで使用されているものを確認するには、次のコマンドを実行します:
Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\mcorp$"'
SID-History Injection
SID-Historyインジェクションを悪用して、子/親ドメインにエンタープライズ管理者として昇格します:
書き込み可能なConfiguration NCの悪用
Configuration Naming Context (NC) がどのように悪用されるかを理解することは重要です。Configuration NCは、Active Directory (AD) 環境内のフォレスト全体の構成データの中央リポジトリとして機能します。このデータはフォレスト内のすべてのドメインコントローラー (DC) に複製され、書き込み可能なDCはConfiguration NCの書き込み可能なコピーを保持します。これを悪用するには、DC上でSYSTEM権限を持つ必要があります。できれば子DCが望ましいです。
GPOをルートDCサイトにリンクする
Configuration NCのSitesコンテナには、ADフォレスト内のすべてのドメイン参加コンピュータのサイトに関する情報が含まれています。任意のDCでSYSTEM権限を持って操作することで、攻撃者はGPOをルートDCサイトにリンクできます。このアクションは、これらのサイトに適用されるポリシーを操作することによって、ルートドメインを危険にさらす可能性があります。
詳細情報については、SIDフィルタリングのバイパスに関する研究を参照してください。
フォレスト内の任意のgMSAを妥協する
攻撃ベクトルには、ドメイン内の特権gMSAをターゲットにすることが含まれます。gMSAのパスワードを計算するために必要なKDS Rootキーは、Configuration NC内に保存されています。任意のDCでSYSTEM権限を持つことで、KDS Rootキーにアクセスし、フォレスト内の任意のgMSAのパスワードを計算することが可能です。
詳細な分析は、Golden gMSA Trust Attacksの議論で見つけることができます。
スキーマ変更攻撃
この方法は、新しい特権ADオブジェクトの作成を待つ忍耐が必要です。SYSTEM権限を持つ攻撃者は、ADスキーマを変更して、任意のユーザーにすべてのクラスに対する完全な制御を付与できます。これにより、新しく作成されたADオブジェクトへの不正アクセスと制御が可能になる可能性があります。
さらなる情報は、スキーマ変更信頼攻撃で入手できます。
ADCS ESC5を使用してDAからEAへ
ADCS ESC5の脆弱性は、フォレスト内の任意のユーザーとして認証を可能にする証明書テンプレートを作成するために、公開鍵基盤 (PKI) オブジェクトの制御をターゲットにしています。PKIオブジェクトはConfiguration NCに存在するため、書き込み可能な子DCを妥協することでESC5攻撃を実行できます。
この件に関する詳細は、DAからEAへのESC5で読むことができます。ADCSがないシナリオでは、攻撃者は必要なコンポーネントを設定する能力を持っており、子ドメイン管理者からエンタープライズ管理者への昇格で議論されています。
外部フォレストドメイン - 一方向(インバウンド)または双方向
Get-DomainTrust
SourceName : a.domain.local --> Current domain
TargetName : domain.external --> Destination domain
TrustType : WINDOWS-ACTIVE_DIRECTORY
TrustAttributes :
TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
このシナリオでは、あなたのドメインが外部のドメインによって信頼されています。これにより、不明な権限が与えられます。あなたは、あなたのドメインのどのプリンシパルが外部ドメインに対してどのようなアクセス権を持っているかを見つけ出し、それを悪用しようとする必要があります。
External Forest Domain - OneWay (Inbound) or bidirectional
外部フォレストドメイン - 一方向(アウトバウンド)
Get-DomainTrust -Domain current.local
SourceName : current.local --> Current domain
TargetName : external.local --> Destination domain
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection : Outbound --> Outbound trust
WhenCreated : 2/19/2021 10:15:24 PM
WhenChanged : 2/19/2021 10:15:24 PM
このシナリオでは、あなたのドメインが異なるドメインのプリンシパルに特権を信頼しています。
しかし、ドメインが信頼されると、信頼されたドメインは予測可能な名前のユーザーを作成し、信頼されたパスワードをパスワードとして使用します。これは、信頼するドメインのユーザーにアクセスして信頼されたドメインに入ることが可能であり、それを列挙し、さらに特権を昇格させることを試みることを意味します:
External Forest Domain - One-Way (Outbound)
信頼されたドメインを侵害する別の方法は、ドメイン信頼の反対方向に作成されたSQL信頼リンクを見つけることです(これはあまり一般的ではありません)。
信頼されたドメインを侵害する別の方法は、信頼されたドメインのユーザーがアクセスできるマシンで待機し、RDPを介してログインすることです。次に、攻撃者はRDPセッションプロセスにコードを注入し、そこから被害者の元のドメインにアクセスすることができます。
さらに、被害者がハードドライブをマウントしている場合、攻撃者はRDPセッションプロセスからハードドライブのスタートアップフォルダーにバックドアを保存することができます。この技術はRDPInceptionと呼ばれています。
ドメイン信頼の悪用軽減
SIDフィルタリング:
- SID履歴属性を利用した攻撃のリスクは、すべてのインターフォレスト信頼でデフォルトで有効になっているSIDフィルタリングによって軽減されます。これは、マイクロソフトの見解に従い、フォレストをセキュリティ境界と見なすことから、イントラフォレスト信頼が安全であるという前提に基づいています。
- しかし、注意が必要です:SIDフィルタリングはアプリケーションやユーザーアクセスに影響を与える可能性があり、そのため時折無効にされることがあります。
選択的認証:
- インターフォレスト信頼の場合、選択的認証を使用することで、2つのフォレストのユーザーが自動的に認証されないようにします。代わりに、信頼するドメインまたはフォレスト内のドメインやサーバーにアクセスするためには明示的な権限が必要です。
- これらの対策は、書き込み可能な構成命名コンテキスト(NC)の悪用や信頼アカウントへの攻撃から保護するものではないことに注意が必要です。
AD -> Azure & Azure -> AD
Az AD Connect - Hybrid Identity - HackTricks Cloud
一般的な防御策
資格情報保護のための防御策
- ドメイン管理者の制限:ドメイン管理者はドメインコントローラーにのみログインを許可し、他のホストでの使用を避けることが推奨されます。
- サービスアカウントの特権:サービスはドメイン管理者(DA)特権で実行されるべきではなく、セキュリティを維持する必要があります。
- 一時的特権制限:DA特権を必要とするタスクの期間は制限するべきです。これは次のように実現できます:
Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)
欺瞞技術の実装
- 欺瞞を実装することは、パスワードが期限切れにならないか、委任のために信頼されているとマークされたデコイユーザーやコンピュータを設定することを含みます。詳細なアプローチには、特定の権利を持つユーザーを作成したり、高特権グループに追加したりすることが含まれます。
- 実用的な例として、次のようなツールを使用することが含まれます:
Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose
- 欺瞞技術の展開に関する詳細は、Deploy-Deception on GitHubで見つけることができます。
欺瞞の特定
- ユーザーオブジェクトの場合:疑わしい指標には、異常なObjectSID、稀なログオン、作成日、低い不正パスワードカウントが含まれます。
- 一般的な指標:潜在的なデコイオブジェクトの属性を本物のものと比較することで、不一致を明らかにすることができます。ツールのようなHoneypotBusterは、そのような欺瞞を特定するのに役立ちます。
検出システムの回避
- Microsoft ATA検出回避:
- ユーザー列挙:ドメインコントローラーでのセッション列挙を避け、ATA検出を防ぎます。
- チケットの偽装:チケット作成にaesキーを利用することで、NTLMにダウングレードせずに検出を回避します。
- DCSync攻撃:ATA検出を避けるために、非ドメインコントローラーから実行することが推奨されます。ドメインコントローラーから直接実行するとアラートがトリガーされます。
参考文献
- http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/
- https://www.labofapenetrationtester.com/2018/10/deploy-deception.html
- https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。