ef215daa88
Sekoia XDR (siem): alert ingestion (list_alerts) with an exhaustive OCSF mapper and a bundled 'Sekoia XDR Alert' default type, plus 20 commands across alerts (list/get/search, status workflow, comments), event search jobs (create/status/ results + one-shot search_events), cases, asset management, users, kill chains and a generic authenticated HTTP passthrough. Bearer-token auth, EU host default. SEKOIA Intelligence Center (enrichment): observable/indicator/indicator-context CTI queries plus ip/url/domain/file/email reputation lookups (STIX type resolved automatically). No fetch. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
280 lines
12 KiB
YAML
280 lines
12 KiB
YAML
id: sekoia_xdr
|
|
name: Sekoia XDR
|
|
version: 1.0.0
|
|
description: "Sekoia Defend (XDR) REST API — alert ingestion and lifecycle (list/get/search, status workflow, comments), event search jobs (create/status/results + one-shot search), cases, asset management (get/list, attributes/keys add/remove), users, kill chains and a generic authenticated HTTP passthrough."
|
|
changelog: "1.0.0 — Initial release: alert ingestion (list_alerts) with an exhaustive OCSF mapper, 20 commands across alerts, event search, cases, assets, users and kill chains."
|
|
category: siem
|
|
|
|
# Per-instance configuration. The API host defaults to the EU region; an
|
|
# Organization API key is sent as a Bearer token.
|
|
config_schema:
|
|
properties:
|
|
url:
|
|
type: string
|
|
description: "Sekoia API base URL, e.g. https://api.sekoia.io"
|
|
default: https://api.sekoia.io
|
|
api_key:
|
|
type: string
|
|
description: "Sekoia API key (Bearer token)"
|
|
x-soar-sensitive: true
|
|
required:
|
|
- url
|
|
- api_key
|
|
|
|
auth:
|
|
- id: bearer
|
|
type: api_key
|
|
in: header
|
|
name: Authorization
|
|
value_template: "Bearer {{secret}}"
|
|
secret_field: api_key
|
|
|
|
commands:
|
|
# ── Ingestion ───────────────────────────────────────────────────────────────
|
|
- id: list_alerts
|
|
name: sekoia-xdr-list-alerts
|
|
description: "List alerts, sorted by created_at. Used for ingestion: results path = items. Alerts aggregate the matching events and are tied to rules and a kill chain."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
limit: { type: number, description: "Number of alerts to return (1-100, default 20)" }
|
|
status: { type: string, description: "Comma-separated statuses to include (Pending, Acknowledged, Ongoing, Rejected, Closed)" }
|
|
created_at: { type: string, description: "Filter by creation date. A bare date is treated as the lower bound ('<date>,now'); a range '<start>,<end>' is passed through. Incremental fetch watermark." }
|
|
updated_at: { type: string, description: "Filter by update date, same format as created_at" }
|
|
urgency: { type: string, description: "Urgency range 'MIN,MAX' (e.g. 80,100)" }
|
|
alerts_type: { type: string, description: "Comma-separated alert categories (e.g. malware,phishing)" }
|
|
sort_by: { type: string, description: "Field to sort by (created_at, updated_at, target, urgency, status). Default created_at." }
|
|
direction: { type: string, description: "Sort direction (asc, desc). Default asc." }
|
|
offset: { type: number, description: "Result offset for paging" }
|
|
required: []
|
|
outputs_schema: { properties: {} }
|
|
ingest:
|
|
results_path: items
|
|
dedup_key: uuid
|
|
incremental_field: created_at
|
|
|
|
- id: get_alert
|
|
name: sekoia-xdr-get-alert
|
|
description: "Retrieve a single alert by UUID or short_id."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
id: { type: string, description: "Alert UUID or short_id (e.g. ALUnyZCYZ9Ga)" }
|
|
required: [id]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: search_events
|
|
name: sekoia-xdr-search-events
|
|
description: "Search events for an alert in one call: creates an event search job, waits for it to finish and returns the events. Falls back to returning the job UUID if it is still running."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
earliest_time: { type: string, description: "Lower time bound (e.g. -3d, -2w, or ISO 8601 2023-01-15T00:00:00Z)" }
|
|
latest_time: { type: string, description: "Upper time bound (e.g. now, +1d, or ISO 8601)" }
|
|
query: { type: string, description: "Event query, e.g. alert_short_ids:ALUnyZCYZ9Ga" }
|
|
max_last_events: { type: string, description: "Maximum number of events to return" }
|
|
required: [earliest_time, latest_time]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: events_execute_query
|
|
name: sekoia-xdr-events-execute-query
|
|
description: "Create an event search job. Use events_status_query then events_results_query to poll and retrieve, or use search_events for a one-shot."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
earliest_time: { type: string, description: "Lower time bound (e.g. -3d or ISO 8601)" }
|
|
latest_time: { type: string, description: "Upper time bound (e.g. now or ISO 8601)" }
|
|
query: { type: string, description: "Event query, e.g. alert_short_ids:ALUnyZCYZ9Ga" }
|
|
max_last_events: { type: string, description: "Maximum number of events to return" }
|
|
required: [earliest_time, latest_time]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: events_status_query
|
|
name: sekoia-xdr-events-status-query
|
|
description: "Get the status of a previously created event search job."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
uuid: { type: string, description: "Event search job UUID" }
|
|
required: [uuid]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: events_results_query
|
|
name: sekoia-xdr-events-results-query
|
|
description: "Retrieve the events of a finished event search job."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
uuid: { type: string, description: "Event search job UUID" }
|
|
required: [uuid]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: update_status_alert
|
|
name: sekoia-xdr-update-status-alert
|
|
description: "Change the status of an alert by applying the matching workflow transition (Acknowledged, Rejected, Ongoing, Closed)."
|
|
risk: safe_write
|
|
inputs_schema:
|
|
properties:
|
|
id: { type: string, description: "Alert UUID or short_id" }
|
|
status: { type: string, description: "New status: Acknowledged, Rejected, Ongoing or Closed" }
|
|
comment: { type: string, description: "Optional comment describing the status change" }
|
|
required: [id, status]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: post_comment_alert
|
|
name: sekoia-xdr-post-comment-alert
|
|
description: "Post a comment on an alert."
|
|
risk: safe_write
|
|
inputs_schema:
|
|
properties:
|
|
id: { type: string, description: "Alert UUID or short_id" }
|
|
comment: { type: string, description: "Comment content" }
|
|
author: { type: string, description: "Optional comment author" }
|
|
required: [id, comment]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: get_comments
|
|
name: sekoia-xdr-get-comments
|
|
description: "Get all comments of an alert."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
id: { type: string, description: "Alert UUID or short_id" }
|
|
required: [id]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: get_workflow_alert
|
|
name: sekoia-xdr-get-workflow-alert
|
|
description: "Get the available status transitions for an alert."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
id: { type: string, description: "Alert UUID or short_id" }
|
|
required: [id]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: get_cases_alert
|
|
name: sekoia-xdr-get-cases-alert
|
|
description: "Retrieve the cases related to an alert. If case_id is given, only that case is returned."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
alert_id: { type: string, description: "Alert UUID or short_id" }
|
|
case_id: { type: string, description: "Optional case short_id (e.g. CAQNurTJM8q2)" }
|
|
required: [alert_id]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: get_asset
|
|
name: sekoia-xdr-get-asset
|
|
description: "Get an asset by its UUID."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
asset_uuid: { type: string, description: "Asset UUID" }
|
|
required: [asset_uuid]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: list_assets
|
|
name: sekoia-xdr-list-assets
|
|
description: "List assets, optionally filtered by type."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
limit: { type: number, description: "Number of assets to return (default 10)" }
|
|
assets_type: { type: string, description: "Filter by asset type name (e.g. computer, network)" }
|
|
required: []
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: get_user
|
|
name: sekoia-xdr-get-user
|
|
description: "Get information about a user by UUID (e.g. a comment author)."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
user_uuid: { type: string, description: "User UUID" }
|
|
required: [user_uuid]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: add_attributes_asset
|
|
name: sekoia-xdr-add-attributes-asset
|
|
description: "Add an attribute (name/value) to an asset."
|
|
risk: safe_write
|
|
inputs_schema:
|
|
properties:
|
|
asset_uuid: { type: string, description: "Asset UUID" }
|
|
name: { type: string, description: "Attribute name" }
|
|
value: { type: string, description: "Attribute value" }
|
|
required: [asset_uuid, name, value]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: add_keys_asset
|
|
name: sekoia-xdr-add-keys-asset
|
|
description: "Add a key (name/value) to an asset."
|
|
risk: safe_write
|
|
inputs_schema:
|
|
properties:
|
|
asset_uuid: { type: string, description: "Asset UUID" }
|
|
name: { type: string, description: "Key name" }
|
|
value: { type: string, description: "Key value" }
|
|
required: [asset_uuid, name, value]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: remove_attribute_asset
|
|
name: sekoia-xdr-remove-attribute-asset
|
|
description: "Remove an attribute from an asset. Use get_asset to find the attribute UUID."
|
|
risk: destructive
|
|
inputs_schema:
|
|
properties:
|
|
asset_uuid: { type: string, description: "Asset UUID" }
|
|
attribute_uuid: { type: string, description: "UUID of the attribute to remove" }
|
|
required: [asset_uuid, attribute_uuid]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: remove_key_asset
|
|
name: sekoia-xdr-remove-key-asset
|
|
description: "Remove a key from an asset. Use get_asset to find the key UUID."
|
|
risk: destructive
|
|
inputs_schema:
|
|
properties:
|
|
asset_uuid: { type: string, description: "Asset UUID" }
|
|
key_uuid: { type: string, description: "UUID of the key to remove" }
|
|
required: [asset_uuid, key_uuid]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: get_kill_chain
|
|
name: sekoia-xdr-get-kill-chain
|
|
description: "Retrieve the definition of a Cyber Kill Chain step by UUID or short_id."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
kill_chain_uuid: { type: string, description: "Kill chain UUID or short_id" }
|
|
required: [kill_chain_uuid]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: http_request
|
|
name: sekoia-xdr-http-request
|
|
description: "Perform an authenticated HTTP request to the Sekoia API. Advanced escape hatch for endpoints without a dedicated command."
|
|
inputs_schema:
|
|
properties:
|
|
method: { type: string, description: "HTTP method (GET, POST, PUT, PATCH, DELETE). Default GET." }
|
|
url_suffix: { type: string, description: "Path after the base URL, e.g. /v1/sic/alerts/ or /v1/asset-management/assets/" }
|
|
parameters: { type: string, description: "Query parameters as a JSON object string, e.g. {\"limit\": 10}" }
|
|
data: { type: string, description: "Request body as a JSON object string (for POST/PUT/PATCH)" }
|
|
required: [url_suffix]
|
|
outputs_schema: { properties: {} }
|
|
|
|
# ── Connectivity test ─────────────────────────────────────────────────────
|
|
- id: test_connection
|
|
name: sekoia-xdr-test-connection
|
|
description: "Verify connectivity and credentials (used by the Test button)."
|
|
risk: read
|
|
inputs_schema:
|
|
properties: {}
|
|
required: []
|
|
outputs_schema: { properties: {} }
|
|
|
|
ingestion:
|
|
command: list_alerts
|
|
mapper: list_alerts
|
|
default_incident_type: "Sekoia XDR Alert"
|