| Technique | Employee Names (T1589.003) |
| Tactic | Reconnaissance |
| Platforms | PRE |
On this page
Overview
T1589.003 (Employee Names) is a reconnaissance technique where adversaries collect the names of an organization's employees to support follow-on attacks. Gathered names are used to derive email address formats, build targeted phishing lures, identify high-value individuals, and enumerate potential valid account usernames — all before the attacker ever touches your infrastructure.
Because this activity happens almost entirely in publicly accessible spaces — LinkedIn, company websites, GitHub, conference speaker lists — it rarely generates alerts inside a traditional SOC. However, detecting downstream abuse of harvested names (suspicious OSINT tooling, unusual directory queries, bulk HR data access) is both possible and critical: catching reconnaissance early is one of the few opportunities to disrupt an attack before initial access occurs.
Attacker Perspective
Adversaries treat employee name harvesting as a low-risk, high-reward first step that directly enables phishing, credential attacks, and social engineering.
- LinkedIn scraping via automated tools: Attackers use tools like
linkedin2usernameorCrossLinkedto query LinkedIn for employees of a target company and automatically generate common email format permutations (e.g.,[email protected]). - Website and directory enumeration: Tools like
theHarvesterorMaltegoscrape company "About Us" pages, press releases, and public staff directories to extract names, titles, and department affiliations in bulk. - GitHub and code repository mining: Attackers search GitHub commit histories using patterns like
git log --format='%an %ae'or tools likegitrobto extract developer names and associated corporate email addresses from public repositories. - Active Directory enumeration from an internal foothold: Once inside a network, adversaries use
net user /domain,ldapsearch, or BloodHound'sSharpHoundcollector to enumerate all domain user display names and correlate them with harvested external data.
This technique is particularly attractive because it requires no exploitation, leaves no footprint on the victim's systems during the external phase, and directly multiplies the effectiveness of every subsequent attack technique the adversary attempts.
Detection Strategy
Required Telemetry
- Windows Security Event Log — Audit Directory Service Access: Enable via GPO:
Computer Configuration → Windows Settings → Security Settings → Advanced Audit Policy → DS Access → Audit Directory Service Access = Success, Failure. Generates Event ID 4661 (object handle requested) and Event ID 4662 (operation performed on AD object). Required to detect LDAP-based user enumeration. - Windows Security Event Log — Audit Account Management: Enable via GPO:
Advanced Audit Policy → Account Management → Audit User Account Management = Success, Failure. Generates Event ID 4720 (account created), 4722 (account enabled), and 4798/4799 (user/group membership enumerated). Event ID 4798 is especially valuable — it fires when a process enumerates the local groups of a specific user account. - Windows Security Event Log — Audit Logon Events: Enable
Audit Logon = Success, Failure. Generates Event ID 4624 and 4625. Bulk 4625 failures with varying usernames drawn from a name list indicate credential stuffing against harvested names. - PowerShell Script Block Logging: Enable via GPO registry key:
HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging → EnableScriptBlockLogging = 1. Generates Event ID 4104. Captures PowerShell-based AD enumeration commands such asGet-ADUser,Get-ADGroupMember, and([adsisearcher])queries. - Windows Sysmon — Process Creation (Event ID 1): Deploy Sysmon with a configuration that logs all process creation events including full command-line arguments. Captures execution of enumeration tools like
net.exe,nltest.exe,dsquery.exe, andldifde.exe. - Windows Sysmon — Network Connection (Event ID 3): Logs outbound network connections per process. Enables correlation of enumeration tools making LDAP connections (port 389 or 636) to domain controllers.
- LDAP/Active Directory Query Logs: On Windows Server 2016+ DCs, enable LDAP diagnostic logging:
HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics → "15 Field Engineering" = 5. Logs expensive or bulk LDAP queries to the Directory Services event log, which can reveal SharpHound or similar collector activity. - Web Proxy / Secure Web Gateway Logs: Required to detect outbound connections to known OSINT aggregators or scraping services. Log fields needed:
src_ip,dst_domain,url,user_agent,bytes_out,bytes_in,http_method. - HR/Identity Platform Audit Logs (Workday, BambooHR, Azure AD, Okta): Enable audit logging for all read operations on user directory data. Fields:
actor,action,target_resource,timestamp,ip_address. Bulk exports or mass read operations on employee records are high-fidelity signals. - Linux Auditd (for Linux-based systems or jump hosts): Add rules:
-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/ldapsearch -k ldap_enumand-w /etc/passwd -p r -k passwd_read. Capturesldapsearchinvocations and reads of local user databases. - DNS Query Logs: Enable query logging on your internal DNS resolver. Captures lookups for LDAP SRV records (e.g.,
_ldap._tcp.dc._msdcs.domain.local) which tools like SharpHound generate during DC discovery.
Key Indicators
- Bulk LDAP user queries from non-admin hosts: In Windows Security logs (Event ID 4662), look for
Object Type = userwithAccess = Read Propertyfired in rapid succession (50+ events within 60 seconds) from a workstationSubjectLogonId. ThePropertiesfield will reference attributes likedisplayName,mail,sAMAccountName. - Execution of known enumeration binaries: In Sysmon Event ID 1, flag when
Imagematches any of:net.exe,net1.exe,nltest.exe,dsquery.exe,ldifde.exe,csvde.exe,AdFind.exe. Pay close attention toCommandLinecontaining strings likeuser /domain,group /domain,/dclist, orobjectcategory=person. - PowerShell AD enumeration commands: In Event ID 4104 (Script Block Logging), flag script blocks containing
Get-ADUser,Get-ADGroupMember,([adsisearcher]'objectCategory=person'), orGet-NetUser(PowerView). Flag especially ifScriptBlockcontains-Filter *or-Properties *indicating bulk retrieval. - Credential stuffing pattern against AD: In Event ID 4625, flag when a single
WorkstationNameorIpAddressgenerates failures against 10 or more distinctTargetUserNamevalues within a 5-minute window. A secondary signal is when theTargetUserNamevalues follow a naming convention pattern (allfirstname.lastnameformat), which suggests list-based attacks. - SharpHound or BloodHound collection artifacts: In Sysmon Event ID 1, flag processes with
ImagematchingSharpHound.exeor child processes ofpowershell.exewithCommandLinecontainingInvoke-BloodHoundor-CollectionMethod All. Also flag creation (Sysmon Event ID 11) of files matching*_BloodHound.zipor20*_computers.json. - Bulk HR system exports: In identity platform audit logs, flag when
action=user.list,directory.search, or equivalent and the query returns more than 100 records in a single session, especially from an IP outside the HR department's known address range. - Unusual LDAP SRV record lookups: In DNS query logs, flag workstations (non-DC, non-management hosts) querying
_ldap._tcp.dc._msdcs.*or_kerberos._tcp.*SRV records, which indicate domain reconnaissance tooling running on that endpoint. - Outbound connections to OSINT scraping targets (external phase indicator): In web proxy logs, flag
dst_domainmatching known OSINT aggregators where corporate SSO is not involved, particularly whereuser_agentappears non-browser (e.g.,python-requests,Go-http-client,curl) combined with largebytes_inresponses.
Detection Logic
Rule 1: Bulk Active Directory User Enumeration from Workstation
IF event_id = 4662 AND object_type = "user" AND access_mask CONTAINS "Read Property" AND subject_logon_id NOT IN [known_admin_logons] AND source_host NOT IN [dc_list, admin_workstations] THEN count(event_id) BY subject_logon_id, source_host WITHIN 60s IF count > 50 THEN alert(HIGH)
Catches bulk LDAP reads of user objects consistent with SharpHound, AdFind, or ldifde bulk exports. Expected volume is low in most environments — fewer than 5 alerts per week. Tune the threshold based on your domain size; larger enterprises may need a higher count threshold.
Rule 2: Suspicious AD Enumeration Binary Execution
IF event_id = 1 AND image IN ["net.exe","net1.exe","dsquery.exe","nltest.exe","AdFind.exe","ldifde.exe","csvde.exe"] AND command_line MATCHES_ANY ["user /domain","group /domain","/dclist","objectcategory=person","objectclass=user"] AND parent_image NOT IN ["explorer.exe","cmd.exe" WHERE parent_user IN [it_admin_group]] THEN alert(MEDIUM)
Catches explicit command-line enumeration of domain users. Net.exe with /domain flags is extremely common in admin workflows, so expect moderate false positives until parent process and user exclusions are tuned. Focus initial investigation on executions where the parent process is an Office application, browser, or script interpreter.
Rule 3: PowerShell Bulk User Enumeration via Script Block
IF event_id = 4104 AND script_block_text MATCHES_ANY ["Get-ADUser","Get-NetUser","([adsisearcher]","Invoke-BloodHound","Get-ADGroupMember"] AND script_block_text MATCHES_ANY ["-Filter \*","-Properties \*","-CollectionMethod"] AND user NOT IN [approved_admin_accounts] THEN alert(HIGH)
Catches PowerShell-based AD enumeration including PowerView and BloodHound's PowerShell wrapper. High-fidelity rule — the combination of a bulk filter flag with an enumeration cmdlet is rarely legitimate outside scheduled admin scripts. Expect very low false positive volume if service account exclusions are applied.
Rule 4: Credential Stuffing Against Domain Using Name-Format Usernames
IF event_id = 4625 AND failure_reason = "Unknown user name or bad password" AND target_username MATCHES_REGEX "^[a-z]+\.[a-z]+$" THEN count(DISTINCT target_username) BY source_ip, workstation_name WITHIN 5m IF count > 10 THEN alert(CRITICAL)
Catches downstream abuse of harvested employee names as username lists in password spraying or stuffing attacks. The regex filter on firstname.lastname format dramatically reduces noise from typo-based failures. Expected volume is very low — any trigger warrants immediate investigation.
Tuning Guidance
- IT and security admin workstations running legitimate AD management tools: Tools like Active Directory Users and Computers (ADUC), RSAT, and identity governance platforms (SailPoint, Saviynt) routinely generate bulk LDAP reads. Exclude by adding
source_host IN [approved_admin_workstations]anduser IN [it_admin_group, identity_governance_service_accounts]to Rules 1 and 2. Maintain a documented and reviewed allow-list. - Scheduled HR sync and provisioning scripts: Azure AD Connect, Okta provisioning agents, and HRIS integration scripts generate high volumes of user object reads on a predictable schedule. Exclude by
user IN [sync_service_accounts]and optionally add a time-of-day window condition. Validate the schedule matches observed behavior. - Security tooling (vulnerability scanners, EDR, SIEM forwarders): Some security products perform periodic AD inventory. Identify their service accounts and host IPs and add to exclusion lists. Review quarterly to ensure the list doesn't become a blind spot.
- Net.exe use by help desk staff:
net user /domain usernameis commonly run by tier-1 analysts to check account status. Distinguish this from bulk enumeration by requiring the alert threshold to exceed single-user lookups — flag only when more than 10 distinct usernames are queried in a session from the same host. - Developer environments running local LDAP testing: Developers may run
ldapsearchor PowerShell AD queries against test environments. Exclude known dev lab subnets from internal enumeration rules, but ensure those subnets cannot reach production domain controllers.
When the Alert Fires: Investigation Steps
- Verify the alert is real — confirm the raw event exists in the source log. Pull the raw event directly from your SIEM by querying the specific Event ID, timestamp, and host name identified in the alert. Confirm the fields (e.g.,
SubjectLogonId,CommandLine,ScriptBlockText) match what the detection rule evaluated — rule logic errors can produce phantom alerts. - Identify the affected host and user — flag if privileged. Extract the
source_host,subject_user_name, andsubject_logon_idfrom the event and cross-reference against your identity provider (Active Directory, Azure AD, or Okta) to determine the user's role, department, and group memberships. Escalate immediately if the account is a member of Domain Admins, IT staff, or any service account with elevated rights. - Pull the full command-line and parent process chain. Query Sysmon Event ID 1 in your SIEM for all processes spawned on the affected host in the 30 minutes surrounding the alert, filtered by the same
LogonId. Build the parent-child tree: if an enumeration binary likenet.exewas spawned bypowershell.exewhich was spawned bywinword.exeor a browser, treat this as a confirmed compromise indicator. - Check for network connections and files written to disk. Query Sysmon Event ID 3 for outbound connections from the affected host around the time of the alert, looking specifically for connections to domain controller IPs on port 389 (LDAP) or 636 (LDAPS), and any external IPs. Simultaneously query Sysmon Event ID 11 (File Create) for newly created files matching patterns like
*.zip,*bloodhound*,*_users.json, or*.csvin temp or user-writable directories. - Determine the scope of enumeration — what data was accessed. If LDAP diagnostic logging is enabled, query the Directory Services event log on the domain controller that handled the connection for queries during the alert window. Identify which attributes were requested (e.g.,
displayName,mail,memberOf) and the total number of user objects returned — this tells you exactly what the attacker now knows about your environment. - Search for lateral movement from this host. Query Windows Security Event ID 4624 (Type 3 — Network logon) and Event ID 4648 (explicit credential use) on all domain controllers and neighboring hosts, filtered for the affected user's
LogonIdor source IP in the 4 hours following the enumeration event. Also check Sysmon Event ID 3 for SMB connections (port 445) or WinRM connections (port 5985) originating from the affected host to other internal systems. - Escalation decision — what separates a confirmed incident from benign activity. Treat the activity as a confirmed incident requiring immediate containment if any of the following are true: the enumeration tool (e.g., SharpHound, AdFind) is not an approved IT tool; the enumerating account is not in the IT or security team; a file containing user data was created and subsequently transferred over the network; or credential stuffing alerts fired within 24 hours of the enumeration event. If the activity matches a known admin workflow and no network transfer occurred, document it as a true positive with no malicious intent and work with the admin to shift that activity to a monitored service account.
Response Playbook
Containment
- Isolate the affected host at the network layer — keep it powered on. Apply a firewall policy or NAC quarantine VLAN to block all inbound and outbound traffic except to your forensic collection infrastructure. Do not power off the machine; volatile memory may contain attacker tools, injected code, or decrypted credentials that are critical for investigation.
- Disable the affected user account immediately. In Active Directory, run
Disable-ADAccount -Identity [username]or use the Azure AD portal to block sign-in. If the account is a service account, coordinate with application owners before disabling to avoid service disruption — but do not delay more than 30 minutes waiting for approval if active exfiltration is suspected. - Invalidate all active sessions for the affected account. In Azure AD, use the "Revoke Sessions" function in the portal or run
Revoke-AzureADUserAllRefreshToken -ObjectId [objectId]. For on-premises environments, force a Kerberos TGT reset by runningInvoke-ADServiceAccountPasswordResetor manually resetting the account password, which invalidates existing Kerberos tickets after the ticket lifetime expires (default 10 hours — consider temporarily reducing this in Group Policy if active compromise is confirmed). - Block identified C2 IPs and suspicious external destinations. Push block rules to your perimeter firewall and DNS sinkhole for any external IPs or domains identified in Sysmon Event ID 3 or proxy logs during the alert window. For DNS, add the domains to your internal DNS blocklist or Secure DNS policy immediately.
- Kill any active malicious processes on the isolated host. If EDR is deployed (CrowdStrike, Defender for Endpoint, SentinelOne), use the remote response capability to terminate identified malicious processes by PID without destroying forensic artifacts. If EDR is unavailable, wait until the host can be accessed physically or via an out-of-band management channel.
Eradication
- Remove identified persistence mechanisms. Check and clean the following locations: Scheduled Tasks (
schtasks /query /fo LIST /vor Task Scheduler GUI), registry run keys (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Runand theHKCUequivalent), startup folder (%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup), and Windows Services (sc query type= all). Remove any entries not recognized as legitimate. - Search for and delete dropped enumeration tools or payloads. Query your EDR or Sysmon Event ID 11 logs for all files created on the affected host in the 24 hours before and after the alert. Hash any suspicious files and submit to VirusTotal. Delete confirmed malicious files and document their paths and hashes as IOCs for future detection rules.
- Reset credentials for all accounts that executed or were touched by the malicious activity. This includes the primary affected account, any accounts whose credentials may have been cached on the host (check LSASS credential cache indicators via EDR), and any service accounts used to run enumeration tools. Use a secure, out-of-band channel to communicate new credentials to affected users.
- Search for additional backdoors on any lateral movement targets identified in Step 6. Run your EDR's threat hunting query or a Sysmon-based hunt across all hosts the affected user authenticated to, looking for the same IOCs (file hashes, process names, registry keys) discovered on the primary host.
- Rotate any API keys, secrets, or tokens that may have been exposed. If the enumeration accessed systems where credentials were stored in plaintext, environment variables, or configuration files — including HR systems, LDAP bind accounts, or cloud identity providers — rotate those secrets immediately. Notify the relevant application and platform owners.
Recovery
- Verify the host is clean before reconnecting to the network — re-image if confidence is low. Run a full EDR scan and manually review persistence locations. If any doubt exists about the completeness of eradication (particularly if the dwell time before detection exceeded 24 hours), re-image the endpoint from a known-good baseline rather than attempting cleanup. A compromised host that re-enters the network is more dangerous than the delay of re-imaging.
- Re-enable the user account only after confirming no persistence remains and credentials are reset. Document the re-enablement action with a ticket number and the analyst who approved it. Notify the user's manager and set an expectation that the account will be under enhanced monitoring for the next 72 hours.
- Monitor the previously affected host and user for 72 hours post-remediation. Create a temporary watchlist in your SIEM containing the host name, user account, and any identified IOC hashes. Set alerts for any recurrence of flagged behaviors at a lower threshold than the original detection rule. Assign a specific analyst to review these alerts daily for the monitoring period.
- Document the full attack timeline and close the incident with a written lessons-learned review. Record the first evidence of enumeration, every action taken during investigation and response, and the total scope of data accessed. Distribute the lessons-learned summary to the SOC team and, where applicable, to IT, HR (if employee data was accessed), and executive leadership.
- Review and update detection rules based on new IOCs and attacker TTPs observed. If the attacker used a tool or command pattern not covered by existing rules, create a new detection or update the tuning on existing rules. If the attacker evaded detection for a period, identify the telemetry gap and prioritize closing it. Submit new IOCs (file hashes, C2 domains, attacker IPs) to your threat intelligence platform and share with your ISAC if appropriate.
Stay Ahead
Get daily threat intelligence and weekly detection playbooks.
Free. No account. No email. Follow in Feedly, Inoreader, or any RSS reader.