51 KiB
Active Directory Methodology
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)で!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスワッグを入手する
- 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内の主要な概念には次のものがあります:
- ディレクトリ - Active Directoryオブジェクトに関するすべての情報を保持します。
- オブジェクト - ユーザー、グループ、または共有フォルダなどのディレクトリ内のエンティティを示します。
- ドメイン - ディレクトリオブジェクトのコンテナとして機能し、各々が独自のオブジェクトコレクションを維持できる複数のドメインがフォレスト内に共存できる機能を持ちます。
- ツリー - 共通のルートドメインを共有するドメインのグループ。
- フォレスト - Active Directoryの組織構造の頂点であり、相互に信頼関係を持つ複数のツリーから構成されます。
**Active Directoryドメインサービス(AD DS)**は、ネットワーク内での中央集中管理と通信に不可欠なさまざまなサービスを包括しています。これらのサービスには次のものが含まれます:
- ドメインサービス - ユーザーとドメインの間のデータストレージを一元化し、認証および検索機能を含む相互作用を管理します。
- 証明書サービス - 安全なデジタル証明書の作成、配布、および管理を監督します。
- 軽量ディレクトリサービス - LDAPプロトコルを介してディレクトリ対応アプリケーションをサポートします。
- ディレクトリフェデレーションサービス - 複数のWebアプリケーションでユーザーを認証するシングルサインオン機能を提供します。
- 権利管理 - 著作権物資の不正な配布と使用を規制することで保護を支援します。
- 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サーバーを列挙するためのより詳細なガイドはこちら:
{% content-ref url="../../network-services-pentesting/pentesting-smb.md" %} pentesting-smb.md {% endcontent-ref %}
- LDAPの列挙
nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>
- LDAPの列挙方法についてのより詳細なガイドはこちら(匿名アクセスに特に注意を払ってください):
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}
- ネットワークを汚染する
- Responderを使用してサービスをなりすまし、資格情報を収集します
- リレーアタックを悪用してホストにアクセス
- evil-SSDPを使用して偽のUPnPサービスを公開し、資格情報を収集します
- OSINT:
- 内部文書、ソーシャルメディア、ドメイン環境内のサービス(主にWeb)、および公開されている情報からユーザー名/名前を抽出します。
- 会社の従業員の完全な名前を見つけた場合、異なる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 を返し、ユーザーが事前認証を実行する必要があることを示します。
./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
{% hint style="warning" %} このGitHubリポジトリとこのリポジトリでユーザー名のリストを見つけることができます。
ただし、これより前に実行すべきreconステップで会社で働いている人の名前を持っているはずです。名前と姓を使用して、namemash.pyスクリプトを使用して潜在的な有効なユーザー名を生成できます。 {% endhint %}
1つまたは複数のユーザー名を知っている場合
よし、有効なユーザー名がわかっているがパスワードがわからない場合は、次のことを試してみてください:
- ASREPRoast: ユーザーが属性 DONT_REQ_PREAUTH を持っていない場合、そのユーザーのためにAS_REPメッセージをリクエストして、ユーザーのパスワードの派生によって暗号化されたデータを含むメッセージを取得できます。
- パスワードスプレー: 発見されたユーザーごとに最も一般的なパスワードを試してみてください。おそらく、一部のユーザーが簡単なパスワードを使用しているかもしれません(パスワードポリシーに注意してください)。
- ユーザーのメールサーバーへのアクセスを試みるために、OWAサーバーにもスプレーを行うことができます。
{% content-ref url="password-spraying.md" %} password-spraying.md {% endcontent-ref %}
LLMNR/NBT-NSポイズニング
ネットワークのいくつかのプロトコルをポイズニングして、いくつかのチャレンジハッシュを取得してクラックできるかもしれません:
{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}
NTMLリレー
Active Directoryを列挙できた場合、より多くの電子メールアドレスとネットワークの理解が得られます。NTML リレーアタックを強制して、AD環境へのアクセスを取得できるかもしれません。
NTLMクレデンシャルの盗難
他のPCや共有にアクセスできる場合、nullまたはguestユーザーを使用して、アクセスされるとNTML認証をトリガーするような(SCFファイルなどの)ファイルを配置できます。これにより、NTLMチャレンジを盗んでクラックできます:
{% content-ref url="../ntlm/places-to-steal-ntlm-creds.md" %} places-to-steal-ntlm-creds.md {% endcontent-ref %}
資格情報/セッションを使用したActive Directoryの列挙
このフェーズでは、有効なドメインアカウントの資格情報またはセッションを侵害する必要があります。有効な資格情報またはドメインユーザーとしてのシェルがある場合、以前に与えられたオプションは他のユーザーを侵害するためのオプションであることを覚えておく必要があります。
認証された列挙を開始する前に、Kerberosダブルホップ問題を知っておく必要があります。
{% content-ref url="kerberos-double-hop-problem.md" %} kerberos-double-hop-problem.md {% endcontent-ref %}
列挙
アカウントを侵害することは、全体のドメインを侵害し始める大きなステップです。なぜなら、Active Directory列挙を開始できるからです:
ASREPRoastに関しては、今やすべての脆弱なユーザーを見つけることができ、パスワードスプレーに関しては、すべてのユーザーのリストを取得し、侵害されたアカウントのパスワード、空のパスワード、および新しい有望なパスワードを試すことができます。
- 基本的なreconを実行するためのCMDを使用できます
- よりステルス性の高い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を使用してドメインを列挙できます。
- 自動化ツールを試すこともできます:
- 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チケットを取得し、その暗号化をクラックすることを含みます。この暗号化は、ユーザーパスワードに基づいており、オフラインで行われます。
詳細は以下を参照してください:
{% content-ref url="kerberoast.md" %} kerberoast.md {% endcontent-ref %}
リモート接続(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チャレンジを盗むことができます。
{% content-ref url="../ntlm/places-to-steal-ntlm-creds.md" %} places-to-steal-ntlm-creds.md {% endcontent-ref %}
CVE-2021-1675/CVE-2021-34527 PrintNightmare
この脆弱性により、認証済みユーザーはドメインコントローラーを侵害することができました。
{% content-ref url="printnightmare.md" %} printnightmare.md {% endcontent-ref %}
特権昇格:特権付き資格情報/セッションを使用したアクティブディレクトリ上で
次のテクニックにおいては、通常のドメインユーザーでは不十分であり、これらの攻撃を実行するために特別な特権/資格情報が必要です。
ハッシュ抽出
AsRepRoast、Password Spraying、Kerberoast、Responder(リレーを含む)、EvilSSDP、ローカル特権の昇格を使用して、いくつかのローカル管理者アカウントを侵害できたことを願っています。
その後、メモリとローカルに保存されているすべてのハッシュをダンプする時が来ました。
異なる方法でハッシュを取得するためのこのページを読んでください。
ハッシュの渡し
ユーザーのハッシュを持っている場合、それを使用してそのユーザーをなりすますことができます。
そのハッシュを使用してNTLM認証を実行するツールを使用する必要があります。または新しいセッションログオンを作成し、そのハッシュをLSASS内に注入することができます。そのため、**NTLM認証が実行されると、そのハッシュが使用されます。**最後のオプションがmimikatzが行うことです。
詳細についてはこのページを参照してください。
ハッシュの渡し/キーの渡し
この攻撃は、一般的なPass The Hash over NTLMプロトコルの代替として、ユーザーNTLMハッシュを使用してKerberosチケットを要求することを目的としています。したがって、これはNTLMプロトコルが無効になっており、認証プロトコルとしてKerberosのみが許可されているネットワークで特に有用です。
{% content-ref url="over-pass-the-hash-pass-the-key.md" %} over-pass-the-hash-pass-the-key.md {% endcontent-ref %}
チケットの渡し
**Pass The Ticket (PTT)**攻撃方法では、攻撃者はユーザーのパスワードやハッシュ値ではなく、ユーザーの認証チケットを盗みます。この盗まれたチケットは、ユーザーをなりすまして、ネットワーク内のリソースやサービスに不正アクセスを取得します。
{% content-ref url="pass-the-ticket.md" %} pass-the-ticket.md {% endcontent-ref %}
資格情報の再利用
ローカル管理者のハッシュまたはパスワードを持っている場合、それを使用して他の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 +
{% hint style="warning" %} これはかなりノイズが多いため、LAPS がこれを軽減します。 {% endhint %}
MSSQLの悪用と信頼されたリンク
ユーザーがMSSQLインスタンスにアクセス権を持っている場合、それを使用してMSSQLホストでコマンドを実行したり(SAとして実行されている場合)、NetNTLM ハッシュを盗むか、リレー攻撃を実行することができるかもしれません。
また、MSSQLインスタンスが別のMSSQLインスタンスに信頼されている場合。ユーザーが信頼されたデータベースに権限を持っている場合、その信頼関係を使用して他のインスタンスでもクエリを実行できます。これらの信頼関係は連鎖する可能性があり、ユーザーは誤って構成されたデータベースを見つけてコマンドを実行できるかもしれません。
データベース間のリンクはフォレストトラストを超えて機能します。
{% content-ref url="abusing-ad-mssql.md" %} abusing-ad-mssql.md {% endcontent-ref %}
制約のない委任
ADS_UF_TRUSTED_FOR_DELEGATION属性を持つコンピューターオブジェクトを見つけた場合、そのコンピューターでドメイン権限を持っていると、そのコンピューターにログインするすべてのユーザーのメモリからTGTをダンプできます。
したがって、ドメイン管理者がコンピューターにログインすると、そのTGTをダンプしてチケット渡しを使用して彼をなりすますことができます。
制約付き委任を使用すると、プリントサーバーを自動的に侵害することさえできます(うまくいけばDCであることが望ましい)。
{% content-ref url="unconstrained-delegation.md" %} unconstrained-delegation.md {% endcontent-ref %}
制約付き委任
ユーザーまたはコンピューターが「制約付き委任」に許可されている場合、そのユーザー/コンピューターはコンピューター内の一部のサービスにアクセスするために任意のユーザーをなりすますことができます。
その後、このユーザー/コンピューターのハッシュを妥協すると、一部のサービスにアクセスするために任意のユーザー(ドメイン管理者さえも)をなりすますことができます。
{% content-ref url="constrained-delegation.md" %} constrained-delegation.md {% endcontent-ref %}
リソースベースの制約委任
リモートコンピューターのActive DirectoryオブジェクトにWRITE権限があると、昇格権限を持つコードの実行が可能になります:
{% content-ref url="resource-based-constrained-delegation.md" %} resource-based-constrained-delegation.md {% endcontent-ref %}
ACLの悪用
侵害されたユーザーは、いくつかのドメインオブジェクトに対する興味深い権限を持っている可能性があり、これにより横断的に移動したり、権限を昇格したりできるかもしれません。
{% content-ref url="acl-persistence-abuse/" %} acl-persistence-abuse {% endcontent-ref %}
プリンタースプーラーサービスの悪用
ドメイン内でスプールサービスがリスニングされていることがわかれば、これを悪用して新しい資格情報を取得し、権限を昇格させることができます。
{% content-ref url="acl-persistence-abuse/" %} printers-spooler-service-abuse {% endcontent-ref %}
サードパーティーセッションの悪用
他のユーザーが侵害されたマシンにアクセスする場合、そのユーザーのメモリから資格情報を収集したり、彼らのプロセスにビーコンをインジェクトしてなりすますことができます。
通常、ユーザーはRDP経由でシステムにアクセスしますので、ここではサードパーティーRDPセッションに対していくつかの攻撃を実行する方法があります:
{% content-ref url="rdp-sessions-abuse.md" %} rdp-sessions-abuse.md {% endcontent-ref %}
LAPS
LAPSは、ドメインに参加したコンピューターのローカル管理者パスワードを管理するシステムを提供し、ランダム化され、一意で頻繁に変更されることを保証します。これらのパスワードはActive Directoryに保存され、アクセスは認可されたユーザーのみが制御します。これらのパスワードにアクセスする十分な権限があれば、他のコンピューターにピボットすることが可能になります。
{% content-ref url="laps.md" %} laps.md {% endcontent-ref %}
証明書の盗難
侵害されたマシンから証明書を収集することは、環境内で権限を昇格させる方法となります:
{% content-ref url="ad-certificates/certificate-theft.md" %} certificate-theft.md {% endcontent-ref %}
証明書テンプレートの悪用
脆弱なテンプレートが構成されている場合、それらを悪用して権限を昇格させることが可能です:
{% content-ref url="ad-certificates/domain-escalation.md" %} domain-escalation.md {% endcontent-ref %}
高権限アカウントでの事後侵入
ドメイン資格情報のダンプ
ドメイン管理者またはさらにエンタープライズ管理者権限を取得すると、ドメインデータベース: _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)チケットを作成します。この方法は、サービス権限にアクセスするために使用されます。
{% content-ref url="silver-ticket.md" %} silver-ticket.md {% endcontent-ref %}
ゴールデンチケット
ゴールデンチケット攻撃は、Active Directory(AD)環境でkrbtgtアカウントのNTLMハッシュにアクセスする攻撃です。このアカウントは、すべての**チケット発行チケット(TGT)**に署名するために使用される特別なアカウントであり、ADネットワーク内で認証するために不可欠です。
攻撃者がこのハッシュを取得すると、任意のアカウントのTGTを作成できるため(シルバーチケット攻撃)、選択したアカウントにアクセスできます。
{% content-ref url="golden-ticket.md" %} golden-ticket.md {% endcontent-ref %}
ダイヤモンドチケット
これらは、一般的なゴールデンチケットの検出メカニズムをバイパスする方法で作成されたゴールデンチケットのようなものです。
{% content-ref url="diamond-ticket.md" %} diamond-ticket.md {% endcontent-ref %}
証明書アカウントの永続化
アカウントの証明書を持っているか、それらを要求できるということは、そのアカウントで永続化できる非常に良い方法です(パスワードを変更しても):
{% content-ref url="ad-certificates/account-persistence.md" %} account-persistence.md {% endcontent-ref %}
証明書ドメインの永続化
証明書を使用することで、ドメイン内で高い権限で永続化することも可能です:
{% content-ref url="ad-certificates/domain-persistence.md" %} domain-persistence.md {% endcontent-ref %}
AdminSDHolderグループ
Active DirectoryのAdminSDHolderオブジェクトは、特権グループ(ドメイン管理者やエンタープライズ管理者など)のセキュリティを確保するために、これらのグループ全体に標準の**アクセス制御リスト(ACL)**を適用します。ただし、この機能は悪用される可能性があります。攻撃者がAdminSDHolderのACLを変更して通常のユーザーに完全アクセス権を与えると、そのユーザーはすべての特権グループに広範な制御権を持つことになります。このセキュリティ対策は保護を目的としていますが、監視が十分でない場合、不正なアクセスを許可する可能性があります。
AdminDSHolderグループに関する詳細情報はこちら。
DSRM資格情報
すべての**ドメインコントローラー(DC)**には、ローカル管理者アカウントが存在します。このようなマシンで管理者権限を取得すると、mimikatzを使用してローカル管理者ハッシュを抽出し、このパスワードを使用できるようにするためにレジストリの変更が必要となり、ローカル管理者アカウントへのリモートアクセスが可能となります。
{% content-ref url="dsrm-credentials.md" %} dsrm-credentials.md {% endcontent-ref %}
ACL永続化
将来的に権限を昇格できるように、特定のドメインオブジェクトに対してユーザーにいくつかの特別な権限を与えることができます。
{% content-ref url="acl-persistence-abuse/" %} acl-persistence-abuse {% endcontent-ref %}
セキュリティ記述子
セキュリティ記述子は、オブジェクトが持つオブジェクトに対する権限を格納するために使用されます。オブジェクトのセキュリティ記述子にわずかな変更を加えるだけで、特権グループのメンバーである必要がなく、そのオブジェクトに対して非常に興味深い権限を取得できます。
{% content-ref url="security-descriptors.md" %} security-descriptors.md {% endcontent-ref %}
スケルトンキー
LSASSのメモリを変更して、すべてのドメインアカウントにアクセス権を与えるユニバーサルパスワードを確立します。
{% content-ref url="skeleton-key.md" %} skeleton-key.md {% endcontent-ref %}
カスタムSSP
ここでSSP(セキュリティサポートプロバイダー)とは何かを学びます。
独自のSSPを作成して、マシンへのアクセスに使用される資格情報を平文でキャプチャすることができます。
{% content-ref url="custom-ssp.md" %} custom-ssp.md {% endcontent-ref %}
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
{% hint style="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$"'
{% endhint %}
SID-History Injection
子/親ドメインへの信頼を悪用して、SID-Historyインジェクションを使用してEnterprise adminにエスカレートします:
{% content-ref url="sid-history-injection.md" %} sid-history-injection.md {% endcontent-ref %}
書き込み可能な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
このシナリオでは、あなたのドメインが外部のドメインに信頼されており、それに対して未確定の権限を持っています。あなたのドメインのどの主体が外部ドメインにどのようなアクセス権を持っているかを見つけ、それを悪用しようとします:
{% content-ref url="external-forest-domain-oneway-inbound.md" %} external-forest-domain-oneway-inbound.md {% endcontent-ref %}
外部フォレストドメイン - ワンウェイ(アウトバウンド)
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
このシナリオでは、あなたのドメインが別のドメインからの主体に一部の権限を委任しています。
ただし、信頼するドメインによって信頼されるドメインが作成したユーザーは、予測可能な名前を使用して、信頼されたパスワードをパスワードとして使用します。つまり、信頼するドメインからのユーザーにアクセスして、信頼されたドメインに侵入し、特権をエスカレートしようとする可能性があります:
{% content-ref url="external-forest-domain-one-way-outbound.md" %} external-forest-domain-one-way-outbound.md {% endcontent-ref %}
信頼されたドメインを侵害する別の方法は、ドメイン信頼の逆方向に作成されたSQL信頼リンクを見つけることです(これは非常に一般的ではありません)。
信頼されたドメインを侵害する別の方法は、信頼されたドメインのユーザーがアクセスできるマシンで待機し、RDP経由でログインすることができるようにすることです。その後、攻撃者はRDPセッションプロセスにコードをインジェクトし、そこから被害者の元のドメインにアクセスできます。
さらに、被害者がハードドライブをマウントしている場合、攻撃者はRDPセッションプロセスからハードドライブのスタートアップフォルダーにバックドアを保存できます。この技術はRDPInceptionと呼ばれます。
{% content-ref url="rdp-sessions-abuse.md" %} rdp-sessions-abuse.md {% endcontent-ref %}
ドメイン信頼の乱用の緩和
SIDフィルタリング:
- フォレスト間の信頼を利用した攻撃のリスクは、SIDフィルタリングによって軽減されます。これは、フォレスト間の信頼にデフォルトで有効になっています。これは、フォレストをセキュリティの境界と見なすMicrosoftの立場に基づいています。
- ただし、SIDフィルタリングには注意点があります。SIDフィルタリングは、アプリケーションやユーザーアクセスに支障をきたす可能性があり、時折無効化されることがあります。
選択的認証:
- フォレスト間の信頼において、選択的認証を使用することで、2つのフォレストからのユーザーが自動的に認証されないようになります。代わりに、ユーザーが信頼するドメインまたはフォレスト内のドメインやサーバーにアクセスするためには、明示的なアクセス許可が必要です。
- これらの対策は、書き込み可能な構成名前コンテキスト(NC)の悪用や信頼アカウントへの攻撃に対して保護されないことに注意することが重要です。
ired.teamでドメイン信頼に関する詳細情報を入手する。
AD -> Azure & Azure -> AD
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %}
一般的な防御策
資格情報保護の防御策
- ドメイン管理者の制限: ドメイン管理者はドメインコントローラーにのみログインできるように制限されることが推奨されます。他のホストでの使用は避けるべきです。
- サービスアカウントの特権: サービスはドメイン管理者(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検出を回避するために、ドメインコントローラーから直接実行するのではなく、非ドメインコントローラーから実行することが推奨されます。
参考文献
- 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
htARTE(HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ こちら!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したり、HackTricksをPDFでダウンロードしたりするには、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksのスウェグを手に入れる
- 独占的なNFTsを含む、The PEASS Familyのコレクションを発見
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する。