Active Directory Methodology

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

基本概要

Active Directoryは、ネットワーク管理者がネットワーク内のドメインユーザー、およびオブジェクトを効率的に作成および管理できるようにする基盤技術です。これはスケーラブルに設計されており、膨大な数のユーザーを管理可能なグループおよびサブグループに整理し、さまざまなレベルでアクセス権を制御します。

Active Directoryの構造は、ドメインツリー、およびフォレストの3つの主要な層で構成されています。ドメインは、共通のデータベースを共有するユーザーデバイスなどのオブジェクトのコレクションを含みます。ツリーは、共有構造によってリンクされたこれらのドメインのグループであり、フォレストは、信頼関係を通じて相互接続された複数のツリーのコレクションを表し、組織構造の最上層を形成します。特定のアクセスおよび通信権は、これらの各レベルで指定できます。

Active Directory内の主要な概念には以下が含まれます:

  1. ディレクトリ – Active Directoryオブジェクトに関するすべての情報を保持します。

  2. オブジェクト – ディレクトリ内のエンティティを示し、ユーザーグループ、または共有フォルダーを含みます。

  3. ドメイン – ディレクトリオブジェクトのコンテナとして機能し、フォレスト内で複数のドメインが共存でき、それぞれが独自のオブジェクトコレクションを維持します。

  4. ツリー – 共通のルートドメインを共有するドメインのグループです。

  5. フォレスト – Active Directoryにおける組織構造の頂点であり、信頼関係を持ついくつかのツリーで構成されています。

**Active Directory Domain Services (AD DS)**は、ネットワーク内の集中管理および通信に不可欠な一連のサービスを含みます。これらのサービスには以下が含まれます:

  1. ドメインサービス – データストレージを集中化し、ユーザードメイン間の相互作用を管理し、認証および検索機能を含みます。

  2. 証明書サービス – 安全なデジタル証明書の作成、配布、および管理を監督します。

  3. 軽量ディレクトリサービスLDAPプロトコルを通じてディレクトリ対応アプリケーションをサポートします。

  4. ディレクトリフェデレーションサービス – 複数のWebアプリケーションでのユーザー認証を単一のセッションで行うシングルサインオン機能を提供します。

  5. 権利管理 – 著作権資料を保護するために、その無許可の配布および使用を規制します。

  6. 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サーバーを列挙する方法についての詳細なガイドはここにあります:

139,445 - Pentesting SMB
  • Ldapを列挙する

  • nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>

  • LDAPを列挙する方法についての詳細なガイドはここにあります(匿名アクセスに特に注意してください):

389, 636, 3268, 3269 - Pentesting LDAP

ユーザー列挙

  • 匿名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

ユーザー名のリストはこのGitHubリポジトリ ****やこのリポジトリ(統計的に可能性の高いユーザー名)で見つけることができます。

ただし、これを行う前に実施したリコンステップから、会社で働いている人々の名前を持っている必要があります。名前と姓があれば、スクリプトnamemash.pyを使用して、潜在的な有効なユーザー名を生成できます。

1つまたは複数のユーザー名を知っている場合

さて、有効なユーザー名はわかっているがパスワードがない場合... 次のことを試してみてください:

  • ASREPRoast: ユーザーが属性 DONT_REQ_PREAUTH を持っていない場合、そのユーザーのためにAS_REPメッセージを要求でき、ユーザーのパスワードの派生によって暗号化されたデータが含まれます。

  • パスワードスプレー: 発見した各ユーザーに対して最も一般的なパスワードを試してみましょう。もしかしたら、あるユーザーが悪いパスワードを使用しているかもしれません(パスワードポリシーに注意してください!)。

  • OWAサーバーをスプレーして、ユーザーのメールサーバーへのアクセスを試みることもできます。

Password Spraying / Brute Force

LLMNR/NBT-NSポイズニング

ネットワークのいくつかのプロトコルをポイズニングすることで、いくつかのチャレンジハッシュ取得できるかもしれません:

Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

NTMLリレー

アクティブディレクトリを列挙できた場合、より多くのメールとネットワークの理解が得られます。NTML リレー攻撃 ****を強制してAD環境にアクセスできるかもしれません。

NTLMクレデンシャルの盗難

