T Techclick ← All lessons
Palo Alto · Cortex XDR · Interactive lesson

Cortex XDR telemetry then incident

Ticket: queue shows one PowerShell alert on WIN-FIN-04. Helpdesk already “closed it.” Three other hosts still talk to 203.0.113.88:443. Cortex XDR is not EDR with extra tiles. The agent ships endpoint telemetry; NGFW, cloud and connectors add the rest; analytics groups related alerts into an incident; causality names the process chain; XQL finds the hosts that never alerted; response isolates after the next heartbeat. Proof is Isolated status, not a green Close button.

16 min read · L2 primary · Quiz at end

After this page you can

Lessons · Cortex XSOAR · Agent, incidents, response

3.x incidents vs 5.x cases

Cortex XDR 3.x grouped alerts into incidents. 5.x renamed those to issues grouped into cases. Same job: one investigation container for related detections, assets and causality. This lesson uses incident as the operational word; on a 5.x tenant, open Cases / Issues and the Causality view from there.

XSOAR interview · playbooks after you already have a scoped incident.

Hero · agent telemetry becomes an incident
Laptop agent sending telemetry cubes into an XDR cloud that opens an incident card
Mood, not a wiring diagram. Exact path is in the SVG: agent + NGFW + cloud land in xdr_data, analytics groups them, you hunt, then isolate. The card on the right is not “one EDR alert.”
Quick answer

The Cortex XDR agent prevents and ships endpoint telemetry. Data sources add NGFW, cloud, Broker VM, XDR Collectors and connectors. Analytics, BIOC, IOC and correlation rules raise detections; Cortex groups related detections into an incident and builds a causality instance (CGO → actor). Hunt the rest of the estate with XQL on dataset = xdr_data. Contain from Investigation & Response → Response → Action Center → New Action → Isolate. Proof is endpoint status Isolated after the next heartbeat — DHCP/DNS still work; everything else is cut except traffic to Cortex XDR.

Concept — why one alert is not the case

The day-one SOC ticket is always the same: “We have a PowerShell alert. I closed it after kill-process.” Wrong unit of work. An alert (5.x: issue) is one detector firing on one host. The incident is the grouped story: same CGO, same C2 IP, same timeframe, other data sources. If you close the alert, the other hosts keep talking.

Three silent-miss states look identical from the queue (one red row):

Closing the alert does not isolate the host

Status lives on the endpoint object: Isolated / Not Isolated / Pending Isolation / Pending Isolation Cancellation. Action Center → Currently Applied Actions → Endpoint Isolation is the tracker. The alert table is not.

Agent, sources, incident, XQL, response

Five objects. Name them before you click Isolate.

Path · agent, sources, incident, response
Four glass panels labeled Agent, Sources, Incident, Response
Feel of the order. Exact Cortex sequence — ingest, group, causality, XQL, Action Center — is in the SVG below. The hoodie icon is mood, not an identity of the actor process.

Agent

Prevention + telemetry + forensics on the endpoint. Profiles under Inventory → Endpoints → Policy Management → Prevention → Profiles. Heartbeat is how Isolate actually arrives.

Data sources

Settings → Data Sources & Integrations. NGFW / Prisma Access, cloud (AWS/Azure/GCP), Broker VM syslog, XDR Collectors, connectors. Agent-only is EDR.

Incident

Grouped detections, assets, artifacts, causality. 5.x UI: Cases. Open Causality view from the issue — CGO on the left, actor of the alert on the branch.

XQL + response

Query Center hunts xdr_data. Action Center isolates, quarantines, terminates, blocklists. XSOAR playbooks sit after you already scoped the hosts.

Say this out loud

The agent is one sensor. Data sources fill the lake. Analytics writes the incident. Causality names the chain. XQL finds the quiet hosts. Isolate is a response action that waits for heartbeat.

Path — telemetry then incident

Existing incident first: if Cortex already grouped this CGO / dest IP, you join that story. New activity walks ingest → detectors → grouping → causality. XQL is how you prove the grouping did not miss a host. Isolate is last.

