name: "Sophos Central Alerts → OCSF" description: "Maps a Sophos Central alert (GET /common/v1/alerts, results_path = items) to OCSF Detection Finding fields. Sophos severity is a string enum (high/medium/low); managedAgent is the affected endpoint." field_mappings: title: "description" description: "description" # Sophos severity enum → 1-5 incident scale. Right-associative chaining, no parentheses; # the last band uses a literal else so 'low' and anything unknown land on 2. severity: "severity = 'high' ? 4 : severity = 'medium' ? 3 : 2" # Product that raised the alert (e.g. endpoint, server, mobile). source: "product" # results_path = items; source_path is JSONata over ONE alert object using RAW field names. # Fields absent from a given alert return nothing and are skipped. ocsf: # ── Finding ─────────────────────────────────────────────────────── - { source_path: "id", ocsf_field: "finding_info.uid" } - { source_path: "description", ocsf_field: "finding_info.title" } - { source_path: "groupKey", ocsf_field: "finding_info.desc" } - { source_path: "raisedAt", ocsf_field: "finding_info.created_time" } - { source_path: "type", ocsf_field: "finding_info.analytic.type" } - { source_path: "severity", ocsf_field: "severity" } # ── Alert classification ────────────────────────────────────────── - { source_path: "category", ocsf_field: "rule.category" } - { source_path: "type", ocsf_field: "rule.name" } # ── Affected endpoint (managedAgent) ────────────────────────────── - { source_path: "managedAgent.name", ocsf_field: "src_endpoint.hostname" } - { source_path: "managedAgent.id", ocsf_field: "device.uid" } - { source_path: "managedAgent.type", ocsf_field: "device.type" } # ── Referenced person ───────────────────────────────────────────── - { source_path: "person.name", ocsf_field: "user.name" } # ── Provenance ──────────────────────────────────────────────────── - { source_path: "product", ocsf_field: "metadata.product.name" } - { source_path: "tenant.id", ocsf_field: "metadata.tenant_uid" }