Worked example — coordinated credential-access from a single IP
A real end-to-end run of soc-investigate against a live Exabeam staging MCP. It shows the craft the
skill is meant to apply: a CRITICAL alert that looks like a noisy 800-user rollup turns out to be a
genuine coordinated campaign once you pivot — and the discipline is to escalate, not close, and not to
be impressed by the big number for its own sake.
Identifiers below (users, hostnames, domains, IP) come from a synthetic staging tenant — the data is fabricated, but every tool call, field name, and query is real and was run as shown.
The alert as handed over
exabeam_search_alerts with filter: "caseId:null", orderBy: ["riskScore DESC"] surfaced it at the
top of the untriaged queue:
- Name: Abnormal number of password retrievals for this user
- alertId:
4cc3c489-4c77-4cfd-9f22-a0561136c6ce - Priority: CRITICAL · riskScore: 99 · status: READ · creationBy: system
user: an array of ~820 users · rules: 1,391 entries across 21 unique rule IDs- MITRE: T1078, T1003, T1098, T1133, T1071, T1213 (12 technique mappings)
Restated in one sentence: an aggregate detection is firing across ~820 users for abnormal CyberArk password retrievals and a cluster of first-time logins — flagged CRITICAL/99.
First instinct to resist: "820 users and 1,391 rules = a noisy rollup, downgrade it." Per the skill's Modes rule, aggregation amplifies artifacts — but that cuts both ways. The number alone is neither proof nor dismissal. Pivot before you judge.
Orient — what is the detector actually claiming?
exabeam_get_alert_details and exabeam_threat_summary reframed it. The per-detection reasons are
tiny ("Abnormal number (4) of password retrievals for paul.thomas17954"; many "First password
retrieval from safe USER6403 for …"). Four retrievals is not, by itself, alarming.
But exabeam_threat_summary (Exabeam's own explainer) named the thread that ties it together:
Multiple users … abnormal password retrievals from CyberArk PAM, first-time logins to Cisco Network Security and Microsoft 365, and abnormal network activity — all originating from a single external IP (198.51.100.57) … suggesting a coordinated attack.
That single-IP claim is the hypothesis worth testing. If true, this isn't 820 unrelated noisy alerts — it's one actor exercising many identities.
Gather evidence — pivot on the correlating IP
exabeam_get_alert_threat_timeline gave the real detection queries (e.g.
activity_type = "password-checkout" AND source_user_entity_id = "UANpaul.thomas17954@dev.skybridge.com"
AND NOT safe_value = null). Two pivots settled it.
Pivot 1 — the IP (exabeam_search_events):
{"arg0": {"filter": "src_ip:\"198.51.100.57\"",
"fields": ["time","user","activity_type","product","src_ip","dest_host"],
"orderBy": ["time DESC"], "startTime": "2026-06-01T00:00:00Z", "endTime": "2026-06-04T00:00:00Z", "limit": 20}}
totalRows > 0, and the rows span many distinct users from one IP:
| time | user | activity_type | product |
|---|---|---|---|
| 17:39 | (none) | vpn-login | F5 Access Policy Manager |
| 17:39 | daniel.rodriguez12102 | endpoint-login | Event Viewer – Security |
| 17:39 | paul.thomas19094 | endpoint-login | Event Viewer – Security |
| 17:39 | lucas.white11218 | endpoint-login | Event Viewer – Security |
One IP, VPN in, then endpoint logins as a rotating cast of users. That is the fingerprint of a coordinated push, not 800 coincidences.
Pivot 2 — a representative user (exabeam_search_events):
{"arg0": {"filter": "activity_type:\"password-checkout\" AND user:\"paul.thomas17954\"",
"fields": ["time","user","activity_type","product","src_ip","dest_host"],
"orderBy": ["time DESC"], "startTime": "2026-06-01T00:00:00Z", "endTime": "2026-06-04T00:00:00Z", "limit": 20}}
totalRows = 4 — the exact "abnormal (4)" the detector claimed — and every checkout is from CyberArk
PAM, sourced from 198.51.100.57. A broader user:"paul.thomas17954" pull shows the same IP driving an
http-session (Symantec Web Security) and process-create events on internal hosts. The IP is present at
every stage of this user's activity.
Timeline
| Time (UTC, 2026-06-02) | Event | Source |
|---|---|---|
| 17:03 | 4× CyberArk password-checkout, user paul.thomas17954, from 198.51.100.57 |
search_events / detection 30b3e42b… |
| 17:03–18:31 | "First password retrieval from safe USER6403" across dozens of users | threat_timeline |
| 17:39 | vpn-login (F5) + endpoint-login (Windows) for many users, all from 198.51.100.57 |
search_events (Pivot 1) |
| ~17:39 | http-session to Symantec Web Security for paul.thomas17954 from 198.51.100.57 |
search_events (Pivot 2) |
~1h34m, one IP, credential retrieval → login → web/endpoint activity across many identities.
Assessment
Malicious hypothesis: a single external host (198.51.100.57) is using or harvesting credentials to authenticate as many users — PAM vault checkouts, first-time logins to Cisco NS / M365, endpoint logins — a coordinated credential-access + lateral-movement campaign. Supported by: the same IP across VPN, endpoint, PAM, and web events for unrelated users; PAM checkouts tied to the IP; the explainer's malicious-site note. Contradicted by: nothing found — no change ticket, no automation account, no benign single-owner.
Benign hypothesis: a shared jump host / NAT egress or a scripted automation legitimately transits this IP. Contradicted by: the activity mix (interactive VPN + endpoint logins + PAM retrievals across many human users) doesn't match a service automation, and no positive benign owner was found.
Deciding evidence: the single IP 198.51.100.57 appearing as src_ip for password-checkouts and
endpoint/VPN logins across many distinct users — positive malicious correlation, not an aggregation
artifact.
Verdict & rationale
Verdict: Confirmed coordinated threat — escalate. Confidence: High (for "coordinated malicious pattern"; individual-account impact still to be scoped by IR). The big user count wasn't the signal; the shared source IP was. A positive benign explanation was actively sought and not found, so this is not a false positive — and its scale/impact make it a human-owned escalation, not an auto-close.
Taxonomy outcome: raised.
Actions
- Taken (in the run):
exabeam_create_caseto escalate;exabeam_create_case_noteswith this writeup and the two pivots. (Noupdate_alert/update_caseclose — this is the opposite of a close.) - Recommended containment (analyst approves in EDR/IAM — not an Exabeam-MCP capability):
- Block
198.51.100.57at the VPN/edge/firewall. - Disable / force-reauth the accounts seen authenticating from it; prioritize any with PAM checkouts.
- Rotate every credential retrieved from the affected CyberArk safes (esp. safe
USER6403) — assume exposed. - Hunt the IP wider (all
src_ip/dest_ip, longer window) for scope beyond this alert.
Why this is a good teaching case
- A CRITICAL/99 aggregate is a claim, not a verdict — the per-user counts were trivial; only the pivot made the case.
- Scale is a distractor until you find the correlator. The skill's "a number that alarms by its size is a noise hypothesis before it's scale" holds — and the single IP is what turned noise into signal.
- The close bar and the confirm bar are mirrors: no positive benign explanation → not an FP; positive malicious correlation → confirmed. Both were applied here.