Active Directory Methodology
{{#include ../../banners/hacktricks-training.md}}
基本概要
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認証プロセスを非常によく理解する必要があります。
まだその仕組みがわからない場合はこのページを読んでください。
チートシート
ADを列挙/悪用するために実行できるコマンドの概要を迅速に確認するには、https://wadcoms.github.io/を参照してください。
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サーバーを列挙する方法についての詳細なガイドはここにあります:
{{#ref}} ../../network-services-pentesting/pentesting-smb/ {{#endref}}
- Ldapの列挙
nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>- LDAPを列挙する方法についての詳細なガイドはここにあります(匿名アクセスに特に注意してください):
{{#ref}} ../../network-services-pentesting/pentesting-ldap.md {{#endref}}
- ネットワークを毒する
- Responderを使用してサービスを偽装してクレデンシャルを収集
- リレー攻撃を悪用してホストにアクセス
- 悪意のあるUPnPサービスを公開してクレデンシャルを収集SDP
- OSINT:
- 内部文書、ソーシャルメディア、サービス(主にウェブ)からユーザー名/名前を抽出し、ドメイン環境内および公開されているものからも抽出します。
- 会社の従業員の完全な名前が見つかった場合、さまざまなADのユーザー名の慣習を試すことができます(これを読む](https://activedirectorypro.com/active-directory-user-naming-convention/))。最も一般的な慣習は: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_を示し、ユーザーが事前認証を行う必要があることを示します。
./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
- OWA (Outlook Web Access) サーバー
ネットワーク内にこれらのサーバーのいずれかを見つけた場合、ユーザー列挙を実行することもできます。たとえば、ツール 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リポ ****やこのリポ(statistically-likely-usernames)で見つけることができます。
ただし、事前に実施したリコンステップから会社で働いている人々の名前を持っている必要があります。名前と姓があれば、スクリプトnamemash.pyを使用して、潜在的な有効なユーザー名を生成できます。
1つまたは複数のユーザー名を知っている場合
さて、有効なユーザー名はすでに知っているが、パスワードはない場合... 次のことを試してください:
- ASREPRoast: ユーザーが**DONT_REQ_PREAUTH属性を持っていない場合、そのユーザーのためにAS_REPメッセージを要求**でき、ユーザーのパスワードの派生によって暗号化されたデータが含まれます。
- Password Spraying: 発見された各ユーザーに対して最も一般的なパスワードを試してみましょう。もしかしたら、あるユーザーが悪いパスワードを使用しているかもしれません(パスワードポリシーに注意してください!)。
- OWAサーバーをスプレーして、ユーザーのメールサーバーへのアクセスを試みることもできます。
{{#ref}} password-spraying.md {{#endref}}
LLMNR/NBT-NS ポイズニング
ネットワークのプロトコルをポイズニングすることで、いくつかのチャレンジハッシュを取得できるかもしれません:
{{#ref}} ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}}
NTML リレー
アクティブディレクトリを列挙できた場合、より多くのメールとネットワークの理解が得られます。NTML リレー攻撃 ****を強制してAD環境にアクセスできるかもしれません。
NTLM クレデンシャルの盗難
nullまたはゲストユーザーで他のPCや共有にアクセスできる場合、ファイルを配置(SCFファイルなど)して、何らかの形でアクセスされるとNTML認証をトリガーし、NTLMチャレンジを盗むことができます:
{{#ref}} ../ntlm/places-to-steal-ntlm-creds.md {{#endref}}
認証情報/セッションを使用したアクティブディレクトリの列挙
このフェーズでは、有効なドメインアカウントの認証情報またはセッションを侵害している必要があります。 有効な認証情報またはドメインユーザーとしてのシェルがある場合、前に示したオプションは他のユーザーを侵害するためのオプションとして依然として有効です。
認証された列挙を開始する前に、Kerberosダブルホップ問題が何であるかを知っておく必要があります。
{{#ref}} kerberos-double-hop-problem.md {{#endref}}
列挙
アカウントを侵害することは、ドメイン全体を侵害するための大きなステップです。なぜなら、アクティブディレクトリの列挙を開始できるからです:
ASREPRoastに関しては、すべての脆弱なユーザーを見つけることができ、Password Sprayingに関しては、すべてのユーザー名のリストを取得し、侵害されたアカウントのパスワード、空のパスワード、新しい有望なパスワードを試すことができます。
- CMDを使用して基本的なリコンを実行できます。
- PowerShellを使用してリコンすることもでき、よりステルス性があります。
- PowerViewを使用して、より詳細な情報を抽出できます。
- アクティブディレクトリのリコンに最適なツールは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チケットを取得し、その暗号化をクラックすることを含みます—これはユーザーパスワードに基づいており、オフラインで行われます。
これについての詳細は:
{{#ref}} kerberoast.md {{#endref}}
リモート接続(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>"))
NTML Relay
もしあなたがアクティブディレクトリを列挙することに成功したなら、より多くのメールとネットワークの理解を得ることができるでしょう。あなたはNTML リレー攻撃を強制することができるかもしれません。
コンピュータ共有内のクレデンシャルを探す
基本的なクレデンシャルを持っているので、AD内で共有されている興味深いファイルを見つけることができるか確認するべきです。手動で行うこともできますが、非常に退屈で繰り返しの作業です(特にチェックする必要のある数百のドキュメントを見つけた場合はなおさらです)。
使用できるツールについて学ぶにはこのリンクをフォローしてください。
NTLMクレデンシャルを盗む
他のPCや共有にアクセスできる場合、ファイルを配置することができます(SCFファイルのような)それにアクセスされると、あなたに対してNTML認証をトリガーするので、NTLMチャレンジを盗むことができます:
{{#ref}} ../ntlm/places-to-steal-ntlm-creds.md {{#endref}}
CVE-2021-1675/CVE-2021-34527 PrintNightmare
この脆弱性により、認証された任意のユーザーがドメインコントローラーを侵害することができました。
{{#ref}} printnightmare.md {{#endref}}
特権のあるクレデンシャル/セッションを使用したアクティブディレクトリの特権昇格
以下の技術には、通常のドメインユーザーでは不十分で、これらの攻撃を実行するためには特別な特権/クレデンシャルが必要です。
ハッシュ抽出
幸運にも、AsRepRoast、Password Spraying、Kerberoast、Responderを含むリレー、EvilSSDP、ローカルでの特権昇格を使用してローカル管理者アカウントを侵害することに成功したことを願っています。
次に、メモリとローカルのすべてのハッシュをダンプする時です。
ハッシュを取得するためのさまざまな方法についてこのページを読んでください。
パス・ザ・ハッシュ
ユーザーのハッシュを持っている場合、それを使用してなりすますことができます。
そのハッシュを使用してNTLM認証を実行するためのツールを使用する必要があります、または新しいsessionlogonを作成し、そのハッシュをLSASS内に注入することができます。そうすれば、任意のNTLM認証が実行されると、そのハッシュが使用されます。**最後のオプションはmimikatzが行うことです。
詳細についてはこのページを読んでください。
オーバーパス・ザ・ハッシュ/パス・ザ・キー
この攻撃は、ユーザーのNTLMハッシュを使用してKerberosチケットを要求することを目的としています。これは、一般的なNTLMプロトコルを介したパス・ザ・ハッシュの代替手段です。したがって、これは特にNTLMプロトコルが無効にされているネットワークで、Kerberosのみが認証プロトコルとして許可されている場合に役立ちます。
{{#ref}} over-pass-the-hash-pass-the-key.md {{#endref}}
パス・ザ・チケット
パス・ザ・チケット(PTT)攻撃手法では、攻撃者はユーザーの認証チケットを盗む代わりに、パスワードやハッシュ値を盗みます。この盗まれたチケットは、その後ユーザーになりすますために使用され、ネットワーク内のリソースやサービスへの不正アクセスを得ることができます。
{{#ref}} pass-the-ticket.md {{#endref}}
クレデンシャルの再利用
ローカル管理者のハッシュまたはパスワードを持っている場合は、それを使用して他の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インスタンスによって信頼されている場合(データベースリンク)。ユーザーが信頼されたデータベースに対する権限を持っている場合、信頼関係を利用して他のインスタンスでもクエリを実行することができます。これらの信頼は連鎖することができ、ユーザーはコマンドを実行できる誤って構成されたデータベースを見つけることができるかもしれません。
データベース間のリンクは、フォレストの信頼を越えても機能します。
{{#ref}} abusing-ad-mssql.md {{#endref}}
制約のない委任
ADS_UF_TRUSTED_FOR_DELEGATION属性を持つコンピュータオブジェクトを見つけ、コンピュータにドメイン権限がある場合、コンピュータにログインするすべてのユーザーのTGTをメモリからダンプすることができます。
したがって、ドメイン管理者がコンピュータにログインすると、そのTGTをダンプしてPass the Ticketを使用して彼を偽装することができます。
制約付き委任のおかげで、プリントサーバーを自動的に侵害することさえ可能です(できればDCであることを願っています)。
{{#ref}} unconstrained-delegation.md {{#endref}}
制約付き委任
ユーザーまたはコンピュータが「制約付き委任」を許可されている場合、コンピュータ内のいくつかのサービスにアクセスするために任意のユーザーを偽装することができます。
その後、このユーザー/コンピュータのハッシュを侵害すると、任意のユーザー(ドメイン管理者を含む)を偽装していくつかのサービスにアクセスすることができます。
{{#ref}} constrained-delegation.md {{#endref}}
リソースベースの制約付き委任
リモートコンピュータのActive Directoryオブジェクトに対してWRITE権限を持つことは、昇格された権限でのコード実行を可能にします:
{{#ref}} resource-based-constrained-delegation.md {{#endref}}
ACLの悪用
侵害されたユーザーは、ドメインオブジェクトに対していくつかの興味深い権限を持っている可能性があり、それにより横移動や権限の昇格が可能になります。
{{#ref}} acl-persistence-abuse/ {{#endref}}
プリンタースプーラーサービスの悪用
ドメイン内でスプールサービスがリスニングしていることを発見することは、新しい資格情報を取得し、権限を昇格させるために悪用される可能性があります。
{{#ref}} printers-spooler-service-abuse.md {{#endref}}
第三者セッションの悪用
他のユーザーが侵害されたマシンにアクセスすると、メモリから資格情報を収集し、さらには彼らのプロセスにビーコンを注入して彼らを偽装することが可能です。
通常、ユーザーはRDPを介してシステムにアクセスするため、ここでは第三者RDPセッションに対していくつかの攻撃を実行する方法を示します:
{{#ref}} rdp-sessions-abuse.md {{#endref}}
LAPS
LAPSは、ドメインに参加しているコンピュータ上のローカル管理者パスワードを管理するためのシステムを提供し、それがランダム化され、ユニークで、頻繁に変更されることを保証します。これらのパスワードはActive Directoryに保存され、アクセスはACLを通じて認可されたユーザーのみに制御されます。これらのパスワードにアクセスするための十分な権限があれば、他のコンピュータへのピボットが可能になります。
{{#ref}} laps.md {{#endref}}
証明書の盗難
侵害されたマシンから証明書を収集することは、環境内で権限を昇格させる方法となる可能性があります:
{{#ref}} ad-certificates/certificate-theft.md {{#endref}}
証明書テンプレートの悪用
脆弱なテンプレートが構成されている場合、それを悪用して権限を昇格させることが可能です:
{{#ref}} ad-certificates/domain-escalation.md {{#endref}}
高権限アカウントによるポストエクスプロイト
ドメイン資格情報のダンプ
ドメイン管理者またはさらに良いエンタープライズ管理者の権限を取得すると、ドメインデータベースをダンプできます: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アカウントのハッシュ)を使用して作成します。この方法は、サービス権限にアクセスするために使用されます。
{{#ref}} silver-ticket.md {{#endref}}
ゴールデンチケット
ゴールデンチケット攻撃は、攻撃者がActive Directory(AD)環境内のkrbtgtアカウントのNTLMハッシュにアクセスすることを含みます。このアカウントは特別で、すべての**チケットグラントチケット(TGT)**に署名するために使用され、ADネットワーク内での認証に不可欠です。
攻撃者がこのハッシュを取得すると、任意のアカウントのためにTGTを作成することができます(シルバーチケット攻撃)。
{{#ref}} golden-ticket.md {{#endref}}
ダイヤモンドチケット
これらは、一般的なゴールデンチケット検出メカニズムを回避する方法で偽造されたゴールデンチケットのようなものです。
{{#ref}} diamond-ticket.md {{#endref}}
証明書アカウントの永続性
アカウントの証明書を持っているか、要求できることは、ユーザーアカウントに永続する非常に良い方法です(たとえ彼がパスワードを変更しても):
{{#ref}} ad-certificates/account-persistence.md {{#endref}}
証明書ドメインの永続性
証明書を使用することは、ドメイン内で高い権限を持って永続することも可能です:
{{#ref}} ad-certificates/domain-persistence.md {{#endref}}
AdminSDHolderグループ
Active Directory内のAdminSDHolderオブジェクトは、特権グループ(ドメイン管理者やエンタープライズ管理者など)のセキュリティを確保するために、これらのグループ全体に標準の**アクセス制御リスト(ACL)**を適用して、無許可の変更を防ぎます。しかし、この機能は悪用される可能性があります。攻撃者がAdminSDHolderのACLを変更して通常のユーザーに完全なアクセスを与えると、そのユーザーはすべての特権グループに対して広範な制御を得ることになります。このセキュリ
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
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インジェクションを悪用して、子/親ドメインにエンタープライズ管理者として昇格します:
{{#ref}} sid-history-injection.md {{#endref}}
書き込み可能な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
このシナリオでは、あなたのドメインが外部のドメインによって信頼されています。これにより、不明な権限が与えられます。あなたは、あなたのドメインのどのプリンシパルが外部ドメインに対してどのようなアクセス権を持っているかを見つけ出し、それを悪用しようとする必要があります。
{{#ref}} external-forest-domain-oneway-inbound.md {{#endref}}
外部フォレストドメイン - 一方向(アウトバウンド)
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
このシナリオでは、あなたのドメインが異なるドメインのプリンシパルに特権を信頼しています。
しかし、ドメインが信頼されると、信頼するドメインは予測可能な名前のユーザーを作成し、信頼されたパスワードをパスワードとして使用します。これは、信頼するドメインのユーザーにアクセスして信頼されたドメインに入ることが可能であり、それを列挙し、さらに特権を昇格させることを試みることを意味します:
{{#ref}} external-forest-domain-one-way-outbound.md {{#endref}}
信頼されたドメインを侵害する別の方法は、ドメイン信頼の反対方向に作成されたSQL信頼リンクを見つけることです(これはあまり一般的ではありません)。
信頼されたドメインを侵害する別の方法は、信頼されたドメインのユーザーがアクセスできるマシンで待機し、RDPを介してログインすることです。その後、攻撃者はRDPセッションプロセスにコードを注入し、そこから被害者の元のドメインにアクセスできます。
さらに、被害者がハードドライブをマウントした場合、RDPセッションプロセスから攻撃者はハードドライブのスタートアップフォルダーにバックドアを保存できます。この技術はRDPInceptionと呼ばれます。
{{#ref}} rdp-sessions-abuse.md {{#endref}}
ドメイン信頼の悪用軽減
SIDフィルタリング:
- フォレスト信頼を越えたSID履歴属性を利用した攻撃のリスクは、SIDフィルタリングによって軽減され、これはすべてのインターフォレスト信頼でデフォルトで有効になっています。これは、マイクロソフトの見解に従い、フォレストをセキュリティ境界と見なすことから、イントラフォレスト信頼が安全であるという前提に基づいています。
- しかし、注意点があります:SIDフィルタリングはアプリケーションやユーザーアクセスに影響を与える可能性があり、そのため時折無効にされることがあります。
選択的認証:
- インターフォレスト信頼の場合、選択的認証を使用することで、2つのフォレストのユーザーが自動的に認証されないようにします。代わりに、信頼するドメインまたはフォレスト内のドメインやサーバーにアクセスするためには明示的な権限が必要です。
- これらの対策は、書き込み可能な構成名コンテキスト(NC)の悪用や信頼アカウントへの攻撃から保護するものではないことに注意が必要です。
AD -> Azure & Azure -> AD
{{#ref}} https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity {{#endref}}
一般的な防御策
資格情報保護のための防御策
- ドメイン管理者の制限:ドメイン管理者はドメインコントローラーにのみログインできるようにし、他のホストでの使用を避けることが推奨されます。
- サービスアカウントの特権:サービスはセキュリティを維持するためにドメイン管理者(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
{{#include ../../banners/hacktricks-training.md}}