Active Directory Methodology

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!

HackTricksをサポートする他の方法:

  • HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!

  • The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける

  • Discordグループ参加する💬(https://discord.gg/hRep4RUj7f)またはtelegramグループに参加するか、Twitter🐦でフォローする@carlospolopm

  • HackTricks(https://github.com/carlospolop/hacktricks)とHackTricks CloudのGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。

基本的な概要

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

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

Active Directory内の主要な概念には次のものがあります:

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

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

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

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

  5. フォレスト - Active Directoryの組織構造の頂点であり、相互に信頼関係を持つ複数のツリーから構成されます。

**Active Directoryドメインサービス(AD DS)**は、ネットワーク内での中央集中管理と通信に不可欠なさまざまなサービスを包括しています。これらのサービスには次のものが含まれます:

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

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

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

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

  5. 権利管理 - 著作権物資の不正な配布と使用を規制することで保護を支援します。

  6. DNSサービス - ドメイン名の解決に不可欠です。

詳細な説明については、TechTerms - Active Directory Definitionを参照してください。

Kerberos認証

ADを攻撃する方法を学ぶには、Kerberos認証プロセスを非常によく理解する必要があります。 動作方法がまだわからない場合は、このページを読んでください。

チートシート

https://wadcoms.github.io/にアクセスして、ADを列挙/悪用するために実行できるコマンドを簡単に確認できます。

Active Directoryの調査(資格情報/セッションなし)

AD環境にアクセス権があるが、資格情報/セッションがない場合は、次のことができます:

  • ネットワークのペンテスト:

  • ネットワークをスキャンし、マシンとオープンポートを見つけ、そこから脆弱性を悪用したり、そこから資格情報を抽出したりします(たとえば、プリンターは非常に興味深いターゲットになる場合があります

  • DNSの列挙は、ドメイン内の重要なサーバー(Web、プリンター、共有、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サーバーを列挙するためのより詳細なガイドはこちら:

page139,445 - Pentesting SMB
  • LDAPの列挙

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

  • LDAPの列挙方法についてのより詳細なガイドはこちら(匿名アクセスに特に注意を払ってください):

page389, 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リポジトリこのリポジトリでユーザー名のリストを見つけることができます。

ただし、これより前に実行すべきreconステップで会社で働いている人の名前を持っているはずです。名前と姓を使用して、namemash.pyスクリプトを使用して潜在的な有効なユーザー名を生成できます。

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

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

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

  • パスワードスプレー: 発見されたユーザーごとに最も一般的なパスワードを試してみてください。おそらく、一部のユーザーが簡単なパスワードを使用しているかもしれません(パスワードポリシーに注意してください)。

  • ユーザーのメールサーバーへのアクセスを試みるために、OWAサーバーにもスプレーを行うことができます。

pagePassword Spraying / Brute Force

LLMNR/NBT-NSポイズニング

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

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

NTMLリレー

Active Directoryを列挙できた場合、より多くの電子メールアドレスとネットワークの理解が得られます。NTML リレーアタックを強制して、AD環境へのアクセスを取得できるかもしれません。

NTLMクレデンシャルの盗難

他のPCや共有にアクセスできる場合、nullまたはguestユーザーを使用して、アクセスされるとNTML認証をトリガーするような(SCFファイルなどの)ファイルを配置できます。これにより、NTLMチャレンジを盗んでクラックできます:

pagePlaces to steal NTLM creds

資格情報/セッションを使用したActive Directoryの列挙

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

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

pageKerberos Double Hop Problem

列挙

アカウントを侵害することは、全体のドメインを侵害し始める大きなステップです。なぜなら、Active Directory列挙を開始できるからです:

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

  • よりステルス性の高いpowershell for reconを使用できます

  • powerviewを使用して詳細な情報を抽出できます

  • Active Directoryでのreconのための素晴らしいツールの1つはBloodHoundです。非常にステルス性が低い(使用する収集方法による)、しかしそれを気にしない場合は、ぜひ試してみてください。ユーザーがRDPできる場所を見つけたり、他のグループへのパスを見つけたりできます。

  • 他の自動化されたAD列挙ツールには: AD Explorer, ADRecon, Group3r, PingCastleがあります。

  • ADのDNSレコードには興味深い情報が含まれている場合があります。

  • ディレクトリを列挙するために使用できるGUIツールは、SysInternal SuiteのAdExplorer.exeです。

  • userPassword&_unixUserPassword_フィールド、または_Description_のフィールドで資格情報を検索するためにldapsearchを使用してLDAPデータベースを検索できます。他の方法については、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チケットを取得し、その暗号化をクラックすることを含みます。この暗号化は、ユーザーパスワードに基づいており、オフラインで行われます。

詳細は以下を参照してください:

pageKerberoast

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

pagePlaces to steal NTLM creds

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

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

pagePrintNightmare

特権昇格:特権付き資格情報/セッションを使用したアクティブディレクトリ上で

次のテクニックにおいては、通常のドメインユーザーでは不十分であり、これらの攻撃を実行するために特別な特権/資格情報が必要です。

ハッシュ抽出

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

ハッシュの渡し

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

ハッシュの渡し/キーの渡し

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

pageOver Pass the Hash/Pass the Key

チケットの渡し

**Pass The Ticket (PTT)**攻撃方法では、攻撃者はユーザーのパスワードやハッシュ値ではなく、ユーザーの認証チケットを盗みます。この盗まれたチケットは、ユーザーをなりすまして、ネットワーク内のリソースやサービスに不正アクセスを取得します。

pagePass 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インスタンスに信頼されている場合。ユーザーが信頼されたデータベースに権限を持っている場合、その信頼関係を使用して他のインスタンスでもクエリを実行できます。これらの信頼関係は連鎖する可能性があり、ユーザーは誤って構成されたデータベースを見つけてコマンドを実行できるかもしれません。 データベース間のリンクはフォレストトラストを超えて機能します。

pageMSSQL AD Abuse

制約のない委任

ADS_UF_TRUSTED_FOR_DELEGATION属性を持つコンピューターオブジェクトを見つけた場合、そのコンピューターでドメイン権限を持っていると、そのコンピューターにログインするすべてのユーザーのメモリからTGTをダンプできます。 したがって、ドメイン管理者がコンピューターにログインすると、そのTGTをダンプしてチケット渡しを使用して彼をなりすますことができます。 制約付き委任を使用すると、プリントサーバーを自動的に侵害することさえできます(うまくいけばDCであることが望ましい)。

pageUnconstrained Delegation

制約付き委任

ユーザーまたはコンピューターが「制約付き委任」に許可されている場合、そのユーザー/コンピューターはコンピューター内の一部のサービスにアクセスするために任意のユーザーをなりすますことができます。 その後、このユーザー/コンピューターのハッシュを妥協すると、一部のサービスにアクセスするために任意のユーザー(ドメイン管理者さえも)をなりすますことができます。

pageConstrained Delegation

リソースベースの制約委任

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

pageResource-based Constrained Delegation

ACLの悪用

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

pageAbusing Active Directory ACLs/ACEs

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

ドメイン内でスプールサービスがリスニングされていることがわかれば、これを悪用して新しい資格情報を取得し、権限を昇格させることができます。

pageAbusing Active Directory ACLs/ACEs

サードパーティーセッションの悪用

他のユーザー侵害されたマシンにアクセスする場合、そのユーザーのメモリから資格情報を収集したり、彼らのプロセスにビーコンをインジェクトしてなりすますことができます。 通常、ユーザーはRDP経由でシステムにアクセスしますので、ここではサードパーティーRDPセッションに対していくつかの攻撃を実行する方法があります:

pageRDP Sessions Abuse

LAPS

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

pageLAPS

証明書の盗難

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

pageAD CS Certificate Theft

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

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

pageAD 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

シルバーチケット

シルバーチケット攻撃は、特定のサービスのためにNTLMハッシュ(たとえば、PCアカウントのハッシュ)を使用して正当なチケット発行サービス(TGS)チケットを作成します。この方法は、サービス権限にアクセスするために使用されます。

pageSilver Ticket

ゴールデンチケット

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

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

pageGolden Ticket

ダイヤモンドチケット

これらは、一般的なゴールデンチケットの検出メカニズムをバイパスする方法で作成されたゴールデンチケットのようなものです。

pageDiamond Ticket

証明書アカウントの永続化

アカウントの証明書を持っているか、それらを要求できるということは、そのアカウントで永続化できる非常に良い方法です(パスワードを変更しても):

pageAD CS Account Persistence

証明書ドメインの永続化

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

pageAD CS Domain Persistence

AdminSDHolderグループ

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

AdminDSHolderグループに関する詳細情報はこちら。

DSRM資格情報

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

pageDSRM Credentials

ACL永続化

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

pageAbusing Active Directory ACLs/ACEs

セキュリティ記述子

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

pageSecurity Descriptors

スケルトンキー

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

pageSkeleton Key

カスタムSSP

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

pageCustom SSP

DCShadow

これは新しいドメインコントローラーをADに登録し、指定されたオブジェクトに(SIDHistory、SPNなど)をログなしでプッシュするために使用します。DA権限ルートドメイン内にいる必要があります。 間

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インジェクションを使用してEnterprise adminにエスカレートします:

pageSID-History Injection

書き込み可能なConfiguration NCの悪用

Configuration Naming Context(NC)がどのように悪用されるかを理解することは重要です。 Configuration NCは、Active Directory(AD)環境全体の構成データの中央リポジトリとして機能します。このデータは、森林内のすべてのドメインコントローラ(DC)にレプリケートされ、書き込み可能なDCはConfiguration NCの書き込み可能なコピーを維持します。これを悪用するには、DC上でSYSTEM権限を持っている必要があります。できれば子DCです。

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

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

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

フォレスト内の任意のgMSAを妥協する

攻撃ベクトルには、ドメイン内の特権のあるgMSAを標的とすることが含まれます。 gMSAsのパスワードを計算するために不可欠なKDSルートキーは、Configuration NC内に保存されています。任意のDCでSYSTEM権限を持っていると、KDSルートキーにアクセスし、フォレスト全体の任意のgMSAのパスワードを計算することが可能です。

詳細な分析は、Golden gMSA Trust Attacksの議論で見つけることができます。

スキーマ変更攻撃

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

詳細は、Schema Change Trust Attacksで読むことができます。

DAからEAへのADCS ESC5

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

これについての詳細は、From DA to EA with 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

このシナリオでは、あなたのドメインが外部のドメインに信頼されておりそれに対して未確定の権限を持っています。あなたのドメインのどの主体が外部ドメインにどのようなアクセス権を持っているかを見つけ、それを悪用しようとします:

pageExternal 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

このシナリオでは、あなたのドメイン別のドメインからの主体に一部の権限を委任しています。

ただし、信頼するドメインによって信頼されるドメインが作成したユーザーは、予測可能な名前を使用して、信頼されたパスワードをパスワードとして使用します。つまり、信頼するドメインからのユーザーにアクセスして、信頼されたドメインに侵入し、特権をエスカレートしようとする可能性があります:

pageExternal Forest Domain - One-Way (Outbound)

信頼されたドメインを侵害する別の方法は、ドメイン信頼の逆方向に作成されたSQL信頼リンクを見つけることです(これは非常に一般的ではありません)。

信頼されたドメインを侵害する別の方法は、信頼されたドメインのユーザーがアクセスできるマシンで待機し、RDP経由でログインすることができるようにすることです。その後、攻撃者はRDPセッションプロセスにコードをインジェクトし、そこから被害者の元のドメインにアクセスできます。 さらに、被害者がハードドライブをマウントしている場合、攻撃者はRDPセッションプロセスからハードドライブのスタートアップフォルダーバックドアを保存できます。この技術はRDPInceptionと呼ばれます。

pageRDP Sessions Abuse

ドメイン信頼の乱用の緩和

SIDフィルタリング:

  • フォレスト間の信頼を利用した攻撃のリスクは、SIDフィルタリングによって軽減されます。これは、フォレスト間の信頼にデフォルトで有効になっています。これは、フォレストをセキュリティの境界と見なすMicrosoftの立場に基づいています。

  • ただし、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

  • 欺瞞技術の展開に関する詳細は、GitHubのDeploy-Deceptionで見つけることができます。

欺瞞の特定

  • ユーザーオブジェクトの場合: 異常なObjectSID、頻度の低いログオン、作成日、および低い誤ったパスワード回数など、疑わしい指標があります。

  • 一般的な指標: 潜在的なデコイオブジェクトの属性を本物のオブジェクトと比較することで、不一致が明らかになることがあります。HoneypotBusterなどのツールは、そのような欺瞞を特定するのに役立ちます。

検出システムの回避

  • Microsoft ATA検出の回避:

  • ユーザー列挙: ATA検出を回避するために、ドメインコントローラーでのセッション列挙を避けることが重要です。

  • チケット詐称: チケット作成にaesキーを使用することで、NTLMへのダウングレードを避けて検出を回避できます。

  • DCSync攻撃: ATA検出を回避するために、ドメインコントローラーから直接実行するのではなく、非ドメインコントローラーから実行することが推奨されます。

参考文献

htARTE(HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ こちら!

HackTricksをサポートする他の方法:

Last updated