Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Deploys deception-based honeytokens in Active Directory including fake privileged accounts with AdminCount=1, fake SPNs for Kerberoasting detection (honeyroasting), decoy GPOs with cpassword traps, and fake BloodHound paths. Monitors Windows Security Event IDs 4769, 4625, 4662, 5136 for honeytoken interaction. Use when implementing AD deception defenses for detecting lateral movement, credential theft, and reconnaissance.
.claude/skills/deploying-active-directory-honeytokens/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-18 | ✗→✓ | ▲ Improved | — | — |
| case-12 | ✗→✓ | ▲ Improved | — | — |
Traditional signature-based detection misses novel attack techniques. Honeytokens provide high-fidelity detection with near-zero false positives because any interaction with a decoy object is inherently suspicious. In Active Directory:
| Event ID | Description | Honeytoken Use | |----------|-------------|----------------| | 4769 | Kerberos TGS ticket requested | Detect Kerberoast against honey SPN | | 4625 | Failed logon attempt | Detect use of fake credentials from decoy GPO | | 4662 | Directory service object accessed | Detect DACL read on honeytoken user | | 5136 | Directory service object modified | Detect modification of decoy GPO | | 5137 | Directory service object created | Detect GPO creation mimicking decoy | | 4768 | Kerberos TGT requested | Detect AS-REP roasting of honey account |
Per Trimarc Security research, effective honeytokens must appear legitimate:
similarly aged domains appear authentic)
an attractive Kerberoasting target
admin.maintenance, svc_exchange_legacy)
high-value, neglected service account to attackers
a custom "Backup Operators" to increase attacker interest
password change date for consistency
Create a honeytoken account that mimics a legacy privileged service account.
powershell# Import the deployment module Import-Module .\scripts\Deploy-ADHoneytokens.ps1 # Create a honeytoken admin account $honeyAdmin = New-HoneytokenAdmin ` -SamAccountName "svc_sqlbackup_legacy" ` -DisplayName "SQL Backup Service (Legacy)" ` -Description "Legacy SQL Server backup service account - DO NOT DELETE" ` -OU "OU=Service Accounts,DC=corp,DC=example,DC=com" ` -PasswordLength 128 ` -SetAdminCount $true Write-Host "Honeytoken admin created: $($honeyAdmin.DistinguishedName)"
Assign a realistic but fake SPN to the honeytoken account. Any TGS request for this SPN is definitively malicious (honeyroasting).
powershell# Add fake SPN to honeytoken account $honeySPN = Add-HoneytokenSPN ` -SamAccountName "svc_sqlbackup_legacy" ` -ServiceClass "MSSQLSvc" ` -Hostname "sql-legacy-bak01.corp.example.com" ` -Port 1433 Write-Host "Honey SPN registered: $($honeySPN.SPN)" Write-Host "Monitor Event ID 4769 for TGS requests targeting this SPN"
Create a fake GPO in SYSVOL with an embedded cpassword (Group Policy Preference password). Attackers using tools like Get-GPPPassword or gpp-decrypt will find and attempt to use these credentials, triggering detection.
powershell# Create decoy GPO with cpassword trap $decoyGPO = New-DecoyGPO ` -GPOName "Server Maintenance Policy (Legacy)" ` -DecoyUsername "admin_maintenance" ` -DecoyDomain "CORP" ` -SYSVOLPath "\\corp.example.com\SYSVOL\corp.example.com\Policies" ` -EnableAuditSACL $true Write-Host "Decoy GPO created: $($decoyGPO.GPOGuid)" Write-Host "SACL audit enabled - any read attempt will generate Event ID 4663"
Set ACL permissions that create fake attack paths visible to BloodHound/SharpHound reconnaissance, leading attackers toward monitored honeytokens.
powershell# Create fake BloodHound attack path $deceptivePath = New-DeceptiveBloodHoundPath ` -HoneytokenSamAccount "svc_sqlbackup_legacy" ` -TargetHighValueGroup "Domain Admins" ` -IntermediateOU "OU=Service Accounts,DC=corp,DC=example,DC=com" Write-Host "Deceptive path created: $($deceptivePath.PathDescription)"
Set up SIEM detection rules to alert on any honeytoken interaction.
python# Using the Python detection agent from agent import ADHoneytokenMonitor monitor = ADHoneytokenMonitor(config_path="honeytoken_config.json") # Register all honeytokens for monitoring monitor.register_honeytoken("svc_sqlbackup_legacy", token_type="admin_account") monitor.register_honeytoken("MSSQLSvc/sql-legacy-bak01.corp.example.com:1433", token_type="spn") monitor.register_honeytoken("admin_maintenance", token_type="gpo_credential") # Generate SIEM detection rules splunk_rules = monitor.generate_detection_rules(siem="splunk") sentinel_rules = monitor.generate_detection_rules(siem="sentinel") sigma_rules = monitor.generate_detection_rules(siem="sigma") for rule in sigma_rules: print(f"Rule: {rule['title']}") print(f" Detection: {rule['detection_logic']}")
Test the honeytokens to ensure detection fires correctly.
powershell# Validate honeytoken deployment $validation = Test-HoneytokenDeployment ` -SamAccountName "svc_sqlbackup_legacy" ` -ValidateAdminCount ` -ValidateSPN ` -ValidateGPODecoy ` -ValidateAuditPolicy $validation | Format-Table Check, Status, Details -AutoSize
powershellImport-Module .\scripts\Deploy-ADHoneytokens.ps1 # Deploy complete honeytoken suite $deployment = Deploy-FullHoneytokenSuite ` -Environment "Production" ` -ServiceAccountOU "OU=Service Accounts,DC=corp,DC=example,DC=com" ` -SYSVOLPath "\\corp.example.com\SYSVOL\corp.example.com\Policies" ` -TokenCount 3 ` -IncludeSPN $true ` -IncludeGPODecoy $true ` -IncludeBloodHoundPath $true ` -SIEMType "Splunk" # Output deployment report $deployment.Tokens | Format-Table Name, Type, SPN, DetectionRule -AutoSize $deployment | Export-Csv "honeytoken_deployment_report.csv" -NoTypeInformation
splindex=wineventlog EventCode=4769 ServiceName="svc_sqlbackup_legacy" | eval alert_severity="critical" | eval alert_type="honeytoken_kerberoast" | table _time, src_ip, Account_Name, ServiceName, Ticket_Encryption_Type | sort - _time
kqlSecurityEvent | where EventID == 4769 | where ServiceName in ("svc_sqlbackup_legacy", "svc_exchange_legacy") | extend AlertType = "Honeytoken Kerberoast Detected" | project TimeGenerated, Computer, Account, ServiceName, IpAddress, TicketEncryptionType
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | 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 +50 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.