hacktricks/windows-hardening/active-directory-methodology/ad-certificates/domain-persistence.md

8.2 KiB
Raw Blame History

AD CS ドメイン永続性

htARTEHackTricks AWS Red Team Expert でゼロからヒーローまでAWSハッキングを学ぶ

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

これは、https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf で共有されているドメイン永続性技術の要約です。詳細については、そちらをご確認ください。

盗まれたCA証明書を使用した証明書の偽造 - DPERSIST1

証明書がCA証明書であるかどうかをどのように判断できますか

証明書がCA証明書であることが確認される条件は次のとおりです

  • 証明書はCAサーバーに保存されており、そのプライベートキーはマシンのDPAPIによって保護されているか、オペレーティングシステムがサポートしている場合はTPM/HSMなどのハードウェアによって保護されています。
  • 証明書の発行者とサブジェクトのフィールドがCAの識別名と一致しています。
  • "CA Version" 拡張子がCA証明書にのみ存在します。
  • 証明書には拡張キー使用法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

{% hint style="warning" %} 証明書偽造の対象ユーザーは、プロセスが成功するためにアクティブであり、Active Directoryで認証できる必要があります。 krbtgtなどの特別なアカウントのための証明書を偽造することは効果がありません。 {% endhint %}

この偽造された証明書は、指定された終了日まで有効であり、ルートCA証明書が有効である限り通常、5年から10年以上)、マシンにも有効です。これにS4U2Selfを組み合わせることで、攻撃者はCA証明書が有効である限り、任意のドメインマシンで持続性を維持できます。
さらに、この方法で生成された証明書は、CAがそれらを認識していないため、取り消すことはできません

ローグCA証明書を信頼する - DPERSIST2

NTAuthCertificatesオブジェクトは、そのcacertificate属性内に1つ以上のCA証明書を含むように定義されており、Active DirectoryADが利用しています。ドメインコントローラーによる検証プロセスは、認証中の証明書の発行者フィールドに指定されたCAに一致するエントリをNTAuthCertificatesオブジェクトで確認します。一致が見つかった場合、認証が進行します。

攻撃者は、自己署名のCA証明書をNTAuthCertificatesオブジェクトに追加できますが、このADオブジェクトを制御している必要があります。通常、Enterprise Adminグループのメンバーと、フォレストルートのドメインDomain AdminsまたはAdministratorsにのみ、このオブジェクトを変更する権限が与えられます。彼らはcertutil.exeを使用してcertutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA126というコマンドを使用するか、PKI Health Toolを使用してNTAuthCertificatesオブジェクトを編集できます。

この機能は、以前にForgeCertを使用して証明書を動的に生成する方法と組み合わせて使用される場合に特に関連があります。

悪意のある構成ミス - DPERSIST3

AD CSコンポーネントのセキュリティ記述子の変更を通じて持続性を確保する機会は豊富です。"Domain Escalation"セクションで説明されている変更は、昇格アクセス権を持つ攻撃者によって悪用される可能性があります。これには、以下のような重要なコンポーネントに「制御権限」WriteOwner/WriteDACLなどを追加することが含まれます

  • CAサーバーのADコンピューターオブジェクト
  • CAサーバーのRPC/DCOMサーバー
  • CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>内の子孫ADオブジェクトまたはコンテナたとえば、証明書テンプレートコンテナ、認証局コンテナ、NTAuthCertificatesオブジェクトなど
  • デフォルトでまたは組織によってたとえば、組み込みのCert PublishersグループとそのメンバーなどADグループにAD CSの制御権限が委任されている

悪用の例として、ドメイン内で昇格権限を持つ攻撃者が、デフォルトの**User証明書テンプレートにWriteOwner権限を追加し、その権限の主体として自分自身を設定することが挙げられます。これを悪用するために、攻撃者はまずUserテンプレートの所有権を自分自身に変更します。その後、mspki-certificate-name-flagをテンプレートでENROLLEE_SUPPLIES_SUBJECTを有効にするために1に設定し、ユーザーがリクエストでサブジェクト代替名を提供できるようにします。その後、攻撃者はテンプレートを使用して登録し、代替名としてドメイン管理者**名を選択し、取得した証明書をDAとして認証に使用できます。