User & Entity Behavior Analytics (UEBA)
Builds a statistical baseline of normal behavior per user and host, then flags deviations as risk-scored anomalies you can triage, escalate, or dismiss.
/uebaHow it works
OverviewHow UEBA Works
UEBA runs in two explicit phases that you trigger from the console: Compute Baseline and Run Detection. Both operate only on your own organization's data.
1. Baseline
Computing a baseline looks back over a 14-day window and, for each entity and metric, derives simple statistics — mean, stddev, min, max, and sample count. Baselines are computed from your SIEM events (per-user) and EDR events (per-host) and stored as one row per entity + metric combination. Re-running it upserts the existing baselines.
2. Detection
Running detection compares each entity's activity over the last 24 hours against its stored baseline. For every metric it computes a z-score — how many standard deviations the observed value sits from the baseline mean:
- A deviation of 2.5σ or greater is recorded as an anomaly. Anything below that is ignored.
- Each anomaly gets a risk score using the formula
min(100, round(z × 15)), so a z of 4.0 → risk 60, a z of 6.7+ saturates at 100. - Baselines whose standard deviation is zero are skipped (no meaningful deviation can be computed).
3. Escalation
When an anomaly's risk score is 70 or higher, UEBA also creates an Alert (source ueba-engine, severity High, or Critical at risk ≥ 85) and hands it to the SOAR engine, which runs any matching playbooks automatically.
Entity risk rollup
The console groups anomalies by entity. Each entity's displayed risk score is the maximum risk across its open anomalies, alongside a count of how many anomalies it has.
Detection is on-demand, not continuous — anomalies only appear after you run it. Compute a baseline first, then run detection, or the entity and anomaly lists will be empty.
Metrics & scoring
ReferenceTracked Metrics
Three behavioral metrics are baselined and evaluated. Each ties to a specific data source and observation.
| Metric | Entity | Baseline (14-day window) | Observation (last 24h) |
|---|---|---|---|
login_hour | User | Distribution of the hour-of-day (0–23) of the user's SIEM events | The hour of the user's most recent SIEM event |
auth_failures | User | Per-day count of Windows auth-failure events (4625, 4771) | Count of those events in the last 24h |
edr_events | Host | Per-day count of EDR process_alert / network_alert events | Count of that host's EDR events in the last 24h |
Score fields
Every anomaly row carries the full picture behind its score:
- Observed (
observedVal) — the measured value over the last 24h. - Expected (
expectedMean) — the baseline mean. - Deviation (
zScore) — standard deviations from the mean, shown as e.g.3.4σ. - Risk (
riskScore) — 0–100, frommin(100, round(z × 15)). - Status —
new,reviewed, orfalse_positive.
Risk is color-banded in the UI: 80+ critical, 60–79 high, 40–59 medium, below 40 low.
Using the console
How to useRunning an Analysis
- Open UEBA. The header shows how many entities are monitored and how many anomalies are currently active (status
new). - Click Compute Baseline. A toast confirms how many metrics were baselined.
- Click Run Detection to score the last 24 hours against those baselines. The lists refresh when it finishes.
Entities and Anomalies tabs
- Entities — a card per flagged entity (👤 user or 🖥 host) showing its rollup risk score, a risk bar, and its anomaly count. Clicking a card opens its top open anomaly.
- Anomalies — a table of open anomalies (risk, entity, metric, description, z-score, age) sorted by risk. Each row has an inline Dismiss that marks it a false positive. Clicking a row opens the triage modal.
The triage modal
Opening an anomaly shows a full diagnostic view:
- Observed / Expected / Deviation summary tiles.
- Risk Score Breakdown — the z-score, the exact formula, the resulting score, and how many other open anomalies the entity has.
- Activity Timeline (last 30 days) — the real events behind the score, pulled from the same sources the detector reads: SIEM events for users (with an auth-failure count), EDR events for hosts (with a critical/high count).
- GuardFox AI Diagnostics — a plain-language explanation tailored to the metric type.
Triage actions
- Contain Host (EDR) (hosts only) — looks up the matching enrolled EDR agent by hostname and sends it a quarantine command. If no agent is enrolled for that host, the modal says so.
- Escalate to Ticket — opens an incident with the anomaly's details and a severity mapped from its risk score.
- Dismiss (FP) — marks the anomaly a false positive.
For user entities the modal also shows Disable User Session and Reset Credentials buttons. In the current build these display an in-modal confirmation only and do not yet call a backend enforcement endpoint — use Escalate to Ticket to drive a real response workflow.
API reference
ReferenceEndpoints
All UEBA endpoints are session-authenticated app routes (call them from a signed-in session) and are scoped to your organization.
Compute baselines
POST /api/ueba/baseline rebuilds baselines over the 14-day window and returns the number computed. GET returns the stored baselines with parsed statistics.
curl -X POST https://portal.guardfoxsecurity.com/api/ueba/baseline
# -> { "computed": 12 }Run detection
POST /api/ueba/anomalies scores the last 24h against current baselines, persists any anomalies (z ≥ 2.5), and escalates those with risk ≥ 70.
curl -X POST https://portal.guardfoxsecurity.com/api/ueba/anomalies
# -> { "detected": 3, "anomalies": [ ... ] }List anomalies
GET /api/ueba/anomalies returns anomalies plus the per-entity risk rollup. Optional query params: status (defaults to new; pass all for every status) and entityId to filter to one entity.
curl "https://portal.guardfoxsecurity.com/api/ueba/anomalies?status=all"
# -> { "anomalies": [ ... ], "entities": [ { "entityId", "entityType", "riskScore", "anomalyCount" } ] }Update anomaly status
PATCH /api/ueba/anomalies sets the status of one anomaly (e.g. dismiss as a false positive). Requires id.
curl -X PATCH https://portal.guardfoxsecurity.com/api/ueba/anomalies \
-H "Content-Type: application/json" \
-d '{"id":"","status":"false_positive"}' Entity timeline
GET /api/ueba/timeline returns up to 25 of the entity's most recent events from the last 30 days. Both entityId and entityType (user or host) are required.
curl "https://portal.guardfoxsecurity.com/api/ueba/timeline?entityId=jdoe&entityType=user"
# -> { "events": [ ... ], "summary": { "totalEvents", "authFailures", "windowDays": 30 } }