All Huntress Blog Posts
All Huntress Blog Posts
All things cybersecurity engaging and accessible - so you can stay ahead of hackers and boost your cybersecurity savviness.
AD Rights Management Service (Part 2): Extraction, Offline Decryption, and the Unrotatable Key
An AD RMS Service Group account exports the AD RMS Server Licensor Certificate private key. That 1172-byte key decrypts every document the deployment ever protected, offline, and keeps doing so after the deployment is rebuilt.
From Code to Coverage (Part 6): What netlogon.log Sees That Event 1644 Never Will
ldapnomnom claims it leaves no Windows audit logs. This post shows why Event 1644 misses LDAP Ping and where defenders can still catch it.
From Code to Coverage (Part 5B): Event 5156 Correlation: Proving Source IP Attribution Is Possible
Discover a method for attributing Active Directory Web Services (ADWS) queries, which normally appear to originate from "localhost" in Event 1644 logs, back to the attacker's true source IP address. This is accomplished by correlating the timing of the inbound network connection event (Event 5156), which contains the real source IP, with Event 1644 within a consistent 60–80ms window.
From Code to Coverage (Part 5A): When All Your Detections Fail: The ADWS Blind Spot
PowerShell AD enumeration bypasses network detection by using ADWS (port 9389), logging the LDAP query (Event 1644) as localhost (::1). High-fidelity detection requires correlating Event 1644 with ADWS connection events by Operation ID to reveal the remote source and spot bulk property dumps indicated by [all_with_list].
From Code to Coverage (Part 4): Hunting SOAPHound - The (!FALSE) Pattern
SOAPHound uses a (!FALSE) LDAP filter pattern that breaks most detection rules. Part 4 of our detection engineering series shows exactly how to hunt for it before attackers use the blind spot.
From Code to Coverage (Part 3): SDFlags - The Log Field I'd Been Ignoring That Unlocked Attack Path Detection
SDFlags is an LDAP parameter most defenders walk right past in their logs. It's also how attackers enumerate permissions while evading detection. Part 3 of our series covers what Huntress found.
From Code to Coverage (Part 2): The Whitespace Nightmare: Writing Sigma Rules That Actually Match
The detection logic was solid, the rules were deployed, and then a 2am Slack message revealed that whitespace variations in LDAP filters were breaking everything. Read Part 2 of our detection engineering series.
From Code to Coverage (Part 1): The OID Transformation That Hinders LDAP Detection
The gap between what attacker code looks like and what it actually logs is where most detections fail. Part 1 starts by reading the attacker's own source code.