ヌルまたはゲストユーザーで他のPCや共有にアクセスできる場合、ファイルを配置(SCFファイルなど)して、何らかの形でアクセスされるとNTML認証をトリガーし、NTLMチャレンジを盗むことができます:

Places to steal NTLM creds

資格情報/セッションを使用したアクティブディレクトリの列挙

このフェーズでは、有効なドメインアカウントの資格情報またはセッションを侵害している必要があります。 有効な資格情報またはドメインユーザーとしてのシェルがある場合、前に示したオプションは他のユーザーを侵害するためのオプションとして依然として有効です

認証された列挙を開始する前に、Kerberosダブルホップ問題が何であるかを知っておく必要があります。

Kerberos Double Hop Problem

列挙

アカウントを侵害することは、ドメイン全体を侵害するための大きなステップです。なぜなら、アクティブディレクトリの列挙を開始できるからです

ASREPRoastに関しては、今やすべての可能な脆弱なユーザーを見つけることができ、パスワードスプレーに関しては、すべてのユーザー名のリストを取得し、侵害されたアカウントのパスワード、空のパスワード、新しい有望なパスワードを試すことができます。

  • 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を使用してドメインを列挙することもできます。

  • 自動化ツールとして次のものを試すこともできます:

  • すべてのドメインユーザーの抽出

