Identity Breach and Account Abuse
Adversaries are leveraging corporate credentials exposed in third-party data breaches to bypass authentication, propagate phishing lures, and exfiltrate data from internal endpoints.
Based on research by ESET Research 2026-10-14 13 steps · 6 queries T1041 T1566
Brief
Why this hunt
ESET Research recently highlighted the ambiguity of data breach notices in What to do when a data breach notice tells you almost nothing. When a third-party service loses your data, the notice rarely explains if your corporate credentials are already being sold or used against your infrastructure. We developed this hunt to close that gap by turning external intelligence into a targeted internal investigation.
How the hunt flows
The hunt begins by identifying active managed devices through the hb_devices surface. This ensures the follow-on behavioral queries focus on systems currently reporting telemetry, reducing the noise from decommissioned or dormant assets.
Next, the hunt performs a parallel external intelligence check. It queries HaveIBeenPwned (HIBP) and Hudson Rock for any corporate email domains. This phase separates generic historical leaks from high-risk infostealer infections. An analyst or agent then weighs these results to create a list of high-risk identities for the next phase.
The investigation then pivots to internal behavioral surfaces. It examines hb_auth_signin to find successful sign-ins from rare source IPs or unusual geographic locations for the flagged accounts. This identifies successful authentication that may bypass traditional geo-fencing.
Simultaneously, the hunt scans hb_http_activity for web requests containing common phishing or credential-harvesting keywords like "verify" or "office". It also monitors hb_network_connection for outbound transfers exceeding 50MB originating from those same accounts. This three-surface approach helps verify if a compromised account is being used for internal lateral movement or data theft.
Finally, the hunt correlates the timing of the external breach with these internal anomalies. If an account appears in a fresh infostealer log and subsequently shows rare login patterns or high-volume data transfers, the hunt directs the analyst to revoke sessions and reset the identity.
Blind spots
This hunt has two primary limitations. First, without SSL decryption for HTTP traffic, the hunt can identify that a user visited a suspicious domain but cannot confirm if they submitted credentials on a specific URI path. Second, the hunt depends on high-fidelity authentication logs. If the environment lacks full MFA event details, distinguishing between a simple password replay and a sophisticated session token theft is difficult.
Running this hunt
This is a hunt.md playbook. It provides a structured flow that is more complex than a standard detection rule because it requires correlating external exposure with multi-surface behavior. You can import this file into Huntbase or any runtime that supports the hunt.md specification to automate the intelligence gathering and behavioral analysis phases.
Steps
-
Scope active managed devices
Query · scopingIdentify recently active hosts to focus the internal behavioral queries.
reads hb_devicessqlSELECT DISTINCT hostname AS device_hostname FROM hb_devices WHERE (lifecycle_state = 'active' OR lifecycle_state = 'running') AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. A list of hostnames that have reported inventory recently. Silence means no active devices are reporting.
-
Public data breach exposure
Query · enrichmentCheck if corporate accounts appear in public data breaches listed by HaveIBeenPwned.
reads hibp_breached_accountsqlSELECT account, name AS breach_name, data_classes FROM hibp_breached_account WHERE instr(',' || '{{corporate_domains}}' || ',', ',' || LOWER(SUBSTR(account, INSTR(account, '@') + 1)) || ',') > 0What a hit looks like. Corporate accounts found in third-party breaches. Silence confirms no corporate identities are present in the HIBP snapshot.
-
Infostealer identity leaks
Query · enrichmentIdentify corporate users whose credentials were stolen by stealer malware as recorded by Hudson Rock.
reads hudsonrock_search_by_emailsqlSELECT email, computer_name, date_compromised, malware_path FROM hudsonrock_search_by_email WHERE instr(',' || '{{corporate_domains}}' || ',', ',' || LOWER(SUBSTR(email, INSTR(email, '@') + 1)) || ',') > 0What a hit looks like. Corporate accounts compromised by infostealers. Silence means no credentials from these domains were found in the malware database.
-
Weigh external exposure risk
Agent triagePrioritize exposed identities based on the recency and severity of the leak.
-
Anomalous logins for high-risk identities
Query · baselineFind successful sign-ins from rare source IP addresses specifically for the corporate identities flagged in the intelligence phase.
reads hb_auth_signinsqlSELECT actor_user_name, src_endpoint_ip, src_location_country, device_hostname, COUNT(*) as login_count, MIN(time) as first_seen FROM hb_auth_signin WHERE status_id = 1 AND ('{{high_risk_identities}}' = '' OR instr(',' || '{{high_risk_identities}}' || ',', ',' || actor_user_name || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY actor_user_name, src_endpoint_ip, src_location_country, device_hostname HAVING login_count < 5 ORDER BY login_count ASCWhat a hit looks like. Successful logins from unusual IPs or locations for high-risk accounts. Silence proves no rare successful authentications occurred for these users.
-
Phishing interaction for high-risk users
Query · triageIdentify web requests containing credential harvesting lures from the compromised users identified earlier.
reads hb_http_activitysqlSELECT device_hostname, actor_user_name, url_hostname, url_path, user_agent, time FROM hb_http_activity WHERE (LOWER(url_full) LIKE '%login%' OR LOWER(url_full) LIKE '%office%' OR LOWER(url_full) LIKE '%verify%') AND ('{{high_risk_identities}}' = '' OR instr(',' || '{{high_risk_identities}}' || ',', ',' || actor_user_name || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. HTTP interaction with potential phishing URLs by compromised users. Silence confirms no such lures were visited by these specific accounts.
-
Data exfiltration from compromised accounts
Query · enrichmentIdentify large outbound data transfers originating from the identities previously flagged for high-risk exposure.
reads hb_network_connectionsqlSELECT device_hostname, user_name, dst_endpoint_ip, SUM(traffic_bytes) as total_bytes FROM hb_network_connection WHERE state_kind = 'log' AND direction = 'outbound' AND ('{{high_risk_identities}}' = '' OR instr(',' || '{{high_risk_identities}}' || ',', ',' || user_name || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, user_name, dst_endpoint_ip HAVING total_bytes > 50000000 ORDER BY total_bytes DESCWhat a hit looks like. Outbound sessions exceeding 50MB originating from high-risk users. Silence means no such data transfers were recorded for these accounts.
-
Final correlative analysis
Agent triageDetermine if the coincidental external exposure matches internal signs of identity theft or follow-on abuse.
-
Route by verdict
DecisionDirect the hunt to containment or manual impact review based on the agent's confidence.
-
Remediate compromised accounts
Response actionSecure the affected identities to stop active abuse immediately.
-
Analyst impact review
Analyst taskVerify the extent of the data impact and check for follow-on persistence.
-
Close out and tune
Analyst taskDocument findings and update watchlists for long-term monitoring.
Coverage
Scenario coverage
| Stage | Covered | How, or why not |
|---|---|---|
| Data Exfiltration Over C2 T1041 |
Yes | detect-data-exfiltration |
| Follow-on Phishing Attempts T1566 |
Yes | detect-phishing-interaction |
| External Identity Exposure T1566 |
Yes | check-hibp, check-hudsonrock |
| Account Misuse and Remediation T1566 |
Yes | detect-anomalous-logins, remediate-compromised-accounts |
Blind spots
- Needs SSL decryption for hb_http_activity. Phishing interaction remains unconfirmed without path context; we can see the domain but not whether a credential form was submitted. It would answer What full URI paths were visited on suspected phishing domains?. Remediation: Deploy endpoint-based HTTP inspection or enable corporate proxy SSL decryption.
- Needs hb_auth_signin with full MFA event details. Inability to distinguish between simple password reuse and sophisticated session hijacking via infostealer logs. It would answer Was the anomalous login successful because MFA was bypassed or because a session token was stolen?. Remediation: Enable and export full conditional access and MFA logs to the centralized log pool.
Parameters & data
Parameters
| Parameter | Type | Default | What it is |
|---|---|---|---|
corporate_domains | list[string] | example.com | Corporate email domains to check against external breach databases. |
high_risk_identities | list[string] | — | List of compromised identities identified in the first phase. Leave empty to run the hunt for all users on scoped hosts. |
lookback_days | number | 14 | Days of history to examine for internal behavioral anomalies. |
scope_hosts | list[host] | — | Optional list of hostnames to focus the internal corroboration steps. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
| Identity / sign-in telemetry | identity | identity |
| Network telemetry | network | network |
| Web server / proxy logs | siem | network |
Source
---
analysis: A standard detection rule alerts on a single bad IP or a password spray.
This hunt correlates external exposure (infostealer token theft) with internal behavioral
anomalies across three surfaces, requiring an agent to weigh the coincidence of
the leak against active usage patterns.
blind_spots:
- id: ssl-inspection-gap
owner: Network Engineering
question: What full URI paths were visited on suspected phishing domains?
remediation: Deploy endpoint-based HTTP inspection or enable corporate proxy SSL
decryption.
requires: SSL decryption for hb_http_activity
risk: Phishing interaction remains unconfirmed without path context; we can see
the domain but not whether a credential form was submitted.
stage: phishing-follow-on
- id: mfa-telemetry-gap
owner: Identity Engineering
question: Was the anomalous login successful because MFA was bypassed or because
a session token was stolen?
remediation: Enable and export full conditional access and MFA logs to the centralized
log pool.
requires: hb_auth_signin with full MFA event details
risk: Inability to distinguish between simple password reuse and sophisticated session
hijacking via infostealer logs.
stage: account-misuse-and-recovery
coverage:
- stage: data-exfiltration
status: covered
steps:
- detect-data-exfiltration
- stage: phishing-follow-on
status: covered
steps:
- detect-phishing-interaction
- stage: external-identity-exposure
status: covered
steps:
- check-hibp
- check-hudsonrock
- stage: account-misuse-and-recovery
status: covered
steps:
- detect-anomalous-logins
- remediate-compromised-accounts
guardrails:
claims: no_unsupported
evidence: citation_required
missing_data: not_benign
telemetry: untrusted
hunt:
applicability: campaign-specific
handoff: keep-as-periodic-hunt
justification: Third-party breaches and infostealer activity provide early warning
of targeted account takeover. Correlating external intel with internal authentication
and network behavior is critical for protecting corporate data assets.
methodology: model-assisted
trigger: intel-report
hypothesis: Adversaries are leveraging corporate credentials exposed in third-party
data breaches to bypass authentication, propagate phishing lures, and exfiltrate
data from internal endpoints.
labels:
- hunt
- attack.t1041
- attack.t1566
- exfiltration
- initial access
- haveibeenpwned
- hudsonrock
name: Identity Breach and Account Abuse
parameters:
corporate_domains:
default:
- example.com
description: Corporate email domains to check against external breach databases.
from:
kind: manual
observed: '2024-05-20'
ref: internal-policy
type: list[string]
high_risk_identities:
default: []
description: List of compromised identities identified in the first phase. Leave
empty to run the hunt for all users on scoped hosts.
from:
kind: manual
observed: '2024-05-20'
ref: weigh-external-exposure
type: list[string]
lookback_days:
default: '14'
description: Days of history to examine for internal behavioral anomalies.
from:
kind: manual
observed: '2024-05-20'
ref: hunt-standard
type: number
scope_hosts:
default: []
description: Optional list of hostnames to focus the internal corroboration steps.
from:
kind: manual
observed: '2024-05-20'
ref: scoping-query
type: list[host]
provenance:
authors:
- name: Huntbase hunt generation
org: huntbase.io
generated:
by: huntbase-hunt-generation
from: https://www.welivesecurity.com/en/how-to/what-to-do-when-a-data-breach-notice-tells-you-almost-nothing/
gates:
- dry-run
- lint
model: hb_google/gemini-3-flash-preview
rationale: Focus internal behavioral queries on hosts that have reported active status
within the lookback window. Prioritize accounts belonging to users in high-privilege
departments such as IT, HR, or Finance.
references:
- name: "ESET Research \u2014 What to do when a data breach notice tells you almost\
\ nothing"
url: https://www.welivesecurity.com/en/how-to/what-to-do-when-a-data-breach-notice-tells-you-almost-nothing/
related:
- hunt: infostealer-infection-remediation
reason: This hunt focuses on the identity impact; a related hunt focuses on cleaning
the infected unmanaged machines themselves.
relation: alternative
scenario:
stages:
- name: Data Exfiltration Over C2
observables:
- large data volumes
- exfiltrated data
- access to sensitive information
slug: data-exfiltration
tactic: exfiltration
techniques:
- T1041
- name: Follow-on Phishing Attempts
observables:
- unsolicited breach notification email
- links in these messages
- targeted phishing calls
slug: phishing-follow-on
tactic: initial-access
techniques:
- T1566
- name: External Identity Exposure
observables:
- leaked usernames and passwords
- exposed email addresses
- exposed phone numbers
- government ID exposure
slug: external-identity-exposure
tactic: initial-access
techniques:
- T1566
- name: Account Misuse and Remediation
observables:
- suspicious activity on affected accounts
- password reset events
- enabling two-factor authentication (2FA)
slug: account-misuse-and-recovery
tactic: initial-access
techniques:
- T1566
summary: The campaign involves the large-scale exfiltration of sensitive organizational
and personal data, which is subsequently leveraged by adversaries for targeted
phishing and credential misuse. Defenders must identify exposure via external
breach intelligence and monitor for anomalous sign-ins or remediation actions
like emergency password resets.
severity: medium
targets:
analyst:
name: Tier-2 analyst
role: analyst
endpoint:
category: endpoint
name: Endpoint telemetry (hb_ surfaces)
telemetry:
- endpoint
haveibeenpwned:
category: siem
huntbase:
product: haveibeenpwned
name: haveibeenpwned
hudsonrock:
category: siem
huntbase:
product: hudsonrock
name: hudsonrock
hunter:
agent: true
name: Hunt agent
identity:
category: identity
name: Identity / sign-in telemetry
telemetry:
- identity
network:
category: network
name: Network telemetry
telemetry:
- network
web:
category: siem
name: Web server / proxy logs
telemetry:
- network
tlp: clear
type: investigation
---
# Identity Breach and Account Abuse
This phased hunt identifies corporate identities compromised in external breaches and infostealer activity, then monitors those specific accounts for anomalous internal behavior. By correlating external intelligence with authentication, web, and network telemetry, the hunt distinguishes between simple credential exposure and active account weaponization.
## scope-active-devices
<!-- Scope active managed devices -->
Identify recently active hosts to focus the internal behavioral queries.
```sqlite target=endpoint role=scoping params=(lookback_days=lookback_days)
~~~yaml
expected: A list of hostnames that have reported inventory recently. Silence means
no active devices are reporting.
reads:
- hostname
- lifecycle_state
- time
silence: not_evidence_of_absence
source: hb_devices
verified: dry-run
verified_at: '2026-10-14'
~~~
SELECT DISTINCT hostname AS device_hostname FROM hb_devices WHERE (lifecycle_state = 'active' OR lifecycle_state = 'running') AND time >= datetime('now', '-{{lookback_days}} days')
```
## external-intel-fan-out
<!-- Parallel external intelligence check -->
parallel:
- → check-hibp
- → check-hudsonrock
join: → weigh-external-exposure
## check-hibp
<!-- Public data breach exposure -->
Check if corporate accounts appear in public data breaches listed by HaveIBeenPwned.
```sqlite target=haveibeenpwned role=enrichment params=(corporate_domains=corporate_domains)
~~~yaml
expected: Corporate accounts found in third-party breaches. Silence confirms no corporate
identities are present in the HIBP snapshot.
reads:
- account
- data_classes
- name
silence: not_evidence_of_absence
source: hibp_breached_account
verified: dry-run
verified_at: '2026-10-14'
~~~
SELECT account, name AS breach_name, data_classes FROM hibp_breached_account WHERE instr(',' || '{{corporate_domains}}' || ',', ',' || LOWER(SUBSTR(account, INSTR(account, '@') + 1)) || ',') > 0
```
## check-hudsonrock
<!-- Infostealer identity leaks -->
Identify corporate users whose credentials were stolen by stealer malware as recorded by Hudson Rock.
```sqlite target=hudsonrock role=enrichment params=(corporate_domains=corporate_domains)
~~~yaml
expected: Corporate accounts compromised by infostealers. Silence means no credentials
from these domains were found in the malware database.
reads:
- computer_name
- date_compromised
- email
- malware_path
silence: not_evidence_of_absence
source: hudsonrock_search_by_email
verified: dry-run
verified_at: '2026-10-14'
~~~
SELECT email, computer_name, date_compromised, malware_path FROM hudsonrock_search_by_email WHERE instr(',' || '{{corporate_domains}}' || ',', ',' || LOWER(SUBSTR(email, INSTR(email, '@') + 1)) || ',') > 0
```
## weigh-external-exposure
<!-- Weigh external exposure risk -->
```agent target=hunter
cite: required
context:
- check-hibp
- check-hudsonrock
max_iterations: 3
objective: 'Categorize the exposure for corporate identities: distinguish between
static historical leaks and high-risk infostealer compromises that may indicate
active token theft.'
success_criteria: A per-account risk verdict citing the intelligence source and the
type of data leaked. The analyst will use this list to populate the high_risk_identities
parameter.
tools:
- endpoint
- haveibeenpwned
- hudsonrock
- identity
- network
- web
```
## internal-behavior-fan-out
<!-- Parallel internal behavior hunt -->
parallel:
- → detect-anomalous-logins
- → detect-phishing-interaction
- → detect-data-exfiltration
join: → final-correlative-analysis
## detect-anomalous-logins
<!-- Anomalous logins for high-risk identities -->
Find successful sign-ins from rare source IP addresses specifically for the corporate identities flagged in the intelligence phase.
```sqlite target=identity role=baseline params=(lookback_days=lookback_days, scope_hosts=scope_hosts, high_risk_identities=high_risk_identities)
~~~yaml
baseline:
compare: first_seen
window: '{{lookback_days}}d'
expected: Successful logins from unusual IPs or locations for high-risk accounts.
Silence proves no rare successful authentications occurred for these users.
prevalence:
by: device_hostname
key:
- actor_user_name
- src_endpoint_ip
rare_below: 5
reads:
- actor_user_name
- device_hostname
- src_endpoint_ip
- src_location_country
- status_id
- time
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-10-14'
~~~
SELECT actor_user_name, src_endpoint_ip, src_location_country, device_hostname, COUNT(*) as login_count, MIN(time) as first_seen FROM hb_auth_signin WHERE status_id = 1 AND ('{{high_risk_identities}}' = '' OR instr(',' || '{{high_risk_identities}}' || ',', ',' || actor_user_name || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY actor_user_name, src_endpoint_ip, src_location_country, device_hostname HAVING login_count < 5 ORDER BY login_count ASC
```
## detect-phishing-interaction
<!-- Phishing interaction for high-risk users -->
Identify web requests containing credential harvesting lures from the compromised users identified earlier.
```sqlite target=web role=triage params=(lookback_days=lookback_days, scope_hosts=scope_hosts, high_risk_identities=high_risk_identities)
~~~yaml
expected: HTTP interaction with potential phishing URLs by compromised users. Silence
confirms no such lures were visited by these specific accounts.
reads:
- actor_user_name
- device_hostname
- time
- url_full
- url_hostname
- url_path
- user_agent
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-10-14'
~~~
SELECT device_hostname, actor_user_name, url_hostname, url_path, user_agent, time FROM hb_http_activity WHERE (LOWER(url_full) LIKE '%login%' OR LOWER(url_full) LIKE '%office%' OR LOWER(url_full) LIKE '%verify%') AND ('{{high_risk_identities}}' = '' OR instr(',' || '{{high_risk_identities}}' || ',', ',' || actor_user_name || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```
## detect-data-exfiltration
<!-- Data exfiltration from compromised accounts -->
Identify large outbound data transfers originating from the identities previously flagged for high-risk exposure.
```sqlite target=network role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts, high_risk_identities=high_risk_identities)
~~~yaml
expected: Outbound sessions exceeding 50MB originating from high-risk users. Silence
means no such data transfers were recorded for these accounts.
reads:
- device_hostname
- direction
- dst_endpoint_ip
- state_kind
- time
- traffic_bytes
- user_name
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-10-14'
~~~
SELECT device_hostname, user_name, dst_endpoint_ip, SUM(traffic_bytes) as total_bytes FROM hb_network_connection WHERE state_kind = 'log' AND direction = 'outbound' AND ('{{high_risk_identities}}' = '' OR instr(',' || '{{high_risk_identities}}' || ',', ',' || user_name || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, user_name, dst_endpoint_ip HAVING total_bytes > 50000000 ORDER BY total_bytes DESC
```
## final-correlative-analysis
<!-- Final correlative analysis -->
```agent target=hunter
cite: required
context:
- weigh-external-exposure
- detect-anomalous-logins
- detect-phishing-interaction
- detect-data-exfiltration
max_iterations: 6
objective: Analyze the timing and nature of external breach reports against the internal
behavioral anomalies (logins, phishing, exfiltration) to determine if a credential
has been successfully weaponized.
success_criteria: A per-identity verdict of malicious | suspicious | benign citing
rows from internal and external phases.
tools:
- endpoint
- haveibeenpwned
- hudsonrock
- identity
- network
- web
```
## route-by-verdict
<!-- Route by verdict -->
if~: "the final correlative analysis verdict is malicious for at least one account" (confidence: high, judge=hunter)
then: → remediate-compromised-accounts
indeterminate: → analyst-impact-review
unavailable: → analyst-impact-review (blind_spot: mfa-telemetry-gap)
else: → close-out-and-tune
## remediate-compromised-accounts
<!-- Remediate compromised accounts -->
```action target=identity
~~~yaml
approval: required
~~~
Revoke all active sessions and OAuth tokens for the malicious identities. Force a password reset and verify current MFA enrollment status for any unauthorized methods added during the period of compromise.
```
→ analyst-impact-review
## analyst-impact-review
<!-- Analyst impact review -->
```manual target=analyst
Review the data exfiltration and phishing interaction results for the compromised accounts. Pivot to hb_cloud_api_activity to determine which sensitive files or resources were accessed during the anomalous sessions identified by the hunt.
```
→ close-out-and-tune
## close-out-and-tune
<!-- Close out and tune -->
```manual target=analyst
Document the identities remediated and any malicious infrastructure found. Update internal blocklists with source IPs from anomalous logins and refine the corporate domain monitoring in external intel providers.
```
→ end
Run it
Take this hunt into your environment.
Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.
Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.