SecOps Center
Decoy services (SSH · HTTP · DB · file-share) and honeytokens (AWS keys · DB rows · canary URLs) that scream the moment anyone touches them. Zero false positives by design — anyone interacting with a decoy is confirmed malicious.
Until the deploy layer ships, the “armed decoys” you see referenced in the Deception & Hunt Pack tabs reflect design state, not live listeners in your VPC. We won’t ship a fake “Deploy Honeypot” button that mutates ephemeral server-side state and pretends to stand up real infra.
Four hunt packs the SOC runs continuously. Every detection is git-versioned, ATT&CK-tagged, and CI-tested. Green signals are validated in last 90d.
Living-off-the-land binaries with web URLs or encoded args: certutil · bitsadmin · mshta · rundll32 · regsvr32 · wmic · msiexec. High-severity detect, SOAR auto-isolate.
| Rule | Binary | Pattern | Last fired | FP rate |
|---|---|---|---|---|
| LOLBAS-certutil-web | certutil.exe | -urlcache · -split · -f http* | 2h ago | 2% |
| LOLBAS-bitsadmin-transfer | bitsadmin.exe | /transfer · /download http* | yday | 0% |
| LOLBAS-mshta-js-vbs | mshta.exe | javascript: · vbscript: | 38m ago | 1% |
| LOLBAS-rundll32-suspicious | rundll32.exe | javascript: / no-dll / url arg | 6h ago | 4% |
| LOLBAS-regsvr32-scrobj | regsvr32.exe | /s /n /u /i:http* scrobj.dll | 3d ago | 0% |
| LOLBAS-msiexec-web-install | msiexec.exe | /i http* | yday | 2% |
EID 1102 (log cleared) · ETW provider-stop · EventLog service manipulation — any of these is a P0 incident. One of the last things an attacker does before leaving.
| Signal | EID / source | Last seen | Verdict |
|---|---|---|---|
| Security log cleared | EID 1102 | yday · SRV-PATCH-02 | admin · verified |
| ETW Microsoft-Windows-DotNETRuntime stopped | ETW-stop | never | — |
| EventLog service disabled | EID 7040 · svc-change | never | — |
| Audit-policy weakened | EID 4719 | 14d ago | reverted |
SwiftOnSecurity-base tuned <5% FP per host. Process · network · image-load · file-create visibility across the fleet. Feeds every other hunt pack.
| Event ID | Purpose | Volume (7d) | Drives rule |
|---|---|---|---|
| 1 · ProcessCreate | Process lineage | 124M | LOLBAS · suspicious parent-child |
| 3 · NetworkConnect | Process → net | 86M | Beaconing · DNS tunnel |
| 7 · ImageLoad | DLL loads | 218M | BYOVD · DLL hijack |
| 10 · ProcessAccess | Handle opens | 14M | LSASS dump detect |
| 11 · FileCreate | Dropped payloads | 42M | Persistence · MoTW |
| 13 · RegistryValueSet | Run keys / hijacks | 28M | Persistence sweep |
| 22 · DNSQuery | Resolver calls | 312M | DGA · DNS tunneling |
Scheduled tasks · run-keys · WMI event-sub · cron · systemd-timer · services · browser extensions. Any unsigned or unbaselined artifact raised.
| Artifact | Host | Kind | Signed | Verdict |
|---|---|---|---|---|
HKCU\Run\Updater42 | WS-4218 | Run-key | ✗ | INVESTIGATE |
Task \Microsoft\UpdateOrchestrator\x | WS-812 | Scheduled task | ✓ Microsoft | baselined |
wmi:__EventFilter | SRV-DB1 | WMI event-sub | ✗ | INVESTIGATE |
~/Library/LaunchAgents/com.zoom.ZoomDaemon | MAC-118 | LaunchAgent | ✓ Zoom | baselined |
/etc/systemd/system/datadog-agent.service.d/override | SRV-K8S-02 | systemd-drop-in | — (staff) | approved · CR-2198 |
The graph is the platform. Every signal normalised, correlated, ranked — seventeen alerts about one thing collapse to one incident with a criticality score.
Every source piped to one schema. 90d hot + 7y cold. Cheap query. WORM + hash-chain for chain-of-custody.
| Tier | Retention | Cost / GB-month | Query latency | State |
|---|---|---|---|---|
| Hot (recent) | 90d | $0.028 | p95 < 2s | LIVE |
| Warm | 180d → 1y | $0.008 | p95 < 15s | LIVE |
| Cold (S3 Glacier) | 7y | $0.0018 | 3-5h restore | LIVE |
| Chain-of-custody | 7y | WORM + hash-chain | — | VERIFIED |
Kafka · OTEL · Fluent-bit. Pub-sub topology. Schema-registry. Back-pressure monitored.
| Pipeline | Source | Rate | Back-pressure | Schema |
|---|---|---|---|---|
| edr-events | EDR (all OS) | 84k/s | 0 · healthy | OCSF · v1.2 |
| cloud-audit | AWS/GCP/Azure | 42k/s | 0 | OCSF |
| identity-events | Okta + Entra + Google | 18k/s | 0 | OCSF |
| network-flow | NDR + VPC-flow | 62k/s | 0 | OCSF · extended |
| app-access | WAF + API gateway | 12k/s | 0 | OCSF |
| container-runtime | Falco · Tetragon | 6k/s | 0 | OCSF · k8s |
Nodes: identity · asset · signal · activity. Edges: has-session-on · authenticated-as · emitted-from · chains-to. Cypher-like query collapses N alerts → 1 incident.
| Entity type | Nodes | Edges | Last rebuild | State |
|---|---|---|---|---|
| Identity (users + NHI + sessions) | 8,214 | 42,182 | streaming | LIVE |
| Assets (hosts + cloud + SaaS) | 12,847 | 68,412 | streaming | LIVE |
| Signals (alerts + IOCs + vulns) | 2.3M (24h) | — | streaming | LIVE |
| Activities (logins · API · builds) | 86M (24h) | — | streaming | LIVE |
Auto-group by entity + time-window. Criticality score 0-10. Owner auto-assigned. Alert-to-incident compression ≈ 240:1 today.
| Incident | Entity | Alerts collapsed | Score | Owner | State |
|---|---|---|---|---|---|
| INC-4431 | [user.name]@[your-org].com | 47 | 9.6 | soc-l2 | OPEN |
| INC-4430 | svc-backup-old (honey) | 4 | 10.0 | soc-l3 | IR engaged |
| INC-4429 | WS-4218 (endpoint) | 31 | 7.2 | soc-l2 | TRIAGING |
| INC-4428 | edge-old-01.[your-org].com | 12 | 6.8 | soc-l1 | CONTAINED |
| INC-4427 | [your-org]-devops-sbx (cloud) | 8 | 5.4 | soc-l1 | MONITORING |
Git-versioned · CI-tested · Sigma / KQL / YARA-L · ATT&CK-tagged · PR-reviewed. No console-edits survive.
| Repo stat | Count | Health |
|---|---|---|
| Active detections | 482 | all CI-green |
| ATT&CK tagged | 482 (100%) | fully mapped |
| Unit-tested (true-positive + false-positive) | 442 (91%) | target 100% by Q2 |
| Tuning PRs merged (30d) | 86 | healthy cadence |
| Rules auto-disabled (FP > 10%) | 4 | author-repair |
13 tactics × sub-techniques. Green = validated in last 90d via purple-team or BAS. Red = untested. Monthly gap closure tracked.
| Tactic | Techniques in scope | With detection | Tested 90d | Coverage |
|---|---|---|---|---|
| Initial Access | 24 | 22 | 21 | 88% |
| Execution | 14 | 14 | 13 | 93% |
| Persistence | 16 | 15 | 14 | 88% |
| Privilege Escalation | 14 | 13 | 11 | 79% |
| Defense Evasion | 13 | 11 | 9 | 69% |
| Credential Access | 14 | 14 | 13 | 93% |
| Discovery | 12 | 10 | 8 | 67% |
| Lateral Movement | 12 | 11 | 10 | 83% |
| Collection | 9 | 7 | 6 | 67% |
| C2 / Exfil | 13 | 12 | 11 | 85% |
| Impact | 12 | 12 | 11 | 92% |
Each user / host / service-account has a peer-group baseline. Score is explainable (which dimensions caused it).
| Entity | Peer group | Anomaly dimensions | Score | State |
|---|---|---|---|---|
| svc-backup-old | service accts · OLD | login attempt · never-used | 10.0 | P0 honey |
| [user.name]@[your-org].com | eng-senior · bangalore | new-ASN + cookie-replay + geo-velocity | 9.4 | AiTM suspected |
| pod:analytics-42 | analytics-pods | secret.get spike · cross-NS reach | 7.2 | investigate |
| vendor-bob@3pa.io | guest-accts | after-hours bulk S3-list | 6.8 | TRIAGING |
| WS-4218 | eng-laptops | LSASS-access by unsigned binary | 8.4 | isolated |
OpenCTI / MISP backend. Auto-enrich every alert. Confidence + decay. IOCs age-out by class.
| Source | IOCs (live) | Last sync | Confidence | Decay |
|---|---|---|---|---|
| CISA KEV | 1,412 | streaming | HIGH | never |
| MISP (community) | 48,214 | 5m ago | MED-HIGH | 180d |
| Mandiant | 12,804 | 1h ago | HIGH | 90d |
| Anomali ThreatStream | 86,412 | streaming | MIXED | 30-180d |
| Internal observations | 4,218 | streaming | HIGH | 90d |
| Sector-ISAC sharing | 2,402 | 4h ago | HIGH | 90d |
Named hypothesis → query → schedule → finding → detection promoted to rule. Every hunt has a theory, not a keyword.
| Hypothesis | Cadence | Last run | Findings (30d) | Promoted → rule |
|---|---|---|---|---|
| Long-dwell process under explorer.exe | daily | 04:12 today | 2 · both benign | pending |
| Unusual parent → PowerShell chain | hourly | streaming | 18 · 1 confirmed | DET-0418 |
| Azure AD graph-API bulk read | daily | 03:00 today | 4 · 1 confirmed | DET-0419 |
| OAuth token minted by first-time app | hourly | streaming | 11 · 0 confirmed | pending FP review |
| S3 mass-list from new IP | hourly | streaming | 6 · 1 confirmed | DET-0421 |
Auto-assembles events from graph. Narrative generated by Tier-4 copilot. Analyst edits before handoff.
| Capability | Status | Detail |
|---|---|---|
| Auto-assembled from graph | ON | pulls all entity-linked events within ± 2h window |
| Natural-language narrative | ON | copilot-draft, analyst-reviewed before send |
| Evidence chain-of-custody | ON | WORM · hash-chained · exportable ZIP |
| One-click export · legal + regulator | ON | PDF + signed manifest |
Analyst thumbs-up / thumbs-down → rule tuning. FP rate auto-tracked per rule. Consistently-FP rules auto-disabled; author must repair.
| Rule | Fires (7d) | TP % | FP % | Action |
|---|---|---|---|---|
| DET-0418 · PowerShell chain | 124 | 92% | 8% | KEEP |
| DET-0402 · LSASS-access unsigned | 18 | 100% | 0% | KEEP · CRIT |
| DET-0381 · service-install unsigned | 412 | 48% | 52% | AUTO-DISABLED |
| DET-0294 · S3 mass-list | 62 | 88% | 12% | TUNE · peer baseline |
| DET-0198 · web shell signature | 4 | 100% | 0% | KEEP |
Weekly safe-attack against self. Coverage delta drives next-sprint detection work. Purple-team owner feeds back.
| Scenario | When | Result | ATT&CK | Gap opened |
|---|---|---|---|---|
| AiTM phish + session replay | this week | DETECTED · 47s | T1557.003 | 0 |
| LOLBAS · certutil web download | last week | BLOCKED | T1218.003 | 0 |
| Kerberoast · honey-SPN | 2 weeks ago | DETECTED · 6s | T1558.003 | 0 |
| S3 mass exfil via leaked key | 3 weeks ago | DETECTED · 32m | T1530 | 1 · shrink latency |
| K8s privilege pod escape | 4 weeks ago | BLOCKED · PSA | T1611 | 0 |
If an analyst does it twice a week, it's a playbook. Human-in-the-loop tiers: L1 auto, L2 propose-approve, L3 review-only.
Triggered by ITDR + UEBA high-confidence signals. L1 auto. Reversible in one click.
| Step | Action | System | Rollback |
|---|---|---|---|
| 1 | Mark user "at risk" in identity graph | Okta + Entra | clear flag |
| 2 | Revoke all active sessions + refresh tokens | Okta · Entra · M365 | re-auth required |
| 3 | Force FIDO2 on next login | Conditional Access | policy revert |
| 4 | Disable basic-auth + app-password fallback | M365 · Google | policy revert |
| 5 | Notify manager + user via out-of-band | Slack · SMS | — |
| 6 | Open incident + attach timeline | secops graph | — |
Latest runs (7d): 47 · confirmed malicious 12 · false-positive analyst-reversed 3.
Fires on ransomware behaviour · LSASS-access by unsigned binary · BYOVD. L1 auto. 1-click revert for false-positive.
| Step | Action | System | Impact |
|---|---|---|---|
| 1 | EDR network-contain host (allow only EDR cloud) | CrowdStrike / MDE | host isolated |
| 2 | Revoke all active identity sessions originating from host | Okta · Entra | re-auth required |
| 3 | Snapshot memory + disk for forensics | EDR forensic | evidence preserved |
| 4 | Quarantine matching hashes fleet-wide | EDR | lateral spread blocked |
| 5 | Open incident + attach timeline + IOCs | secops graph | — |
| 6 | Page on-call + DM user | PagerDuty · Slack | human loop engaged |
Latest runs (7d): 14 · confirmed malicious 8 · reversed 1.
Fires on gitleaks / trufflehog match in any repo, fork, or gist. Auto-rotate + auto-PR to codebase. L1 auto.
| Step | Action | System | Notes |
|---|---|---|---|
| 1 | Revoke leaked secret at origin | AWS IAM · GCP IAM · GitHub · Stripe · SendGrid · Slack webhook | idempotent |
| 2 | Generate replacement secret (short-lived preferred) | provider API | OIDC where possible |
| 3 | Update secret store (Vault / AWS SM / GCP SM) | secrets manager | — |
| 4 | Open PR to replace usage in code | GitHub | auto-approved if test-only |
| 5 | Audit usage of old secret (24h back-scan) | cloud-audit · app logs | look for abuse |
| 6 | Attach evidence to incident + notify owner | secops graph · Slack | — |
Latest runs (30d): 42 · mean rotation SLA 3h 12m · evidence of abuse before rotation: 0.
One analyst click → propagate to WAF + DNS RPZ + egress firewall + EDR. Ages-out on a default TTL unless manually re-signed.
| Step | Action | System | TTL |
|---|---|---|---|
| 1 | Add IOC to block-list | WAF (Cloudflare / Akamai) | 30d default |
| 2 | Sinkhole in DNS | Umbrella / internal RPZ | 30d |
| 3 | Egress-deny entry | SASE · firewall | 30d |
| 4 | EDR containment indicator | CrowdStrike / MDE | 90d |
| 5 | Audit prior connections (14d back-scan) | data lake | — |
| 6 | Open incident + share to ISAC (anonymised) | secops graph + MISP | — |
Latest runs (7d): 62 · mean propagation 8s · aged-out reversibility 100%.
Graph API driven M365 + Google. Matches on subject/sender/URL hash. Purge from every mailbox. Reversible from evidence vault.
| Step | Action | System | Scope |
|---|---|---|---|
| 1 | Fingerprint matching message (subject + sender + URL hashes) | M365 Graph · Gmail API | org-wide |
| 2 | Soft-delete from all inboxes + Junk + Sent | compliance API | org-wide |
| 3 | Preserve copy in evidence vault | legal-hold | reversible |
| 4 | Block sender + URL at gateway | Proofpoint / mimecast / native | — |
| 5 | Notify recipients who clicked (via reporter) | Slack · email | targeted |
| 6 | Open incident + attach evidence | secops graph | — |
Latest runs (30d): 24 · mailboxes cleaned 8,412 · click-rate-post-purge 0.
User-report button → URL + attachment detonate in sandbox → verdict in < 3 min → bulk-remove if malicious. User gets thank-you with outcome.
| Step | Action | System |
|---|---|---|
| 1 | User "Report Phish" → message parsed | Outlook/Gmail add-in |
| 2 | URLs extracted → URLScan + sandbox | urlscan.io · Joe Sandbox · native detonator |
| 3 | Attachments → static + dynamic analysis | detonator · YARA |
| 4 | Verdict aggregated · score 0-100 | triage copilot |
| 5 | If malicious → invoke T224 quarantine-mail | SOAR chain |
| 6 | User receives outcome DM + stats badge | Slack · email |
This month: reports 284 · malicious 62 · mean triage time 2 m 18 s · user-satisfaction 4.8 / 5.
When a malicious-consent pattern is detected, revoke across the org in a single action. Stored revert for false-positive.
| Step | Action | System |
|---|---|---|
| 1 | Identify consenting user cohort | identity graph |
| 2 | Revoke OAuth grant org-wide | M365 Graph · Google admin · Slack |
| 3 | Kill active sessions from that app | Okta · Entra |
| 4 | Audit last 30d access by the app | data lake |
| 5 | Notify consenting users + explain | Slack · email |
| 6 | Open incident + evidence bundle | secops graph |
Recent: 3 org-wide revokes in 30d · users re-onboarded with vetted alternatives in mean 9 h.
Every playbook declares its tier. L1 runs on its own + logs; L2 proposes the action and waits for one-click approval; L3 is read-only — copilot drafts the proposal, human executes.
| Playbook | Tier | Why | Mean time |
|---|---|---|---|
| Disable user + revoke sessions (T220) | L1 auto | high-confidence + reversible | 46s |
| Isolate host (T221) | L1 auto | high-confidence + reversible | 38s |
| Rotate leaked secret (T222) | L1 auto | zero-harm · strictly better | 3h 12m (full chain) |
| Block IOC edge-wide (T223) | L2 propose | scope could affect business traffic | 2m 14s to approval |
| Quarantine mail org-wide (T224) | L2 propose | communication impact | 1m 48s |
| OAuth app mass-revoke (T226) | L3 review | workflow impact · cross-team | 14 min |
| Delete storage / kill service | L3 review | destructive | human-only |
Every auto-action has an inverse. Dry-run mode for auditors. Monthly restore rehearsal.
| Action | Inverse | Dry-run | Last rehearsed |
|---|---|---|---|
| Disable user | re-enable + re-authenticate | ✓ | 3d ago |
| Host isolate | EDR release + allow-list restore | ✓ | 5d ago |
| Rotate secret | rotate-again (short-lived forever) | ✓ | today |
| Block IOC | allow-list + age-out | ✓ | 2d ago |
| Quarantine mail | restore from vault | ✓ | 11d ago |
| Revoke OAuth grant | user-reconsent with scoped re-approval | ✓ | 9d ago |
Every incident auto-files a JIRA / ServiceNow ticket with timeline, IOCs, artifacts, suggested actions, and evidence ZIP.
| Field | Contents |
|---|---|
| Title | INC-{id} · {criticality} · {entity} — auto-summary |
| Timeline | graph-assembled events with copilot narrative |
| IOCs | IP · domain · hash · URL · user · host · ASN |
| Artifacts | memory-dump · disk-snap · mail-eml · packet-capture · audit-log |
| Suggested actions | playbook IDs ready to run · prerequisites met/missing |
| Evidence ZIP | chain-of-custody hash · signed manifest · 7y WORM retention |
| Assignees | auto-routed by entity ownership + tier |
The cheapest best-ROI detection we own. Fake creds, fake repos, fake files, fake roles — anyone touching them is confirmed malicious. Zero false positives by design.
Canarytoken-style access-key seeded in env files, S3 buckets, wiki, CI runner. Any use = P0. Auto-rotated weekly to stay fresh.
| Canary ID | Seeded where | Last rotation | Last trip | State |
|---|---|---|---|---|
| AKIA…xoym | .env.example · prod-docs-wiki | 3d ago | never | ARMED |
| AKIA…bzt4 | s3://[your-org]-devops-scratch/config.yml | 3d ago | 8h ago ⚠ | TRIPPED · investigating |
| AKIA…k1ln | ci-runner env-vars (fake) | 3d ago | never | ARMED |
| AKIA…9fj2 | legacy-repo README.md | 3d ago | never | ARMED |
Plausible admin account, never used. Any auth attempt = P0. Cross-listed with ITDR + AD/Entra tabs.
| Canary account | Tenant | Privilege lure | Last auth | State |
|---|---|---|---|---|
| svc-legacy-bckup | AD corp | Domain Admins | never | ARMED |
| temp-contractor-DA | AD corp | Enterprise Admins | never | ARMED |
| ga-old@[your-org].com | Entra | Global Administrator | 2d ago ⚠ | TRIPPED |
| admin-helpdesk-x | Okta | Helpdesk admin + app-write | never | ARMED |
"Confidential" PDF/docx seeded in shared drives + "private" SharePoint. Opening a doc phones home with source-IP + geo.
| Document | Location | Opens (all-time) | Last open | State |
|---|---|---|---|---|
| 2026 Compensation · Board Copy.pdf | SharePoint · Exec/Confidential | 0 | never | ARMED |
| AWS-Prod-Runbook-v2.docx | \\fileshare\sre | 0 | never | ARMED |
| Board-pack Q4-26 · draft.pdf | Google Drive · Board folder | 0 | never | ARMED |
| Acquisition-targets · confidential.xlsx | M365 SharePoint · Strategy | 0 | never | ARMED |
Private honey-repo inside our org. Looks real, contains canary secrets. Any clone / secret-use = attacker confirmed.
| Repo | Description (lure) | Last clone | Secret use | State |
|---|---|---|---|---|
| acme/platform-legacy-env | "retired legacy env vars — do not use" | never | no | ARMED |
| acme/aws-prod-secrets | "do not commit real secrets here" | never | no | ARMED |
| acme/internal-ops-scripts | "sre ops scripts · internal" | never | no | ARMED |
Service account with an SPN and a weak-looking password. Any TGS-REQ targeting it = red alert, zero false positives.
| Honey-SPN | Lure | Last TGS-REQ | State |
|---|---|---|---|
| svc-legacy-bckup · HTTP/backup-srv | backup service · rotated 2014 hint | 12d ago ⚠ | TRIPPED · incident open |
| svc-sql-reporter · MSSQL/reporter-srv | SQL reporting svc | never | ARMED |
| svc-fax-gateway · SMTP/fax-srv | legacy fax gateway | never | ARMED |
Fake "salaries" table or "customers_staging". Honey-records with canary-triggers. Any SELECT = incident.
| Object | DB / tenant | Rows | Last read | State |
|---|---|---|---|---|
hr.salaries_2026_draft | hr-prod-pg · seed | 412 fake | never | ARMED |
billing.customers_staging | billing-prod | 1,024 fake | never | ARMED |
kyc.docs_legacy | kyc-prod | 42 fake | never | ARMED |
404-by-default for humans. Any non-allow-listed call = alert. Classic /admin / /debug / /v1/internal lures.
| Endpoint | Host | Hits (30d) | Last hit | State |
|---|---|---|---|---|
/admin | api.[your-org].com | 14 | 2h ago | ALERT · bot scan |
/debug/dump | api.[your-org].com | 6 | yday | ALERT |
/v1/internal/test | api.[your-org].com | 3 | 3d ago | LOG |
/.git/config | www.[your-org].com | 42 | streaming | ALERT · scan pattern |
Catches supply-chain implants that try to exfil from CI runner env. The bucket never holds real data; any read = malicious.
| Token / bucket | Seeded location | Last touch | State |
|---|---|---|---|
s3://acme-ci-runner-secrets | CI runner env-var | never | ARMED |
AKIA…9v2f (canary) | CI runner env-var | never | ARMED |
DOCKER_REGISTRY_TOKEN (canary) | CI runner env-var | never | ARMED |
URL https://callback.canarytokens.org/x… | ci-runner /etc/hosts override | never | ARMED |
Register obvious-looking legacy subdomains (dev-old., staging-backup., admin-legacy.) pointing to a honeypot. Any scanner hit is logged + profiled. Optional retaliatory tarpit drops attacker scan speed to <1 rps.
| Subdomain | Bait kind | Hits (7d) | Top source | State |
|---|---|---|---|---|
dev-old.[your-org].com | fake WP-admin login | 212 | AS45090 HK | SCANNED · profiled |
staging-backup.[your-org].com | phpMyAdmin lookalike | 84 | Tor exits | SCANNED |
admin-legacy.[your-org].com | fake JIRA login | 48 | AS9009 RO | TARPIT · 0.3 rps |
internal-docs.[your-org].com | SSO login form (canary) | 14 | mixed | CRED-HARVEST attempt |
vpn-old.[your-org].com | Fortinet login banner | 42 | AS62240 NL | N-day probe |
Signatures fed to WAF + DNS block-list + ISAC share. All traffic is by definition malicious — zero FP.
AI multiplies the analyst — it does not replace them. The copilot lives inside the protection perimeter: same scoping, audit, and egress controls as any privileged user.
Groups related alerts, pulls threat-intel enrichment, suggests next-action with confidence score. Analyst confirms or overrides.
| Capability | Status | Latency |
|---|---|---|
| Alert clustering by entity + time-window | LIVE | < 400 ms |
| TI enrichment (IOCs → reputation + sightings) | LIVE | < 1 s |
| Next-action recommendation with confidence + rationale | LIVE | ~ 3 s |
| Similar-past-incidents retrieval (vector search) | LIVE | ~ 2 s |
| One-click override with outcome logged back for tuning | LIVE | — |
"Show hosts that beaconed to TLDs we've never seen in 30 days" → generated SQL/KQL + result. Analyst learns the dialect from the outputs.
| Natural-language ask | Generated query (abbrev.) | Latency |
|---|---|---|
| beaconing to unseen TLDs 30d | WITH new_tlds AS … | 2.1 s |
| users who logged in from > 3 countries last week | GROUP BY user HAVING COUNT(DISTINCT country) > 3 | 0.9 s |
| any EC2 without IMDSv2 in prod | cnapp.ec2 WHERE imds_v2_required=false | 0.6 s |
| PowerShell encoded-cmd parent ≠ explorer | process_create WHERE image='powershell.exe' AND … | 1.4 s |
"Why did this fire?" — walks the chain: rule → data-source → raw events → ATT&CK tag → similar past incidents → suggested next question.
| Output section | Purpose |
|---|---|
| Rule → data-source chain | what sensor + normalisation step surfaced this |
| Raw events window | prev/next 10 events for that entity |
| ATT&CK tagging | tactic / technique / sub-technique with confidence |
| Similar past incidents (vector) | human-playbook that resolved it last time |
| Suggested next query | narrows the uncertainty by one step |
Exec summary, user comms, legal-ready timeline, regulator notice. Redlined by analyst before send. No auto-send on anything human-bound.
| Artefact | Template source | Human-review required |
|---|---|---|
| Exec summary (1-pager) | board-facing template | ✓ required |
| Affected-user DM + email | plain-language template | ✓ required |
| Legal / breach-coach timeline | legal-ready narrative | ✓ required |
| Regulator notice (72 h) | DPDP · GDPR · SEC 8-K · HIPAA | ✓ + legal-sign-off |
| New playbook draft (YAML) | detection-as-code repo | ✓ + PR review |
Pulls 8 board metrics + top incidents + roadmap deltas. Auto-PDF. Editable before share.
| Section | Source |
|---|---|
| MTTD · MTTR · dwell · blast-radius | incident graph (T203) |
| ATT&CK coverage % | heatmap (T205) |
| Phishing click + report rate | human-security |
| Edge-patch SLA | CTEM |
| Analyst throughput delta | this copilot pane |
| Top incidents narrative | copilot-drafted · analyst-approved |
| Roadmap progress vs plan | build-order checklist |
Given last 7 days telemetry deltas, proposes five untested hunt hypotheses. Best ones graduate to hunt-as-code (T208).
| This week's suggestions | Why |
|---|---|
| Unusual Azure Graph read-rate by first-use apps | new tenant apps surged 18% · not yet monitored |
Snowflake SHOW WAREHOUSES by non-admins | attacker-reconnaissance pattern recently published |
New parent-child pattern: signed.exe → lolbas.exe | gap in ATT&CK Defense Evasion (69% coverage) |
Kubernetes exec into pod by first-seen ServiceAccount | new SAs in prod-eks-1 last week |
| OIDC token minted for workload outside approved-IP | expanding OIDC use — drift expected |
Every tool-call, prompt, output, and override is logged. Same scrutiny as a privileged Linux shell. 7y retention. Analyst anomaly baselines apply.
| Field | Captured |
|---|---|
| User + session + copilot model version | ✓ per turn |
| Full prompt (system + user) + retrieved context | ✓ hash + content |
| Every tool invocation + arguments | ✓ pre-call + post-call |
| Output streamed back to user | ✓ |
| Human override / acceptance of suggestion | ✓ outcome feeds tuning |
| UEBA on agent trails | ✓ same peer-baseline engine |
No model-autonomous isolate / delete / send. An interstitial UI confirms the action, shows the audit record, and records the approving user. The model can propose; only a human disposes.
| Action class | Interstitial? | Why |
|---|---|---|
| Read-only query on the lake | no | zero-harm |
| TI / IOC enrichment | no | zero-harm |
| Draft message / playbook | no | no-send |
| Disable user · isolate host · rotate secret | YES | reversible but impactful |
| Quarantine mail org-wide | YES | communication impact |
| Delete / destroy data · send to external recipient | HARD BLOCK | never by model · L3 human-only |