Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Detect DCSync attacks where adversaries abuse Active Directory replication privileges to extract password hashes by monitoring for non-domain-controller accounts requesting directory replication via DsGetNCChanges.
.claude/skills/detecting-dcsync-attack-in-active-directory/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-08 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-22 | ✗→✓ | ▲ Improved | — | — |
| Concept | Description | |---------|-------------| | T1003.006 | OS Credential Dumping: DCSync | | DCSync | Mimicking domain controller replication to extract credentials | | DsGetNCChanges | RPC function used to request AD replication data | | DS-Replication-Get-Changes | AD permission required (GUID: 1131f6aa-...) | | DS-Replication-Get-Changes-All | Permission including confidential attributes (GUID: 1131f6ad-...) | | MS-DRSR | Microsoft Directory Replication Service Remote Protocol | | KRBTGT Hash | Key target of DCSync enabling Golden Ticket attacks | | Event ID 4662 | Directory service object access audit event |
| Tool | Purpose | |------|---------| | Mimikatz (lsadump::dcsync) | Primary DCSync attack tool | | Impacket secretsdump.py | Python-based DCSync implementation | | DSInternals | PowerShell module for AD replication | | BloodHound | Map accounts with replication rights | | Splunk / Elastic | SIEM correlation of 4662 events | | Microsoft Defender for Identity | Native DCSync detection | | CrowdStrike Falcon | EDR-based DCSync detection |
splindex=wineventlog EventCode=4662 | where Properties IN ("*1131f6aa-9c07-11d1-f79f-00c04fc2dcd2*", "*1131f6ad-9c07-11d1-f79f-00c04fc2dcd2*", "*89e95b76-444d-4c62-991a-0facbeda640c*") | where NOT match(SubjectUserName, ".*\\$$") | where NOT SubjectUserName IN ("known_svc_account1", "known_svc_account2") | stats count values(Properties) as ReplicationRights by SubjectUserName SubjectDomainName Computer | where count > 0 | table SubjectUserName SubjectDomainName Computer count ReplicationRights
kqlSecurityEvent | where EventID == 4662 | where Properties has "1131f6ad-9c07-11d1-f79f-00c04fc2dcd2" or Properties has "1131f6aa-9c07-11d1-f79f-00c04fc2dcd2" | where SubjectUserName !endswith "$" | where SubjectUserName !in ("AzureADConnect", "MSOL_*") | project TimeGenerated, SubjectUserName, SubjectDomainName, Computer, Properties | sort by TimeGenerated desc
yamltitle: DCSync Activity Detected - Non-DC Replication Request status: stable logsource: product: windows service: security detection: selection: EventID: 4662 Properties|contains: - '1131f6aa-9c07-11d1-f79f-00c04fc2dcd2' - '1131f6ad-9c07-11d1-f79f-00c04fc2dcd2' filter_dc: SubjectUserName|endswith: '$' condition: selection and not filter_dc level: critical tags: - attack.credential_access - attack.t1003.006
lsadump::dcsync /user:krbtgt to extract KRBTGT hash for Golden Ticket creation.secretsdump.py domain/user:password@dc-ip extracting all domain hashes.Get-ADReplAccount cmdlet to replicate specific account credentials.Hunt ID: TH-DCSYNC-[DATE]-[SEQ]
Alert Severity: Critical
Source Account: [Account requesting replication]
Source Machine: [Hostname/IP of requestor]
Target DC: [Domain controller receiving request]
Replication Rights: [GUIDs accessed]
Timestamp: [Event time]
Legitimate DC: [Yes/No]
Known Service Account: [Yes/No]
Risk Assessment: [Critical - non-DC replication detected]| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.