Flow 1 · lab story WIN-FIN-04 PowerShell → 203.0.113.88
1 Agent WIN-FIN-04 process 2 Sources NGFW + cloud logs 3 Detectors BIOC · IOC · analytics 4 Incident group + causality 5 XQL hunt on xdr_data → 6 Isolate via Action Center dataset = xdr_data | filter event_type = NETWORK and action_remote_ip = "203.0.113.88" hits: WIN-FIN-04 · WIN-HR-12 · WIN-OPS-07 — then Isolate, wait heartbeat Miss at step 4: treat one BIOC as the case. Close it. Other hosts stay on the C2. Open the incident, walk CGO → actor, then XQL the dest IP. Do not start at Isolate. Causality: WINWORD.EXE (CGO) → powershell.exe -enc → 203.0.113.88:443. Killing powershell leaves Word. Isolate still allows DHCP, DNS, and HTTPS to Cortex XDR. Proof is Isolated, not Pending Isolation. Source: Cortex XDR — data sources; causality view; isolate an endpoint; XQL schema xdr_data.

Read left → right, then the gold bar. Detectors write alerts. The incident is the container. XQL is how you find hosts that never alerted.

ObjectLab valueIf missing
AgentWIN-FIN-04 connected, content currentNo process events. NGFW may still log the C2; you cannot isolate from XDR.
NGFW sourcePAN-OS traffic logs in Data SourcesIncident is endpoint-only. Lateral / C2 from agentless hosts is invisible.
IncidentINC-1042 (5.x: case) grouping BIOC + firewallQueue is a pile of alerts. Analyst closes one row.
CausalityCGO WINWORD.EXEpowershell.exeTerminate last process; parent relaunches child.
XQLaction_remote_ip = "203.0.113.88"HR/OPS keep talking. “Only one host was infected.”
Isolate proofStatus Isolated after heartbeatPending Isolation = action queued, host still on the wire.

IOC vs BIOC vs XQL vs isolate

Pick the detector that matches the evidence you actually have. Mixing them is the usual “we have a hash, so I isolated the whole OU” ticket.

Flow 2 · four different jobs
IOC static property SHA256 · IP · domain filename · path Threat Management BIOC behaviour process · file · registry network activity can push to Restrictions XQL hunt / correlate dataset = xdr_data Query Center or correlation rule Isolate response action Action Center next heartbeat status Isolated You can hunt with XQL without isolating. You must not isolate from a single IOC match on a shared proxy IP. BIOC can become a custom prevention rule via Restriction profiles — that is agent-side block, not Action Center isolate. Correlation rules are scheduled XQL across datasets. They write alerts; they do not contain the host. Source: Cortex XDR detection rules (IOC / BIOC / Correlations); isolate an endpoint; XQL schema.

Four columns, four tickets. Do not isolate to “fix” a noisy BIOC. Tune the rule or add an exception.

NeedUseSkip
Known bad hash / C2 domain from intelIOC rule (SHA256, IP, domain, path)BIOC. You already have a static property.
Encoded PowerShell from WordBIOC on process + command line; Restrictions if you want agent blockIOC on powershell.exe — that is a living-off-the-land binary.
Who else talked to 203.0.113.88XQL on xdr_data (and NGFW fields in the same lake)Closing the one BIOC and hoping grouping is complete.
Stop C2 now on confirmed hostsAction Center Isolate; track IsolatedAuto-isolate from an unreviewed BIOC. VDI/Linux need allow-list in Agent Settings.

Do — runbook Side A / B / C

Side A is sensors. Side B is the incident and causality. Side C is XQL then isolate. Do not start at C.

Side A — agent and data sources

  1. Endpoint is connected

    Inventory → Endpoints → All Endpoints (3.x: Endpoints → Endpoint Management → Endpoint Administration). Lab: WIN-FIN-04 Operational Status connected, Isolated = Not Isolated, last seen within heartbeat. No row = you cannot isolate from XDR and process events are missing. Source: Cortex XDR — Manage endpoints.

  2. Data sources actually ingest

    Settings → Data Sources & Integrations. Confirm PAN-OS / Prisma Access, cloud connectors if in scope, Broker VM applets for syslog. Agent-only tenants will not stitch firewall causality. Source: Cortex XDR — What are Cortex XDR data sources and connectors.

