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を使用してNTAuthCertificatesオブジェクトを編集することができます。コマンドはcertutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA126です。またはPKI Health Toolを使用することもできます。

この機能は、以前に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オブジェクトなど
  • デフォルトでまたは組織によってAD CSを制御する権限を委任されたADグループたとえば、組み込みのCert Publishersグループとそのメンバー

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