Active Directory Methodology
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Active Directoryは、ネットワーク管理者がドメイン、ユーザー、およびオブジェクトを効率的に作成および管理できる基盤技術として機能します。これはスケーラブルに設計されており、大規模なユーザーを管理可能なグループおよびサブグループに整理し、さまざまなレベルでアクセス権を制御します。
Active Directoryの構造は、ドメイン、ツリー、およびフォレストの3つの主要な層で構成されています。ドメインは、共通のデータベースを共有するユーザーやデバイスなどのオブジェクトのコレクションを含みます。ツリーは、共有構造によってリンクされたこれらのドメインのグループであり、フォレストは、信頼関係を通じて相互接続された複数のツリーのコレクションを表し、組織構造の最上層を形成します。これらの各レベルで特定のアクセスおよび通信権を指定できます。
Active Directory内の主要な概念には以下が含まれます:
ディレクトリ – Active Directoryオブジェクトに関するすべての情報を保持します。
オブジェクト – ディレクトリ内のエンティティを示し、ユーザー、グループ、または共有フォルダーを含みます。
ドメイン – ディレクトリオブジェクトのコンテナとして機能し、複数のドメインがフォレスト内で共存でき、それぞれが独自のオブジェクトコレクションを維持します。
ツリー – 共通のルートドメインを共有するドメインのグループです。
フォレスト – Active Directoryにおける組織構造の頂点であり、信頼関係を持ついくつかのツリーで構成されています。
**Active Directory Domain Services (AD DS)**は、ネットワーク内での集中管理および通信に不可欠な一連のサービスを含みます。これらのサービスには以下が含まれます:
ドメインサービス – データストレージを集中化し、ユーザーとドメイン間の相互作用を管理し、認証および検索機能を含みます。
証明書サービス – 安全なデジタル証明書の作成、配布、および管理を監督します。
軽量ディレクトリサービス – LDAPプロトコルを通じてディレクトリ対応アプリケーションをサポートします。
ディレクトリ連携サービス – 複数のWebアプリケーションでユーザーを単一のセッションで認証するためのシングルサインオン機能を提供します。
権利管理 – 著作権資料を保護するために、その無許可の配布および使用を規制します。
DNSサービス – ドメイン名の解決に重要です。
詳細な説明については、TechTerms - Active Directory Definitionを確認してください。
ADを攻撃する方法を学ぶには、Kerberos認証プロセスを非常によく理解する必要があります。 まだその仕組みがわからない場合はこのページを読んでください。
https://wadcoms.github.io/にアクセスして、ADを列挙/悪用するために実行できるコマンドの概要を確認できます。
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を列挙する方法についての詳細なガイドはここにあります(匿名アクセスに特に注意してください):
ネットワークを毒する
内部文書、ソーシャルメディア、サービス(主にウェブ)からユーザー名/名前を抽出し、公開されている情報からも取得します。
会社の従業員のフルネームが見つかった場合、さまざまなADのユーザー名の規則を試すことができます(これを読む)。最も一般的な規則は:NameSurname、Name.Surname、NamSur(各3文字)、Nam.Sur、NSurname、N.Surname、SurnameName、Surname.Name、SurnameN、Surname.N、3つの_ランダムな文字と3つのランダムな数字_(abc123)です。
ツール:
Kerbrute列挙:無効なユーザー名が要求されると、サーバーはKerberosエラーコード_KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_を使用して応答し、ユーザー名が無効であることを判断できます。有効なユーザー名は、AS-REP応答でTGTを引き起こすか、エラー_KRB5KDC_ERR_PREAUTH_REQUIRED_を示し、ユーザーが事前認証を行う必要があることを示します。
OWA (Outlook Web Access) サーバー
ネットワーク内にこれらのサーバーのいずれかを見つけた場合、ユーザー列挙を実行することもできます。例えば、ツールMailSniperを使用することができます:
ユーザー名のリストはこのgithubリポジトリ ****やこのリポジトリ(統計的に可能性の高いユーザー名)で見つけることができます。
ただし、これを行う前に実施したリコンステップから、会社で働いている人々の名前を持っている必要があります。名前と姓があれば、スクリプトnamemash.pyを使用して、潜在的な有効なユーザー名を生成できます。
さて、有効なユーザー名はすでに知っているがパスワードはない... それなら試してみてください:
ASREPRoast: ユーザーが属性 DONT_REQ_PREAUTH を持っていない場合、そのユーザーのためにAS_REPメッセージを要求でき、ユーザーのパスワードの派生によって暗号化されたデータが含まれます。
Password Spraying: 発見した各ユーザーに対して最も一般的なパスワードを試してみましょう。もしかしたら、あるユーザーが悪いパスワードを使用しているかもしれません(パスワードポリシーに注意してください!)。
OWAサーバーをスプレーして、ユーザーのメールサーバーへのアクセスを試みることもできます。
ネットワークのいくつかのプロトコルをポイズニングすることで、いくつかのチャレンジハッシュを取得できるかもしれません:
アクティブディレクトリを列挙できた場合、より多くのメールとネットワークの理解が得られます。NTML リレー攻撃 ****を強制してAD環境にアクセスできるかもしれません。
nullまたはゲストユーザーで他のPCや共有にアクセスできる場合、ファイルを配置(SCFファイルなど)して、何らかの方法でアクセスされると、あなたに対してNTML認証をトリガーし、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を使用してドメインを列挙することもできます。
自動化ツールとしても試すことができます:
すべてのドメインユーザーを抽出する
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への道を見つけるための重要な瞬間であるか、何もできないと決定する瞬間です。
Kerberoastingは、ユーザーアカウントに関連付けられたサービスによって使用されるTGSチケットを取得し、その暗号化をクラックすることを含みます—これはユーザーパスワードに基づいており、オフラインで行われます。
これに関する詳細は:
いくつかの資格情報を取得したら、マシンへのアクセスがあるかどうかを確認できます。そのために、CrackMapExecを使用して、ポートスキャンに応じて異なるプロトコルで複数のサーバーに接続を試みることができます。
通常のドメインユーザーとしての資格情報またはセッションを侵害し、ドメイン内の任意のマシンにこのユーザーでアクセスできる場合、ローカルで特権を昇格させ、資格情報を探す方法を見つけるべきです。これは、ローカル管理者権限を持っている場合にのみ、他のユーザーのハッシュをメモリ(LSASS)およびローカル(SAM)でダンプできるからです。
この本にはWindowsにおけるローカル特権昇格に関する完全なページとチェックリストがあります。また、WinPEASを使用することを忘れないでください。
予期しないリソースにアクセスするためのチケットが現在のユーザーに見つかる可能性は非常に低いですが、確認することができます:
もしあなたがアクティブディレクトリを列挙することに成功したなら、より多くのメールとネットワークの理解を得ることができるでしょう。あなたはNTML リレー攻撃を強制することができるかもしれません。
基本的なクレデンシャルを持っているので、AD内で共有されている興味深いファイルを見つけることができるか確認するべきです。手動で行うこともできますが、それは非常に退屈で繰り返しの作業です(特にチェックする必要のある数百のドキュメントを見つけた場合はなおさらです)。
使用できるツールについて学ぶにはこのリンクをフォローしてください。
もしあなたが他のPCや共有にアクセスできるなら、ファイルを配置することができます(SCFファイルのような)それにアクセスされると、あなたに対してNTML認証をトリガーするので、NTLMチャレンジを盗むことができます:
この脆弱性により、認証された任意のユーザーがドメインコントローラーを侵害することができました。
以下の技術には、通常のドメインユーザーでは不十分で、これらの攻撃を実行するためには特別な特権/クレデンシャルが必要です。
幸運にも、AsRepRoast、Password Spraying、Kerberoast、Responderを含むリレー、EvilSSDP、ローカルでの特権昇格を使用してローカル管理者アカウントを侵害することに成功したことを願っています。 次に、メモリとローカルのすべてのハッシュをダンプする時です。 ハッシュを取得するためのさまざまな方法についてこのページを読んでください。
ユーザーのハッシュを持っている場合、それを使用してなりすますことができます。 そのハッシュを使用してNTLM認証を実行するためのツールを使用する必要があります、または新しいsessionlogonを作成し、そのハッシュをLSASS内に注入することができます。そうすれば、任意のNTLM認証が実行されると、そのハッシュが使用されます。**最後のオプションはmimikatzが行うことです。 詳細についてはこのページを読んでください。
この攻撃は、ユーザーのNTLMハッシュを使用してKerberosチケットを要求することを目的としています。これは、一般的なNTLMプロトコルのパス・ザ・ハッシュの代替手段です。したがって、これは特にNTLMプロトコルが無効にされているネットワークで、Kerberosのみが認証プロトコルとして許可されている場合に特に有用です。
パス・ザ・チケット(PTT)攻撃手法では、攻撃者はユーザーの認証チケットを盗む代わりに、パスワードやハッシュ値を盗みます。この盗まれたチケットは、その後ユーザーになりすますために使用され、ネットワーク内のリソースやサービスへの不正アクセスを得ることができます。
ローカル管理者のハッシュまたはパスワードを持っている場合は、それを使用して他のPCにローカルでログインしようとするべきです。
このことは非常に騒がしいものであり、LAPSが軽減します。
ユーザーがMSSQLインスタンスにアクセスする権限を持っている場合、MSSQLホストでコマンドを実行したり(SAとして実行されている場合)、NetNTLMのハッシュを盗むことができるか、さらにはリレー攻撃を行うことができます。 また、MSSQLインスタンスが別のMSSQLインスタンスによって信頼されている場合、信頼されたデータベースに対する権限を持つユーザーは、他のインスタンスでもクエリを実行するために信頼関係を利用できるようになります。これらの信頼は連鎖することができ、ユーザーはコマンドを実行できる誤って構成されたデータベースを見つけることができるかもしれません。 データベース間のリンクは、フォレストの信頼を越えても機能します。
ADS_UF_TRUSTED_FOR_DELEGATION属性を持つコンピュータオブジェクトを見つけ、コンピュータにドメイン権限がある場合、コンピュータにログインするすべてのユーザーのメモリからTGTをダンプすることができます。 したがって、ドメイン管理者がコンピュータにログインすると、そのTGTをダンプしてPass the Ticketを使用して彼を偽装することができます。 制約のある委任のおかげで、プリントサーバーを自動的に侵害することさえ可能です(できればDCであることを願っています)。
ユーザーまたはコンピュータが「制約された委任」を許可されている場合、コンピュータ内のいくつかのサービスにアクセスするために任意のユーザーを偽装することができます。 その後、このユーザー/コンピュータのハッシュを侵害すると、任意のユーザー(ドメイン管理者を含む)を偽装していくつかのサービスにアクセスすることができます。
リモートコンピュータのActive Directoryオブジェクトに対してWRITE権限を持つことは、昇格された権限でのコード実行を可能にします:
侵害されたユーザーは、ドメインオブジェクトのいくつかに対して興味深い権限を持っている可能性があり、それにより横移動や権限の昇格が可能になります。
ドメイン内でスプールサービスがリスニングしていることを発見することは、新しい資格情報を取得し、権限を昇格させるために悪用される可能性があります。
他のユーザーが侵害されたマシンにアクセスすると、メモリから資格情報を収集し、彼らのプロセスにビーコンを注入して彼らを偽装することが可能です。 通常、ユーザーはRDPを介してシステムにアクセスするため、ここではサードパーティのRDPセッションに対していくつかの攻撃を実行する方法を示します:
LAPSは、ドメインに参加しているコンピュータ上のローカル管理者パスワードを管理するためのシステムを提供し、それがランダム化され、ユニークで、頻繁に変更されることを保証します。これらのパスワードはActive Directoryに保存され、アクセスはACLを通じて認可されたユーザーのみに制御されます。これらのパスワードにアクセスするための十分な権限があれば、他のコンピュータにピボットすることが可能になります。
侵害されたマシンから証明書を収集することは、環境内で権限を昇格させる方法となる可能性があります:
脆弱なテンプレートが構成されている場合、それを悪用して権限を昇格させることが可能です:
ドメイン管理者またはさらに良いエンタープライズ管理者の権限を取得すると、ドメインデータベースをダンプできます:ntds.dit。
以前に議論したいくつかの技術は持続性に使用できます。 たとえば、次のことができます:
ユーザーをKerberoastに対して脆弱にする
ユーザーをASREPRoastに対して脆弱にする
ユーザーにDCSync権限を付与する
シルバーチケット攻撃は、特定のサービスのために正当なチケット授与サービス(TGS)チケットをNTLMハッシュを使用して作成します(たとえば、PCアカウントのハッシュ)。この方法は、サービス権限にアクセスするために使用されます。
ゴールデンチケット攻撃は、攻撃者がActive Directory(AD)環境内のkrbtgtアカウントのNTLMハッシュにアクセスすることを含みます。このアカウントは特別で、すべての**チケット授与チケット(TGT)**に署名するために使用され、ADネットワーク内での認証に不可欠です。
攻撃者がこのハッシュを取得すると、任意のアカウントのためにTGTを作成することができます(シルバーチケット攻撃)。
これらは、一般的なゴールデンチケット検出メカニズムを回避する方法で偽造されたゴールデンチケットのようなものです。
アカウントの証明書を持っているか、要求できることは、ユーザーアカウントに持続するための非常に良い方法です(たとえ彼がパスワードを変更しても):
証明書を使用することは、ドメイン内で高い権限を持続することも可能です:
Active DirectoryのAdminSDHolderオブジェクトは、特権グループ(ドメイン管理者やエンタープライズ管理者など)のセキュリティを確保するために、これらのグループ全体に標準の**アクセス制御リスト(ACL)**を適用して、無許可の変更を防ぎます。しかし、この機能は悪用される可能性があります。攻撃者がAdminSDHolderのACLを変更して通常のユーザーに完全なアクセスを与えると、そのユーザーはすべての特権グループに対して広範な制御を得ることになります。このセキュリティ対策は保護を目的としていますが、厳重に監視されない限り、不当なアクセスを許可する可能性があります。
AdminDSHolderグループに関する詳細情報はここにあります。
すべてのドメインコントローラー(DC)内には、ローカル管理者アカウントが存在します。このようなマシンで管理者権限を取得することで、ローカル管理者ハッシュをmimikatzを使用して抽出できます。その後、このパスワードを使用できるようにするためのレジストリ変更が必要で、ローカル管理者アカウントへのリモートアクセスを可能にします。
特定のドメインオブジェクトに対してユーザーに特別な権限を与えることで、そのユーザーが将来的に権限を昇格させることができるようになります。
セキュリティ記述子は、オブジェクトがオブジェクトに対して持つ権限を保存するために使用されます。オブジェクトのセキュリティ記述子に少しの変更を加えることができれば、そのオブジェクトに対して特権グループのメンバーである必要なく、非常に興味深い権限を取得できます。
LSASSをメモリ内で変更して、すべてのドメインアカウントにアクセスを許可するユニバーサルパスワードを確立します。
SSP(セキュリティサポートプロバイダー)とは何かをここで学びます。 自分のSSPを作成して、マシンにアクセスするために使用される資格情報を平文でキャプチャすることができます。\
ADに新しいドメインコントローラーを登録し、指定されたオブジェクトに属性(SIDHistory、SPNs...)をプッシュしますが、変更に関するログを残さずに行います。DA権限が必要で、ルートドメイン内にいる必要があります。 間違ったデータを使用すると、非常に醜いログが表示されることに注意してください。
以前に、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」が貴重なリソースです。
2つの信頼されたキーがあります。1つは Child --> Parent 用、もう1つは Parent --> Child 用です。 現在のドメインで使用されているものを次のコマンドで確認できます:
エンタープライズ管理者として、SID-Historyインジェクションを悪用して子/親ドメインに昇格します:
構成命名コンテキスト(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攻撃を実行できます。
これに関する詳細は、DAからEAへのESC5で読むことができます。ADCSがないシナリオでは、攻撃者は必要なコンポーネントを設定する能力を持っており、子ドメイン管理者からエンタープライズ管理者への昇格で議論されています。
このシナリオでは、あなたのドメインが外部のドメインに信頼されています。これにより、不明な権限が与えられます。あなたは、あなたのドメインのどのプリンシパルが外部ドメインに対してどのアクセス権を持っているかを見つけ出し、それを悪用しようとする必要があります。
このシナリオでは、あなたのドメインが異なるドメインのプリンシパルに特権を信頼しています。
しかし、ドメインが信頼されると、信頼されたドメインは予測可能な名前のユーザーを作成し、信頼されたパスワードをパスワードとして使用します。これは、信頼するドメインのユーザーにアクセスして信頼されたドメインに入ることが可能であり、それを列挙し、さらに特権を昇格させることを試みることを意味します。
信頼されたドメインを侵害する別の方法は、ドメイン信頼の逆方向に作成されたSQL信頼リンクを見つけることです(これはあまり一般的ではありません)。
信頼されたドメインを侵害する別の方法は、信頼されたドメインのユーザーがアクセスできるマシンで待機し、RDPを介してログインすることです。次に、攻撃者はRDPセッションプロセスにコードを注入し、そこから被害者の元のドメインにアクセスできます。 さらに、もし被害者がハードドライブをマウントしている場合、攻撃者はRDPセッションプロセスからハードドライブのスタートアップフォルダーにバックドアを保存することができます。この技術はRDPInceptionと呼ばれます。
フォレスト信頼を越えたSID履歴属性を利用した攻撃のリスクは、SIDフィルタリングによって軽減されます。これはすべてのインターフォレスト信頼でデフォルトで有効になっています。これは、マイクロソフトの立場に従い、フォレストをセキュリティ境界として考慮し、イントラフォレスト信頼が安全であるという前提に基づいています。
しかし、注意点があります:SIDフィルタリングはアプリケーションやユーザーアクセスに影響を与える可能性があり、そのため時折無効にされることがあります。
インターフォレスト信頼に対して、選択的認証を使用することで、2つのフォレストのユーザーが自動的に認証されないようにします。代わりに、信頼するドメインまたはフォレスト内のドメインやサーバーにアクセスするためには明示的な権限が必要です。
これらの対策は、書き込み可能な構成名コンテキスト(NC)の悪用や信頼アカウントへの攻撃から保護するものではないことに注意が必要です。
ドメイン管理者の制限: ドメイン管理者はドメインコントローラーにのみログインできるようにし、他のホストでの使用を避けることを推奨します。
サービスアカウントの特権: サービスはセキュリティを維持するためにドメイン管理者(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)