feat(splunk): full Splunk REST integration (search, jobs, KV Store, events)
20 commands over the management port (8089) with token or basic auth: SPL search (oneshot) as an ingestion source with an OCSF mapper for notable/CIM findings; async search jobs (create/status/results); index listing; event submission (receivers/simple + HEC); the complete KV Store command set (collection create/config/delete, list, data list/add/delete, entry search/delete/update); user list/delete; and a connectivity test. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
name: "Splunk Notable / CIM → OCSF"
|
||||
description: "Maps a Splunk notable / CIM finding row (search results_path = results) to OCSF Finding fields. Built for ES notable events surfaced by the `notable` macro (rule_title/rule_name/urgency/security_domain) enriched with CIM Network/Authentication fields (src/dest/user/dvc). Severity is normalised to the OCSF 1-5 scale from the notable `urgency`."
|
||||
field_mappings:
|
||||
title: "rule_title ? rule_title : (source ? source : event_id)"
|
||||
# urgency: informational/low -> low, up to critical=5 (OCSF 1-5 scale).
|
||||
severity: "urgency = 'critical' ? 5 : (urgency = 'high' ? 4 : (urgency = 'medium' ? 3 : (urgency = 'low' ? 2 : 1)))"
|
||||
description: "rule_description"
|
||||
# results_path = results; source_path is JSONata over ONE result row.
|
||||
# Fields absent from a given row are skipped at ingestion, so extra entries are safe.
|
||||
ocsf:
|
||||
# ── Finding ───────────────────────────────────────────────────────
|
||||
- { source_path: "event_id", ocsf_field: "finding_info.uid" }
|
||||
- { source_path: "rule_title", ocsf_field: "finding_info.title" }
|
||||
- { source_path: "rule_description", ocsf_field: "finding_info.desc" }
|
||||
- { source_path: "`_time`", ocsf_field: "finding_info.created_time" }
|
||||
- { source_path: "security_domain", ocsf_field: "finding_info.analytic.category" }
|
||||
- { source_path: "status_label", ocsf_field: "status" }
|
||||
# ── Rule (correlation search) / provenance ────────────────────────
|
||||
- { source_path: "rule_name", ocsf_field: "rule.name" }
|
||||
- { source_path: "rule_description", ocsf_field: "rule.desc" }
|
||||
- { source_path: "signature", ocsf_field: "metadata.event_code" }
|
||||
- { source_path: "source", ocsf_field: "metadata.log_name" }
|
||||
- { source_path: "sourcetype", ocsf_field: "metadata.log_source" }
|
||||
# ── Source endpoint (CIM Network) ─────────────────────────────────
|
||||
- { source_path: "src", ocsf_field: "src_endpoint.hostname" }
|
||||
- { source_path: "src_ip", ocsf_field: "src_endpoint.ip" }
|
||||
- { source_path: "src_port", ocsf_field: "src_endpoint.port" }
|
||||
# ── Destination endpoint (CIM Network) ────────────────────────────
|
||||
- { source_path: "dest", ocsf_field: "dst_endpoint.hostname" }
|
||||
- { source_path: "dest_ip", ocsf_field: "dst_endpoint.ip" }
|
||||
- { source_path: "dest_port", ocsf_field: "dst_endpoint.port" }
|
||||
# ── Affected device / users (CIM) ─────────────────────────────────
|
||||
- { source_path: "dvc", ocsf_field: "device.hostname" }
|
||||
- { source_path: "user", ocsf_field: "user.name" }
|
||||
- { source_path: "src_user", ocsf_field: "actor.user.name" }
|
||||
Reference in New Issue
Block a user