AD CS Domain Persistence
Reading time: 9 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
これは、https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdfで共有されているドメイン持続性技術の概要です。詳細については確認してください。
盗まれたCA証明書を使用した証明書の偽造 - DPERSIST1
証明書がCA証明書であることをどのように判断できますか?
いくつかの条件が満たされると、証明書がCA証明書であることが判断できます:
- 証明書はCAサーバーに保存されており、その秘密鍵はマシンのDPAPIによって保護されているか、オペレーティングシステムがサポートしている場合はTPM/HSMなどのハードウェアによって保護されています。
- 証明書の発行者(Issuer)および主題(Subject)フィールドがCAの識別名と一致します。
- "CA Version"拡張がCA証明書にのみ存在します。
- 証明書にはExtended Key Usage (EKU)フィールドがありません。
この証明書の秘密鍵を抽出するには、CAサーバー上のcertsrv.msc
ツールが、組み込みGUIを介してサポートされている方法です。それにもかかわらず、この証明書はシステム内に保存されている他の証明書とは異ならないため、THEFT2技術などの方法を使用して抽出できます。
証明書と秘密鍵は、次のコマンドを使用してCertipyでも取得できます:
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
CA証明書とそのプライベートキーを.pfx
形式で取得した後、ForgeCertのようなツールを使用して、有効な証明書を生成できます:
# Generating a new certificate with ForgeCert
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123! --Subject "CN=User" --SubjectAltName localadmin@theshire.local --NewCertPath localadmin.pfx --NewCertPassword Password123!
# Generating a new certificate with certipy
certipy forge -ca-pfx CORP-DC-CA.pfx -upn administrator@corp.local -subject 'CN=Administrator,CN=Users,DC=CORP,DC=LOCAL'
# Authenticating using the new certificate with Rubeus
Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /password:Password123!
# Authenticating using the new certificate with certipy
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
warning
証明書の偽造の対象となるユーザーは、プロセスが成功するためにアクティブであり、Active Directoryで認証できる必要があります。krbtgtのような特別なアカウントのために証明書を偽造することは効果がありません。
この偽造された証明書は、指定された終了日まで有効であり、ルートCA証明書が有効である限り(通常は5年から10年以上)有効です。また、マシンにも有効であるため、S4U2Selfと組み合わせることで、攻撃者はCA証明書が有効である限り、任意のドメインマシンで持続性を維持できます。
さらに、この方法で生成された証明書は、CAがそれらを認識していないため、取り消すことができません。
悪意のあるCA証明書の信頼 - DPERSIST2
NTAuthCertificates
オブジェクトは、Active Directory(AD)が利用するcacertificate
属性内に1つ以上のCA証明書を含むように定義されています。ドメインコントローラーによる検証プロセスは、認証する証明書の発行者フィールドに指定されたCAと一致するエントリをNTAuthCertificates
オブジェクトで確認することを含みます。一致が見つかれば、認証が進行します。
自己署名のCA証明書は、攻撃者がこのADオブジェクトを制御している場合、NTAuthCertificates
オブジェクトに追加できます。通常、Enterprise Adminグループのメンバーと、forest rootのドメイン内のDomain AdminsまたはAdministratorsのみがこのオブジェクトを変更する権限を与えられます。彼らは、certutil.exe
を使用してNTAuthCertificates
オブジェクトを編集することができ、コマンドcertutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA126
を使用するか、PKI Health Toolを使用します。
この機能は、ForgeCertを使用して動的に証明書を生成する以前に説明した方法と組み合わせて使用される場合に特に関連性があります。
悪意のある誤設定 - DPERSIST3
AD CSコンポーネントのセキュリティ記述子の変更を通じた持続性の機会は豊富です。「ドメイン昇格」セクションで説明されている変更は、権限のある攻撃者によって悪意を持って実施される可能性があります。これには、以下のような敏感なコンポーネントへの「制御権」(例:WriteOwner/WriteDACLなど)の追加が含まれます:
- CAサーバーのADコンピュータオブジェクト
- CAサーバーのRPC/DCOMサーバー
CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>
内の任意の子孫ADオブジェクトまたはコンテナ(例えば、証明書テンプレートコンテナ、認証局コンテナ、NTAuthCertificatesオブジェクトなど)- デフォルトまたは組織によってAD CSを制御する権利が委任されたADグループ(組み込みのCert Publishersグループおよびそのメンバーなど)
悪意のある実装の例としては、ドメイン内で権限のある攻撃者が、デフォルトの**User
証明書テンプレートにWriteOwner
権限を追加し、攻撃者がその権利の主体となることが含まれます。これを利用するために、攻撃者はまずUser
テンプレートの所有権を自分に変更します。その後、mspki-certificate-name-flag
が1に設定され、ENROLLEE_SUPPLIES_SUBJECT
が有効になり、ユーザーがリクエストにおいて代替名を提供できるようになります。続いて、攻撃者はテンプレートを使用して登録し、代替名としてドメイン管理者**の名前を選択し、取得した証明書をDAとして認証に利用します。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。