XQL — Side A, is the agent even talking?
dataset = xdr_data
| filter agent_hostname = "WIN-FIN-04"
| fields _time, event_type, actor_process_image_name, action_process_image_name
| sort desc _time
| limit 20

Side B — incident then causality

https://lab.xdr.us.paloaltonetworks.com · Incident Response › Incidents › INC-1042
Training mock · not live

Incidents › INC-1042 › Causality

INC-1042 · Suspicious encoded PowerShell

New · High
BIOC + XDR Agent + Firewall (3)
WINWORD.EXE · WIN-FIN-04
powershell.exe -enc · 203.0.113.88:443
T1059.001 · T1071.001
WIN-FIN-04 (more via XQL)

Source: Cortex XDR causality view — CGO on the left of the chain; Information overview for SHA256, parent PID, MITRE; Forensics highlights for script engines / network / file. 5.x: right-click an issue in Cases or Issues. Closing the BIOC row is the wrong button.

  1. Open the incident, not the alert

    3.x: Incident Response → Incidents. 5.x: Cases. Starred / featured hosts help grouping but do not replace XQL. Count of grouped alerts > 1 is the first hint you are not looking at a singleton.

  2. Walk causality before kill-process

    Right-click the issue → Causality view. CGO is the process responsible for the rest of the chain. Lab CGO is Word, not PowerShell. From a process node you can terminate, quarantine, or add to block/allow list — after you understand the branch. Source: Cortex XDR — Causality view.

XQL — Side B, same CGO / command line
dataset = xdr_data
| filter event_type = PROCESS and action_process_image_name = "powershell.exe"
| filter action_process_command_line contains "-enc" or action_process_command_line contains "bypass"
| fields agent_hostname, action_process_command_line, actor_process_image_name, causality_actor_process_image_name, _time
| sort desc _time
| limit 100

Side C — hunt, then isolate, then prove

https://lab.xdr.us.paloaltonetworks.com · Investigation & Response › Response › Action Center › New Action
Training mock · not live

Action Center › New Action › Isolate

Isolate endpoints

Isolate
INC-1042 C2 203.0.113.88 — do not lift until XQL clean
WIN-FIN-04 · WIN-HR-12 · WIN-OPS-07
Currently Applied Actions › Endpoint Isolation

Source: Cortex XDR — Isolate an endpoint. Path: Investigation & Response → Response → Action Center → New Action → Isolate. Agent receives the instruction on the next heartbeat. Cancel only while still Pending. Isolated endpoints still pass DHCP, DNS, and HTTPS to Cortex XDR; IP-based file storage mounts break.

  1. XQL the dest IP across the lake

    Investigation & Response → Search → Query Center. Filter event_type = NETWORK and the C2. Lab must return three hostnames, not one. Same query with NGFW fields if the firewall source is onboarded. Source: Cortex XQL schema — xdr_data.

  2. Isolate the confirmed set

    New Action → Isolate, comment with incident id, select the three hosts. Do not isolate from a dest IP that is a shared proxy until XQL shows the process that opened it.

  3. Read Isolated, not Pending

    All Endpoints column Endpoint Isolated, plus Action Center → Currently Applied Actions → Endpoint Isolation. Pending Isolation = server has the job, agent has not applied it. After remediation: Endpoint Control → Cancel Endpoint Isolation.

XQL — Side C, hosts still talking to C2
dataset = xdr_data
| filter event_type = NETWORK and action_remote_ip = "203.0.113.88"
| fields agent_hostname, action_remote_ip, action_remote_port, actor_process_image_name, _time
| sort desc _time
| limit 200

# after Isolated: this should go quiet on those three hostnames
# DHCP/DNS to Cortex XDR still appear — that is expected, not a failed isolate
Green proof

Three hosts Isolated. XQL to 203.0.113.88 from those agents stops. Incident (case) still open until you document CGO, XQL result set, and Action Center action id. That is the close — not “alert status = closed.”

One PowerShell story after go-live

WINWORD.EXE on WIN-FIN-04 launches powershell.exe -enc …. Agent BIOC fires. NGFW traffic log for 203.0.113.88:443 lands in the same lake. Cortex groups BIOC + firewall into INC-1042. Causality: CGO Word, actor PowerShell, dest C2. XQL on the dest IP adds WIN-HR-12 and WIN-OPS-07 — no BIOC there because the parent was a different LOLBin. Isolate all three. Next heartbeat: Isolated. Re-query C2: quiet on those hostnames.

