Unlike products that ship telemetry to a cloud brain for a verdict, SentinelOne runs its detection engines on the endpoint. Consequence: detection and response continue with no network connectivity — relevant for laptops on hostile networks and for ransomware that severs connectivity first.
Platform notes: on macOS the agent uses Apple's Endpoint Security framework and therefore requires MDM-delivered system-extension approval and Full Disk Access. On Linux it typically runs in user space with eBPF, which matters for kernel-version compatibility on servers.
Every execution chain gets a Storyline ID. Related events inherit it, so a single identifier retrieves the whole incident rather than a pile of disconnected alerts.
Practical consequences worth internalising:
src.process.storyline.id) is the fastest pivot in the product — find one bad event, retrieve everything connected to it.| Mode | Behaviour | Use when |
|---|---|---|
| Detect | Alerts only; nothing is stopped | Initial rollout, sensitive servers under observation |
| Protect | Acts automatically | Steady state everywhere |
| Protect → Kill | Terminates the malicious processes | Sensible default |
| Protect → Quarantine | Kill plus isolate the files involved | Standard for workstations |
| Remediate | Undo changes made by the story | Post-incident cleanup |
| Rollback | Restore encrypted/modified files from VSS (Windows) | Ransomware — requires VSS enabled and sufficient space |
Policy is set per Site and Group and inherits down from the Account level, so structure your groups to match how you want to differ: servers, workstations, developer machines (noisier by nature), executives.
| Area | Contains | Go there to… |
|---|---|---|
| Dashboard | Threat counts, agent health, coverage | Daily health check |
| Incidents / Threats | Detections with verdict and status | Triage and resolve |
| Visibility (Deep Visibility) | Full event search | Hunt and investigate |
| Endpoints / Sentinels | Agent inventory, versions, status | Coverage and health |
| Policy | Mode, engines, exclusions per group | Change enforcement |
| Exclusions | Path, hash, certificate, browser | Tune — carefully |
| Rules (STAR) | Custom detection rules from saved queries | Build your own detections |
| Activity log | Admin actions | Who changed what |
| Singularity Marketplace | Integrations | SIEM/SOAR connections |
Agent health is a security control. Track: agents not reporting for N days, out-of-date agent versions, agents in Detect mode that should be in Protect, and — on macOS — agents lacking Full Disk Access. A console that says "healthy" while an agent lacks permissions is the failure mode to design against.
Network isolation (Disconnect from Network) keeps the agent's own connection to the console alive so you can still investigate and run remote commands. Isolate early and apologise later; it is far cheaper than lateral movement.
| Type | Precision | Comment |
|---|---|---|
| Hash | Highest | Exact file; safest, but breaks on every update |
| Certificate (signer) | High-ish | Good for a trusted vendor; a stolen cert defeats it |
| Path | Low | Anything dropped there becomes invisible |
| Browser | Narrow | Specific browser-related suppressions |
Rules to hold to: never exclude a whole drive, a user profile, or %TEMP%; scope exclusions to the smallest group that needs them; record requester, reason and review date; and re-review quarterly. Attackers who know your exclusions will use them, and exclusion lists outlive the people who created them.
| Event type | Key fields |
|---|---|
| Process | src.process.name, src.process.cmdline, src.process.parent.name, src.process.user, src.process.image.path, src.process.publisher, src.process.storyline.id |
| File | tgt.file.path, tgt.file.sha256, tgt.file.extension, tgt.file.isSigned |
| Network | dst.ip.address, dst.port.number, url.address, event.network.connectionStatus |
| DNS | event.dns.request, event.dns.response |
| Registry | registry.keyPath, registry.value |
| Login | event.login.userName, event.login.type, event.login.loginIsSuccessful |
| Cross-process | tgt.process.name, event.type = "Duplicate Process Handle" / injection events |
| Endpoint | endpoint.name, endpoint.os, agent.version, site.name |
The src. / tgt. convention is the thing to internalise: src is the actor (the process doing something), tgt is the object acted upon (the file written, the process injected into).
= != exact match / negation in ( ... ) set membership contains / containscis substring (cis = case-insensitive) matches regular expression AND OR NOT ( ) boolean composition
// Office spawning a shell — the classic src.process.parent.name in ("WINWORD.EXE","EXCEL.EXE","OUTLOOK.EXE","POWERPNT.EXE") AND src.process.name in ("cmd.exe","powershell.exe","wscript.exe","mshta.exe") // encoded PowerShell src.process.name = "powershell.exe" AND (src.process.cmdline containscis "-enc" OR src.process.cmdline containscis "frombase64string" OR src.process.cmdline containscis "downloadstring") // execution from a user-writable staging directory src.process.image.path containscis "\\appdata\\local\\temp\\" AND src.process.publisher = "" // LSASS access (credential dumping) tgt.process.name = "lsass.exe" AND src.process.name != "MsMpEng.exe" // macOS fake password prompt src.process.name = "osascript" AND src.process.cmdline containscis "display dialog" // suspicious DNS: long, high-entropy labels event.dns.request matches "[a-z0-9]{25,}\\." // pull the whole incident once you have one event src.process.storyline.id = "A1B2C3D4E5F6"
PowerQuery adds a piped, aggregate-capable syntax on the same data — this is where hunting gets genuinely powerful, because prevalence analysis is what separates "weird" from "rare and therefore interesting".
// rarest signed-less binaries in the estate src.process.publisher = "" | group count = count() by src.process.name | sort -count | limit 100 // which hosts ran a given hash tgt.file.sha256 = "<hash>" | group hosts = estimate_distinct(endpoint.name) by tgt.file.path // beaconing candidates: repeated connections, few distinct destinations event.type = "IP Connect" | group conns = count(), dsts = estimate_distinct(dst.ip.address) by endpoint.name, src.process.name | filter conns > 500 AND dsts < 3 | sort -conns // PowerShell command-line prevalence — outliers rise to the bottom src.process.name = "powershell.exe" | group runs = count() by src.process.cmdline | sort runs | limit 50
STAR (Storyline Active Response) converts a saved Deep Visibility query into a rule that evaluates continuously and can act automatically.
Good STAR candidates are things that are unambiguous in your environment: execution from a specific staging path, a tool nobody legitimately runs, persistence created by a non-IT process, or the fake-password-prompt pattern on macOS. Poor candidates are broad behaviours with legitimate variants — those belong in the SIEM where they can be correlated with other signals rather than actioned alone.
You need to find every host where an unsigned binary executed from a user Temp directory in the last week, ranked by rarity. Which approach?
The senior framing for a board or a client: EDR is a very strong control for endpoint execution and a weak one for identity abuse. That is not a criticism of the product — it is why the stack also contains an IdP, an SSE and a SIEM, and why the three must be correlated rather than run in parallel.
SentinelOne reports clean across the estate, yet finance has been defrauded via a supplier invoice change. Was EDR at fault?