57 KiB
Active Directory Methodology
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
基本的な概要
Active Directoryは、ネットワーク管理者がネットワーク内のドメイン、ユーザー、およびオブジェクトを作成および管理することを可能にします。たとえば、管理者はユーザーグループを作成し、サーバー上の特定のディレクトリへのアクセス権を与えることができます。ネットワークが成長するにつれて、Active Directoryは大量のユーザーを論理的なグループやサブグループに整理し、各レベルでアクセス制御を提供します。
Active Directoryの構造には、以下の3つの主要な階層があります:1)ドメイン、2)ツリー、および3)フォレスト。同じデータベースを使用する複数のオブジェクト(ユーザーまたはデバイス)は、単一のドメインにグループ化される場合があります。複数のドメインは、ツリーと呼ばれる単一のグループに組み合わされることができます。複数のツリーは、フォレストと呼ばれるコレクションにグループ化されることができます。これらのレベルのそれぞれに特定のアクセス権と通信特権を割り当てることができます。
Active Directoryは、次のようなさまざまなサービスを提供します。これらのサービスは、「Active Directoryドメインサービス」とも呼ばれます。
- ドメインサービス - 集中データを格納し、ユーザーとドメイン間の通信を管理します。ログイン認証や検索機能を含みます。
- 証明書サービス - 安全な証明書の作成、配布、および管理を行います。
- 軽量ディレクトリサービス - オープンな(LDAP)プロトコルを使用してディレクトリ対応アプリケーションをサポートします。
- ディレクトリフェデレーションサービス - シングルサインオン(SSO)を提供し、1つのセッションで複数のWebアプリケーションでユーザーを認証します。
- 権利管理 - 著作権情報を保護し、デジタルコンテンツの未承認使用と配布を防止します。
- DNSサービス - ドメイン名を解決するために使用されます。
AD DSは、Windows Server(Windows Server 10を含む)に含まれており、クライアントシステムを管理するために設計されています。通常のWindowsバージョンを実行しているシステムには、AD DSの管理機能はありませんが、Active Directoryをサポートしています。これは、ユーザーが正しいログイン資格情報を持っている場合、任意のWindowsコンピュータがWindowsワークグループに接続できることを意味します。
From: https://techterms.com/definition/active_directory
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サーバーの列挙についての詳細
- リレーアタックを悪用してホストにアクセスする
- 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のペントestingとLDAPのペントestingページを確認してください。
- 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リポジトリとstatistically-likely-usernamesにユーザー名のリストがあります。
ただし、これより前の調査ステップで会社で働いている人々の名前を知っている必要があります。名前と姓を持っていれば、スクリプト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を列挙するためには、Active Directoryの列挙ツールを使用することができます。これにより、メールアドレスが増え、ネットワークの理解が深まるかもしれません。NTML リレーアタックを強制することで、AD環境へのアクセスを取得できるかもしれません。
NTLMクレデンシャルの盗難
nullまたはguestユーザーを使用して他のPCや共有にアクセスできる場合、SCFファイルなどのファイルを配置することができます。これらのファイルがいずれかの方法でアクセスされると、あなたに対してNTML認証がトリガーされるため、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に関しては、可能な脆弱なユーザーをすべて見つけることができます。パスワードスプレーに関しては、すべてのユーザー名のリストを取得し、侵害されたアカウントのパスワード、空のパスワード、および有望な新しいパスワードを試すことができます。
- 基本的なリコンのためのCMDを使用することができます。
- よりステルス性の高いpowershell for reconを使用することもできます。
- powerviewを使用して詳細な情報を抽出することもできます。
- Active Directoryでのリコンには、BloodHoundという素晴らしいツールもあります。ステルス性はあまり高くありません(使用する収集方法によります)が、それを気にしないのであれば、ぜひ試してみてください。ユーザーがRDPできる場所を見つけたり、他のグループへのパスを見つけたりできます。
- 他の自動化されたAD列挙ツールには、AD Explorer、ADRecon、Group3r、PingCastleがあります。
- ADのDNSレコード(ad-dns-records.md)には興味深い情報が含まれている場合があります。
- ディレクトリを列挙するためのGUIツールとして、SysInternal SuiteのAdExplorer.exeを使用することができます。
- ldapsearchを使用してLDAPデータベースを検索し、userPassword&_unixUserPassword_フィールド、または_Description_フィールドなどの資格情報を検索することもできます。他の方法については、PayloadsAllTheThingsのAD User commentのPasswordを参照してください。
- 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
Kerberoast(Kerberoast)
Kerberoastの目的は、ドメインユーザーアカウントの代わりに実行されるサービスのためのTGSチケットを収集することです。これらのTGSチケットの一部は、ユーザーパスワードから派生したキーで暗号化されています。その結果、これらの資格情報はオフラインでクラックされる可能性があります。 詳細については、kerberoast.mdを参照してください。
リモート接続(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 %}
特権昇格(特権付きの資格情報/セッションを使用した)Active Directory
以下のテクニックでは、通常のドメインユーザーでは不十分で、これらの攻撃を実行するために特別な特権/資格情報が必要です。
ハッシュの抽出
AsRepRoast、Password Spraying、Kerberoast、Responder(リレーを含む)、EvilSSDP、特権の昇格(ローカル)を使用して、いくつかのローカル管理者アカウントを侵害することができたことを願っています。
その後、メモリとローカルに保存されているすべてのハッシュをダンプする時が来ました。
異なる方法でハッシュを取得するためのこのページを読んでください。
ハッシュの渡し
ユーザーのハッシュを取得したら、それをなりすましに使用することができます。
そのハッシュを使用してNTLM認証を実行するツールを使用する必要があります。または、新しいセッションログオンを作成し、そのハッシュをLSASSに注入することもできます。そのため、**NTLM認証が実行されると、そのハッシュが使用されます。**最後のオプションは、mimikatzが行うことです。
詳細については、このページを読んでください。
Over Pass the Hash/Pass the Key
この攻撃は、一般的な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 Keyと似ていますが、ハッシュを使用してチケットを要求する代わりに、チケット自体が盗まれ、所有者として認証に使用されます。
{% 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ホストでコマンドを実行したり、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 %}
リソースベースの制約委任
リモートコンピュータで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 %}
プリンタースプーラーサービスの乱用
ドメイン内でSpoolサービスがリッスンしている場合、それを乱用して新しい資格情報を取得し、特権をエスカレートすることができるかもしれません。
Spoolerサービスの乱用方法の詳細はこちら
サードパーティのセッションの乱用
他のユーザーが侵害されたマシンにアクセスする場合、メモリから資格情報を収集し、さらには彼らのプロセスにビーコンをインジェクトして彼らをなりすますことができます。
通常、ユーザーはRDP経由でシステムにアクセスしますので、ここではサードパーティのRDPセッションに対していくつかの攻撃を実行する方法があります。
{% content-ref url="rdp-sessions-abuse.md" %} rdp-sessions-abuse.md {% endcontent-ref %}
LAPS
LAPSを使用すると、ドメインに参加しているコンピュータのローカル管理者パスワード(ランダム化、一意で定期的に変更される)を管理することができます。これらのパスワードはActive Directoryに集中的に保存され、ACLを使用して認可されたユーザーに制限されます。これらのパスワードを読み取るための十分な権限がある場合、他のコンピュータに移動することができます。
{% 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)をダンプすることができます。
DCSync攻撃の詳細についてはこちらを参照してください。
特権昇格としての永続化
以前に議論されたいくつかの技術は永続化に使用することができます。
例えば、次のようにすることができます。
- ユーザーを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を作成することに基づいています。したがって、特権アクセスを持つユーザーとしてカスタムTGSを偽造することで、そのサービスにアクセスすることができます。
{% content-ref url="silver-ticket.md" %} silver-ticket.md {% endcontent-ref %}
ゴールデンチケット
有効なTGTとして任意のユーザーを作成することができます。これは、krbtgt ADアカウントのNTLMハッシュを使用して行われます。TGSを偽造するよりも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グループ
AdminSDHolderオブジェクトのアクセス制御リスト(ACL)は、Active Directoryの**「保護されたグループ」およびそのメンバーに「権限」をコピーするためのテンプレートとして使用されます。保護されたグループには、Domain Admins、Administrators、Enterprise Admins、Schema Admins、Backup Operators、krbtgtなどの特権グループが含まれます。
デフォルトでは、このグループのACLは、すべての「保護されたグループ」内にコピーされます。これは、これらの重要なグループへの意図的または偶発的な変更を防ぐために行われます。ただし、攻撃者が例えばグループAdminSDHolder**のACLを変更して、通常のユーザーに完全な権限を与えると、このユーザーは保護されたグループ内のすべてのグループに対して完全な権限を持つことになります(1時間以内に)。
そして、1時間以内にこのユーザーをDomain Adminsから削除しようとすると、ユーザーはグループに戻ります。
AdminSDHolderグループの詳細についてはこちらを参照してください。
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特権とルートドメイン内にいる必要があります。
ただし、間違ったデータを使用すると、非常に醜いログが表示されます。
{% content-ref url="dcshadow.md" %} dcshadow.md {% endcontent-ref %}
LAPS永続性
以前、LAPSパスワードを読み取るための十分な権限がある場合に特権エスカレーションする方法について説明しました。ただし、これらのパスワードは永続性を維持するためにも使用できます。
確認してください:
{% content-ref url="laps.md" %} laps.md {% endcontent-ref %}
フォレスト特権エスカレーション - ドメイン信頼関係
Microsoftは、ドメインはセキュリティ境界ではなく、フォレストがセキュリティ境界であると考えています。これは、フォレスト内のドメインを侵害すると、フォレスト全体を侵害する可能性があることを意味します。
基本情報
高レベルでは、ドメイン信頼関係は、1つのドメインのユーザーが別のドメインで認証したり、セキュリティプリンシパルとして動作したりするための能力を確立します。
基本的に、信頼関係は2つのドメインの認証システムをリンクし、リファラルシステムを介して認証トラフィックが流れることを可能にするだけです。
2つのドメインが互いに信頼すると、鍵が交換されます。これらの鍵は、各ドメインのDCに保存され、鍵は信頼の基礎となります。
ユーザーが信頼するドメインのサービスにアクセスしようとすると、ユーザーは自身のドメインのDCに対して相互領域TGTを要求します。DCはこのTGTをクライアントに提供しますが、これは両ドメインが交換した相互領域鍵で暗号化/署名されています。その後、クライアント
異なる信頼関係
重要なことは、信頼関係は片方向または双方向のいずれかであることです。双方向の場合、両方のドメインは互いを信頼しますが、片方向の信頼関係では、1つのドメインが信頼されるドメインであり、もう1つが信頼するドメインです。最後の場合、信頼されるドメインから信頼するドメイン内のリソースにのみアクセスできます。
ドメインAがドメインBを信頼している場合、Aは信頼するドメインであり、Bは信頼されるドメインです。さらに、ドメインAでは、これはアウトバウンド信頼であり、ドメインBでは、これはインバウンド信頼です。
異なる信頼関係
- 親-子 - 同じフォレストの一部 - 子ドメインは親との暗黙の双方向推移的な信頼を保持します。これはおそらく最も一般的な信頼のタイプです。
- クロスリンク - 参照時間を改善するための子ドメイン間の「ショートカット信頼」。通常、複雑なフォレストの参照はフォレストルートまでフィルタリングされ、その後ターゲットドメインに戻る必要があるため、地理的に広がったシナリオでは、クロスリンクを使用して認証時間を短縮することができます。
- 外部 - 異なるドメイン間で暗黙の非推移的な信頼が作成されます。外部信頼は、既にフォレスト信頼によって結合されていないフォレスト外のドメインへのアクセスを提供します。外部信頼は、後で説明するセキュリティ保護であるSIDフィルタリングを強制します。
- ツリールート - フォレストルートドメインと新しいツリールートの間の暗黙の双方向推移的な信頼。私はあまりツリールート信頼に遭遇したことはありませんが、Microsoftのドキュメントによれば、フォレスト内で新しいドメインツリーを作成するときに作成されます。これらはフォレスト内の信頼であり、双方向推移性を保持しながら、ツリーに別のドメイン名(child.parent.comではなく)を持たせることができます。
- フォレスト - 2つのフォレストルートドメイン間の推移的な信頼。フォレスト信頼もSIDフィルタリングを強制します。
- MIT - Windows以外のRFC4120準拠のKerberosドメインとの信頼。将来的にはMIT信頼についてもっと詳しく調査したいと思っています。
信頼関係の他の違い
- 信頼関係は推移的(AがBを信頼し、BがCを信頼する場合、AがCを信頼する)または非推移的である場合があります。
- 信頼関係は双方向信頼(お互いを信頼する)または片方向信頼(片方だけがもう一方を信頼する)として設定できます。
攻撃経路
- 信頼関係を列挙する
- セキュリティプリンシパル(ユーザー/グループ/コンピュータ)が他のドメインのリソースにアクセスできるかどうかを確認します。おそらく、ACEエントリまたは他のドメインのグループに所属していることによるドメイン間の関係を探します。この場合、kerberoastも別のオプションです。
- ドメインをピボットできるアカウントを侵害します。
1つのドメインから別の外部/信頼するドメインのリソースにアクセスできるセキュリティプリンシパル(ユーザー/グループ/コンピュータ)には、次の3つの主要な方法があります。
- 個々のマシンのローカルグループに追加されることがあります。たとえば、サーバーのローカルの「Administrators」グループです。
- 外部ドメインのグループに追加されることがあります。信頼のタイプとグループのスコープにはいくつかの注意点がありますが、後で説明します。
- アクセス制御リストの主体として追加されることがあります。私たちにとって最も興味深いのは、DACLのACE内の主体としての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
{% hint style="warning" %}
信頼されたキーは2つあります。1つは「子 → 親」用で、もう1つは「親 → 子」用です。
現在のドメインで使用されているキーを次のように取得できます。
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インジェクションを利用して、エンタープライズ管理者として子/親ドメインにエスカレーションします。
{% content-ref url="sid-history-injection.md" %} sid-history-injection.md {% endcontent-ref %}
書き込み可能なConfiguration NCの悪用
Configuration NCは、フォレストの設定情報の主要なリポジトリであり、フォレスト内のすべてのDCにレプリケートされます。さらに、フォレスト内のすべての書き込み可能なDC(読み取り専用DCではないDC)は、Configuration NCの書き込み可能なコピーを保持しています。これを悪用するには、(子)DCでSYSTEMとして実行する必要があります。
以下で説明するさまざまな方法で、ルートドメインを侵害することができます。
ルートDCサイトにGPOをリンクする
Configuration NCのSitesコンテナには、ADフォレストのドメインに参加しているコンピュータのすべてのサイトが含まれています。フォレスト内の任意のDCでSYSTEMとして実行する場合、フォレストルートDCのサイト(またはサイト)にGPOをリンクし、これらを侵害することができます。
詳細はこちらを参照してください:Bypass SID filtering research.
フォレスト内の任意のgMSAを侵害する
攻撃は、対象ドメインの特権gMSAに依存しています。
フォレスト内のgMSAのパスワードを計算するために使用されるKDSルートキーは、Configuration NCに格納されています。フォレスト内の任意のDCでSYSTEMとして実行する場合、KDSルートキーを読み取り、フォレスト内の任意のgMSAのパスワードを計算することができます。
詳細はこちらを参照してください:Golden gMSA trust attack from child to parent.
スキーマ変更攻撃
攻撃には、攻撃者が特権のADオブジェクトが作成されるのを待つ必要があります。
フォレスト内の任意のDCでSYSTEMとして実行する場合、ADスキーマのすべてのクラスに対して任意のユーザーに完全な制御権限を付与することができます。この制御権限は、侵害されたプリンシパルに完全な制御権限を付与するACEをADオブジェクトのデフォルトのセキュリティ記述子に作成するために悪用することができます。変更されたADオブジェクトタイプのすべての新しいインスタンスには、このACEがあります。
詳細はこちらを参照してください:Schema change trust attack from child to parent.
DAからEAへのADCS ESC5を使用したエスカレーション
ADCS ESC5(脆弱なPKIオブジェクトアクセス制御)攻撃は、PKIオブジェクトの制御を悪用して、フォレスト内の任意のユーザーとして認証するために悪用される脆弱な証明書テンプレートを作成します。すべてのPKIオブジェクトはConfiguration NCに格納されているため、フォレスト内の任意の書き込み可能な(子)DCを侵害している場合、ESC5を実行することができます。
詳細はこちらを参照してください:From DA to EA with ESC5
ADフォレストにADCSがない場合、攻撃者はこちらで説明されているように必要なコンポーネントを作成することができます:Escalating from child domain’s admins to enterprise admins in 5 minutes by abusing AD CS, a follow up.
外部フォレストドメイン - 片方向(インバウンド)または双方向
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フィルタリング:
- フォレスト間の信頼を悪用する攻撃を防ぐ。
- フォレスト間の信頼ではデフォルトで有効になっています。フォレスト内の信頼はデフォルトでセキュリティが確保されていると見なされます(Microsoftはドメインではなくフォレストをセキュリティの境界と考えています)。
- ただし、SIDフィルタリングはアプリケーションやユーザーアクセスに影響を与える可能性があるため、しばしば無効にされています。
- 選択的認証
- フォレスト間の信頼で選択的認証が構成されている場合、信頼するドメイン間のユーザーは自動的に認証されません。信頼するドメイン/フォレストのドメインとサーバーへの個別のアクセス権限を与える必要があります。
- 書き込み可能なConfigration NCの悪用と信頼アカウント攻撃を防ぐことはできません。
AD -> クラウド & クラウド -> AD
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %}
一般的な防御策
ここで資格情報を保護する方法について詳しく学びましょう。
各技術に対するいくつかの対策を説明した説明でマイグレーションを見つけてください。
- ドメイン管理者はドメインコントローラー以外のホストにログインできないようにする
- DA特権でサービスを実行しない
- ドメイン管理者特権が必要な場合は、時間を制限する:
Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)
デセプション
- パスワードの有効期限が切れない
- 委任が信頼されている
- SPNを持つユーザー
- 説明にパスワードが含まれている
- 高特権グループのメンバーであるユーザー
- 他のユーザー、グループ、またはコンテナに対するACL権限を持つユーザー
- コンピュータオブジェクト
- ...
- https://github.com/samratashok/Deploy-Deception
Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose
デセプションの特定方法
ユーザーオブジェクトの場合:
- ObjectSID(ドメインとは異なる)
- lastLogon、lastlogontimestamp
- Logoncount(非常に低い数値は疑わしい)
- whenCreated
- Badpwdcount(非常に低い数値は疑わしい)
一般的な方法:
- 一部のソリューションは、すべての可能な属性に情報を埋めます。たとえば、コンピュータオブジェクトの属性をDCなどの100%実際のコンピュータオブジェクトの属性と比較します。または、RID 500(デフォルトの管理者)に対するユーザーをチェックします。
- 何かがあまりにも良すぎる場合は疑ってみてください
- https://github.com/JavelinNetworks/HoneypotBuster
Microsoft ATAの検出のバイパス
ユーザーの列挙
ATAは、DCでセッションを列挙しようとすると警告を表示するため、DCではなく他のホストでセッションを検索すれば、検出されない可能性があります。
チケットの偽装作成(パスハッシュの乗っ取り、ゴールデンチケットなど)
ATAが悪意のあるものと見なすのはNTLMへの劣化ですので、常にaesキーを使用してチケットを作成してください。
DCSync
これをドメインコントローラー以外から実行すると、ATAにキャッチされます。