Proof · Isolated is a status, not a dashboard tile
Analyst at a SOC desk verifying green isolation checks on a wide monitor
Ops feel. The actual evidence is Endpoint Isolated = Isolated plus Action Center Endpoint Isolation, then an XQL that no longer returns those hosts for the C2. Artwork checkmarks are not Cortex XDR.
Promote the hunt — optional BIOC from the same logic
# After the incident: if this command-line pattern is how they live off the land,
# save as BIOC (process) rather than a one-off Query Center search.
# Restriction profile can push that BIOC to the agent as prevention.
# Do not auto-isolate from the new BIOC until false-positive review on a pilot OU.

dataset = xdr_data
| filter event_type = PROCESS and action_process_image_name = "powershell.exe"
| filter action_process_command_line contains "-enc"

Traps + proof

SymptomLikely causeProof
One alert, “host cleaned”Worked the alert, not the incident/causality/XQL.Same dest IP in xdr_data on other agent_hostname values.
Kill powershell, it comes backCGO still alive (Word, explorer, scheduled task).Causality view CGO node; Event log 4698 via XQL if it is a task.
Isolate clicked, C2 continuesPending Isolation — no heartbeat yet, or Linux/Mac prerequisites missing.Endpoint Isolated column. Mac needs network extension; Linux needs iptables + Agent Settings allow list.
Empty XQL on a host you can pingAgent disconnected, or event type/field wrong (PROCESS vs NETWORK).All Endpoints last-seen. Side A query returns no rows.
NGFW saw C2, XDR incident did notFirewall data source not onboarded / not in the same tenant lake.Settings → Data Sources & Integrations. Agent-only EDR view.
Mass isolate from an IOC IPThat IP is a CDN/proxy; BIOC/process context missing.XQL actor_process_image_name for that dest. Isolate the process owners, not the subnet.
File shares die after isolateExpected: IP-based file storage is blocked. DHCP/DNS still pass.Cortex isolate doc. Unmount those shares if the host hangs on listing folders.
Do not auto-isolate from an unreviewed BIOC

Deploy agents by group, validate data sources, tune BIOCs, then automate only reviewed response actions (XSOAR or native playbooks). Global isolate-on-alert is how you freeze VDI and jump servers. Restriction profiles are the right place for “block this behaviour on the agent,” not Action Center spray.

Pilot checklist

Knowledge check

Six judgment items. Submit once. Reasons point back at the section to re-read.

Q1

Queue shows one encoded-PowerShell BIOC on WIN-FIN-04. Helpdesk wants it closed. First move?

Correct: b. The unit of work is the incident plus causality plus a hunt for quiet hosts. Closing the alert is how HR/OPS stay on C2. Re-read Why one alert is not the case and Flow 1.
Q2

Which statement treats Cortex XDR as more than endpoint EDR?

Correct: a. Agent-only is EDR. XDR value is correlation across sources. Re-read Agent, sources, incident and Side A.
Q3

Intel gives you a SHA256. The live attack is Word spawning powershell -enc. What maps to what?

Correct: c. IOC is a property. BIOC is behaviour and can ride Restriction profiles to the agent. Correlation is scheduled XQL. Re-read IOC vs BIOC vs XQL vs isolate.
Q4

You need every host that connected to 203.0.113.88, including those with no BIOC. Where and what?

Correct: b. Hunt is XQL on the lake. IOC waits for a future match. Isolate does not search. Re-read Side C and Flow 1.
Q5

You issued Isolate on three lab hosts. C2 still flows from WIN-HR-12. First check?

Correct: d. Isolate is applied on the next heartbeat. Pending means the host is still on the wire. Re-read Side C and Traps.
Q6

Causality shows WINWORD.EXE on the left and powershell.exe as the actor. Why does that matter?

Correct: a. CGO sits on the left; the actor of the issue is on the branch. Terminate/quarantine after you read the chain. Re-read Side B and Flow 1.

Sources

Related: Cortex XSOAR interview · playbooks after the incident is scoped, not instead of causality and XQL.