Windowsからすべてのドメインユーザー名を取得するのは非常に簡単です(net user /domainGet-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チケットを取得し、その暗号化をクラックすることを含みます—これはユーザーパスワードに基づいており、オフラインで行われます。

これに関する詳細は:

Kerberoast

リモート接続(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チャレンジを盗むことができます:

Places to steal NTLM creds

CVE-2021-1675/CVE-2021-34527 PrintNightmare

この脆弱性により、認証された任意のユーザーがドメインコントローラーを侵害することができました。

PrintNightmare

特権クレデンシャル/セッションを使用したアクティブディレクトリの特権昇格

以下の技術には、通常のドメインユーザーでは不十分で、これらの攻撃を実行するためには特別な特権/クレデンシャルが必要です。

ハッシュ抽出

幸運にも、AsRepRoastPassword SprayingKerberoastResponderを含むリレー、EvilSSDPローカルでの特権昇格を使用してローカル管理者アカウントを侵害することができたことを願っています。 次に、メモリとローカルのすべてのハッシュをダンプする時です。 ハッシュを取得するためのさまざまな方法についてこのページを読んでください。

パス・ザ・ハッシュ

ユーザーのハッシュを持っている場合、それを使用してなりすますことができます。 そのハッシュを使用してNTLM認証を実行するためのツールを使用する必要があります。または、新しいsessionlogonを作成し、そのハッシュLSASS内に注入することができます。そうすれば、任意のNTLM認証が実行されると、そのハッシュが使用されます。最後のオプションはmimikatzが行うことです。 詳細についてはこのページを読んでください。

オーバーパス・ザ・ハッシュ/パス・ザ・キー

この攻撃は、ユーザーのNTLMハッシュを使用してKerberosチケットを要求することを目的としています。これは、一般的なNTLMプロトコルを介したパス・ザ・ハッシュの代替手段です。したがって、これは特にNTLMプロトコルが無効にされているネットワークで、Kerberosのみが認証プロトコルとして許可されている場合に特に有用です

Over Pass the Hash/Pass the Key

パス・ザ・チケット

パス・ザ・チケット(PTT)攻撃手法では、攻撃者はユーザーの認証チケットを盗む代わりに、パスワードやハッシュ値を盗みます。この盗まれたチケットは、その後ユーザーになりすますために使用され、ネットワーク内のリソースやサービスへの不正アクセスを得ることができます。

Pass the Ticket

クレデンシャルの再利用

ローカル管理者のハッシュまたはパスワードを持っている場合は、それを使用して他の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 +

このことは非常に騒がしいものであり、LAPS軽減します。

MSSQLの悪用と信頼されたリンク

ユーザーがMSSQLインスタンスにアクセスする権限を持っている場合、MSSQLホストでコマンドを実行したり(SAとして実行されている場合)、NetNTLMのハッシュ盗むことができたり、さらにはリレー攻撃を行うことができるかもしれません。 また、MSSQLインスタンスが別のMSSQLインスタンスによって信頼されている場合、信頼されたデータベースに対する権限を持つユーザーは、信頼関係を利用して他のインスタンスでもクエリを実行できるようになります。これらの信頼は連鎖することができ、ユーザーはコマンドを実行できる誤って構成されたデータベースを見つけることができるかもしれません。 データベース間のリンクは、フォレストの信頼を越えても機能します。

MSSQL AD Abuse

制約のない委任

ADS_UF_TRUSTED_FOR_DELEGATION属性を持つコンピュータオブジェクトを見つけ、コンピュータにドメイン権限がある場合、コンピュータにログインするすべてのユーザーのメモリからTGTをダンプすることができます。 したがって、ドメイン管理者がコンピュータにログインすると、そのTGTをダンプしてPass the Ticketを使用して彼を偽装することができます。 制約のある委任のおかげで、プリントサーバーを自動的に侵害することさえ可能です(できればDCであることを願っています)。

Unconstrained Delegation

制約された委任

ユーザーまたはコンピュータが「制約された委任」を許可されている場合、コンピュータ内のいくつかのサービスにアクセスするために任意のユーザーを偽装することができます。 その後、このユーザー/コンピュータのハッシュを侵害すると、任意のユーザー(ドメイン管理者を含む)を偽装していくつかのサービスにアクセスすることができます。

Constrained Delegation

リソースベースの制約された委任

リモートコンピュータのActive Directoryオブジェクトに対するWRITE権限を持つことで、昇格された権限でのコード実行が可能になります:

Resource-based Constrained Delegation

ACLの悪用

侵害されたユーザーは、ドメインオブジェクトのいくつかに対して興味深い権限を持っている可能性があり、それにより横移動権限の昇格が可能になります。

Abusing Active Directory ACLs/ACEs

プリンタースプーラーサービスの悪用

ドメイン内でスプールサービスがリッスンしていることを発見することは、新しい資格情報を取得し、権限を昇格させるために悪用される可能性があります。

Force NTLM Privileged Authentication

第三者セッションの悪用

他のユーザー侵害されたマシンにアクセスすると、メモリから資格情報を収集し、彼らのプロセスにビーコンを注入して彼らを偽装することが可能です。 通常、ユーザーはRDPを介してシステムにアクセスするため、ここでは第三者のRDPセッションに対していくつかの攻撃を実行する方法を示します:

RDP Sessions Abuse

LAPS

LAPSは、ドメインに参加しているコンピュータ上のローカル管理者パスワードを管理するためのシステムを提供し、それがランダム化され、ユニークで、頻繁に変更されることを保証します。これらのパスワードはActive Directoryに保存され、アクセスはACLを通じて認可されたユーザーのみに制御されます。これらのパスワードにアクセスするための十分な権限があれば、他のコンピュータにピボットすることが可能になります。

LAPS

証明書の盗難

侵害されたマシンから証明書を収集することは、環境内で権限を昇格させる方法となる可能性があります:

AD CS Certificate Theft

証明書テンプレートの悪用

脆弱なテンプレートが構成されている場合、それを悪用して権限を昇格させることが可能です:

AD CS Domain Escalation

高権限アカウントによるポストエクスプロイト

ドメイン資格情報のダンプ

ドメイン管理者またはさらに良いエンタープライズ管理者の権限を取得すると、ドメインデータベースダンプできます:ntds.dit

DCSync攻撃に関する詳細情報はここにあります

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アカウントのハッシュ)。この方法は、サービス権限にアクセスするために使用されます。

Silver Ticket

ゴールデンチケット

ゴールデンチケット攻撃は、攻撃者がActive Directory(AD)環境内のkrbtgtアカウントのNTLMハッシュにアクセスすることを含みます。このアカウントは特別で、すべての**チケット授与チケット(TGT)**に署名するために使用され、ADネットワーク内での認証に不可欠です。

攻撃者がこのハッシュを取得すると、任意のアカウントのためにTGTを作成することができます(シルバーチケット攻撃)。

Golden Ticket

ダイヤモンドチケット

これらは、一般的なゴールデンチケット検出メカニズムを回避する方法で偽造されたゴールデンチケットのようなものです。

Diamond Ticket

証明書アカウントの持続性

アカウントの証明書を持っているか、要求できることは、ユーザーアカウントに持続するための非常に良い方法です(たとえ彼がパスワードを変更しても):

AD CS Account Persistence

証明書ドメインの持続性

証明書を使用することは、ドメイン内で高い権限を持続することも可能です:

AD CS Domain Persistence

AdminSDHolderグループ

Active DirectoryのAdminSDHolderオブジェクトは、特権グループ(ドメイン管理者やエンタープライズ管理者など)のセキュリティを確保するために、これらのグループ全体に標準の**アクセス制御リスト(ACL)**を適用し、無許可の変更を防ぎます。しかし、この機能は悪用される可能性があります。攻撃者がAdminSDHolderのACLを変更して通常のユーザーに完全なアクセスを与えると、そのユーザーはすべての特権グループに対して広範な制御を得ることになります。このセキュリティ対策は保護を目的としていますが、厳重に監視されない限り、不当なアクセスを許すことになります。

AdminDSHolderグループに関する詳細情報はここにあります。

DSRM資格情報

すべてのドメインコントローラー(DC)内には、ローカル管理者アカウントが存在します。このようなマシンで管理者権限を取得することで、mimikatzを使用してローカル管理者ハッシュを抽出できます。その後、このパスワードを使用できるようにするためのレジストリ変更が必要で、ローカル管理者アカウントへのリモートアクセスを可能にします。

DSRM Credentials

ACL持続性

特定のドメインオブジェクトに対してユーザーに特別な権限与えることで、そのユーザーが将来的に権限を昇格させることができるようになります。

Abusing Active Directory ACLs/ACEs

セキュリティ記述子

セキュリティ記述子は、オブジェクトオブジェクトに対して持つ権限保存するために使用されます。オブジェクトのセキュリティ記述子少しの変更を加えることができれば、そのオブジェクトに対して特権グループのメンバーである必要なく、非常に興味深い権限を取得できます。

Security Descriptors

スケルトンキー

LSASSをメモリ内で変更して、すべてのドメインアカウントにアクセスを許可するユニバーサルパスワードを確立します。

Skeleton Key

カスタムSSP

SSP(セキュリティサポートプロバイダー)とは何かをここで学びます。 自分のSSPを作成して、マシンにアクセスするために使用される資格情報平文キャプチャすることができます。\

Custom SSP

DCShadow

ADに新しいドメインコントローラーを登録し、指定されたオブジェクトに属性(SIDHistory、SPNsなど)をプッシュするために使用しますが、変更に関するログを残さずに行います。DA権限が必要で、ルートドメイン内にいる必要があります。 間違ったデータを使用すると、非常に醜いログが表示されることに注意してください。

DCShadow

LAPS持続性

以前に、LAPSパスワードを読み取るための十分な権限がある場合に権限を昇格させる方法について説明しました。しかし、これらのパスワードは持続性を維持するためにも使用できます。 確認してください:

LAPS

フォレスト権限昇格 - ドメイン信頼

Microsoftはフォレストをセキュリティ境界と見なしています。これは、単一のドメインを侵害することが、フォレスト全体の侵害につながる可能性があることを意味します。

基本情報

ドメイン信頼は、あるドメインのユーザーが別のドメインのリソースにアクセスできるようにするセキュリティメカニズムです。これは、2つのドメインの認証システム間にリンクを作成し、認証確認がシームレスに流れることを可能にします。ドメインが信頼を設定すると、特定のキーを**ドメインコントローラー(DC)**内で交換し保持します。これは信頼の整合性にとって重要です。

典型的なシナリオでは、ユーザーが信頼されたドメインのサービスにアクセスしようとする場合、まず自分のドメインのDCからインターレルムTGTと呼ばれる特別なチケットを要求する必要があります。このTGTは、両方のドメインが合意した共有キーで暗号化されています。ユーザーはこのTGTを信頼されたドメインのDCに提示してサービスチケット(TGS)を取得します。信頼されたドメインのDCによってインターレルムTGTが正常に検証されると、TGSが発行され、ユーザーはサービスにアクセスできるようになります。

手順

  1. ドメイン1クライアントコンピュータが、**ドメインコントローラー(DC1)からチケット授与チケット(TGT)**を要求するプロセスを開始します。

  2. クライアントが正常に認証されると、DC1は新しいTGTを発行します。

  3. クライアントは、ドメイン2のリソースにアクセスするために必要なインターレルムTGTをDC1に要求します。

  4. インターレルムTGTは、DC1とDC2の間で共有された信頼キーで暗号化されています。

  5. クライアントはインターレルムTGTを**ドメイン2のドメインコントローラー(DC2)**に持っていきます。

  6. DC2は、共有された信頼キーを使用してインターレルムTGTを検証し、有効な場合、クライアントがアクセスしたいドメイン2のサーバーのための**チケット授与サービス(TGS)**を発行します。

  7. 最後に、クライアントはこのTGSをサーバーに提示し、サーバーのアカウントハッシュで暗号化されているため、ドメイン2のサービスにアクセスします。

異なる信頼

信頼は1方向または2方向であることに注意することが重要です。2方向のオプションでは、両方のドメインが互いに信頼しますが、1方向の信頼関係では、一方のドメインが信頼されたドメインで、もう一方が信頼するドメインになります。この場合、信頼されたドメインから信頼するドメイン内のリソースにのみアクセスできることになります。

ドメインAがドメインBを信頼している場合、Aは信頼するドメインで、Bは信頼されたドメインです。さらに、ドメインAでは、これはアウトバウンド信頼となり、ドメインBでは、これはインバウンド信頼となります。

異なる信頼関係

  • 親子信頼:これは、同じフォレスト内で一般的な設定であり、子ドメインは自動的に親ドメインとの双方向の推移的信頼を持ちます。基本的に、これは認証要求が親と子の間でシームレスに流れることを意味します。

  • クロスリンク信頼:これは「ショートカット信頼」と呼ばれ、子ドメイン間で確立され、参照プロセスを迅速化します。複雑なフォレストでは、認証参照は通常、フォレストのルートまで上昇し、ターゲットドメインまで下降する必要があります。クロスリンクを作成することで、旅が短縮され、特に地理的に分散した環境で有益です。

  • 外部信頼:これは異なる無関係なドメイン間で設定され、非推移的です。Microsoftの文書によると、外部信頼は、現在のフォレスト外のドメインのリソースにアクセスするために役立ちます。これは、フォレスト信頼によって接続されていないドメインです。外部信頼では、SIDフィルタリングを通じてセキュリティが強化されます。

  • ツリーのルート信頼:これらの信頼は、フォレストのルートドメインと新しく追加されたツリーのルート間で自動的に確立されます。一般的には遭遇しませんが、ツリーのルート信頼は、フォレストに新しいドメインツリーを追加するために重要であり、ユニークなドメイン名を維持し、双方向の推移性を確保します。詳細情報はMicrosoftのガイドで確認できます。

  • フォレスト信頼:このタイプの信頼は、2つのフォレストルートドメイン間の双方向推移的信頼であり、セキュリティ対策を強化するためにSIDフィルタリングを強制します。

  • MIT信頼:これらの信頼は、非WindowsのRFC4120準拠のKerberosドメインとの間で確立されます。MIT信頼は、Windowsエコシステムの外部でKerberosベースのシステムとの統合を必要とする環境に特化しています。

信頼関係の他の違い

  • 信頼関係は推移的(AがBを信頼し、BがCを信頼する場合、AはCを信頼する)または非推移的であることがあります。

  • 信頼関係は双方向信頼(両方が互いに信頼する)または一方向信頼(一方だけが他方を信頼する)として設定できます。

攻撃パス

  1. 信頼関係を列挙する

  2. どのセキュリティプリンシパル(ユーザー/グループ/コンピュータ)が他のドメインのリソースにアクセスできるかを確認します。ACEエントリや他のドメインのグループにいることによって。ドメイン間の関係を探します(このために信頼が作成された可能性があります)。

  3. この場合、kerberoastが別のオプションになる可能性があります。

  4. アカウントを侵害し、ドメインをピボットすることができます。

攻撃者は、他のドメインのリソースにアクセスするために、主に3つのメカニズムを使用できます:

  • ローカルグループメンバーシップ:プリンシパルは、サーバーの「Administrators」グループなど、マシンのローカルグループに追加されることがあり、そのマシンに対して重要な制御を与えます。

  • 外国ドメイングループメンバーシップ:プリンシパルは、外国ドメイン内のグループのメンバーでもあります。ただし、この方法の効果は、信頼の性質とグループの範囲に依存します。

  • アクセス制御リスト(ACL):プリンシパルは、特定のリソースへのアクセスを提供するACL、特にDACL内のACEのエンティティとして指定されることがあります。ACL、DACL、およびACEのメカニズムに深く入りたい方には、ホワイトペーパー「An ACE Up The Sleeve」が貴重なリソースです。

子から親へのフォレスト権限昇格

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

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インジェクションを悪用して子/親ドメインに昇格します:

SID-History Injection

書き込み可能な構成NCの悪用

構成命名コンテキスト(NC)がどのように悪用されるかを理解することは重要です。構成NCは、Active Directory(AD)環境内のフォレスト全体の構成データの中央リポジトリとして機能します。このデータはフォレスト内のすべてのドメインコントローラー(DC)に複製され、書き込み可能なDCは構成NCの書き込み可能なコピーを保持します。これを悪用するには、DC上でSYSTEM権限を持つ必要があります。できれば子DCが望ましいです。

GPOをルートDCサイトにリンクする

構成NCのサイトコンテナには、ADフォレスト内のすべてのドメイン参加コンピュータのサイトに関する情報が含まれています。任意のDCでSYSTEM権限を持って操作することで、攻撃者はGPOをルートDCサイトにリンクできます。このアクションは、これらのサイトに適用されるポリシーを操作することによって、ルートドメインを危険にさらす可能性があります。

詳細情報については、SIDフィルタリングのバイパスに関する研究を探ることができます。

フォレスト内の任意のgMSAを危険にさらす

攻撃ベクトルは、ドメイン内の特権gMSAをターゲットにすることです。gMSAのパスワードを計算するために必要なKDSルートキーは、構成NC内に保存されています。任意のDCでSYSTEM権限を持つことで、KDSルートキーにアクセスし、フォレスト内の任意のgMSAのパスワードを計算することが可能です。

詳細な分析は、ゴールデンgMSA信頼攻撃に関する議論で見つけることができます。

スキーマ変更攻撃

この方法は、新しい特権ADオブジェクトの作成を待つ忍耐が必要です。SYSTEM権限を持つ攻撃者は、ADスキーマを変更して任意のユーザーにすべてのクラスに対する完全な制御を付与できます。これにより、新しく作成されたADオブジェクトへの不正アクセスと制御が可能になる可能性があります。

さらなる読み物は、スキーマ変更信頼攻撃で利用できます。

ADCS ESC5を使用してDAからEAへ

ADCS ESC5の脆弱性は、フォレスト内の任意のユーザーとして認証を可能にする証明書テンプレートを作成するために、公開鍵基盤(PKI)オブジェクトの制御をターゲットにしています。PKIオブジェクトは構成NCに存在するため、書き込み可能な子DCを危険にさらすことでESC5攻撃を実行できます。

これに関する詳細は、ESC5を使用してDAからEAへで読むことができます。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と呼ばれます。

RDP Sessions Abuse

ドメイン信頼の悪用緩和

SIDフィルタリング:

  • フォレスト信頼におけるSID履歴属性を利用した攻撃のリスクは、SIDフィルタリングによって軽減され、これはすべてのインターフォレスト信頼でデフォルトで有効になっています。これは、マイクロソフトの立場に従い、フォレストをセキュリティ境界と見なすことから成り立っています。

  • しかし、注意点があります:SIDフィルタリングはアプリケーションやユーザーアクセスに影響を与える可能性があり、そのため時折無効にされることがあります。

選択的認証:

  • インターフォレスト信頼に対して、選択的認証を使用することで、2つのフォレストのユーザーが自動的に認証されないようにします。代わりに、信頼するドメインまたはフォレスト内のドメインやサーバーにアクセスするためには明示的な権限が必要です。

  • これらの対策は、書き込み可能な構成名コンテキスト(NC)の悪用や信頼アカウントへの攻撃から保護するものではないことに注意が必要です。

ドメイン信頼に関する詳細情報はired.teamで。

AD -> Azure & Azure -> AD

一般的な防御策

ここで資格情報を保護する方法について詳しく学ぶ。\

資格情報保護のための防御策

  • ドメイン管理者の制限: ドメイン管理者はドメインコントローラーにのみログインを許可し、他のホストでの使用を避けることが推奨されます。

  • サービスアカウントの特権: サービスはセキュリティを維持するためにドメイン管理者(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検出を避けるために、ドメインコントローラーから直接実行するのではなく、非ドメインコントローラーから実行することが推奨されます。

参考文献

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする

Last updated