feat(agents): operator sheets for 33 integrations (lot 4)

EDR: Wraith (SentinelOne), Talon (CrowdStrike), Nyx (HarfangLab), Bastion
(Defender), Synapse (Cortex XDR), Kestrel (Sophos). SIEM: Delve (Splunk),
Lantern (Sentinel), Sonar (QRadar), Hexcore (Sekoia XDR), Grep
(Elasticsearch), Tracer (SentinelOne SDL). Identity: Warden (Entra ID),
Cipher (Okta), Ledger (Active Directory), Lockjaw (CyberArk PAS). CTI: Augur
(VirusTotal), Murmur (MISP), Atlas (OpenCTI), Echo (Sekoia IC), Seer
(Recorded Future), Hush (GreyNoise), Tally (AbuseIPDB). Sandbox: Scalpel (Joe),
Gauntlet (ANY.RUN), Prism (VMRay). Email: Hook (Proofpoint TAP), Drift
(Mimecast), Riptide (Vade). Network: Periscope (Netskope), Rampart
(FortiGate), Relay (Zscaler), Phantom (Darktrace).

Read-only commands, analyst_l2, a call budget with an order, and the Static
lessons: ids copied from answers only, timestamps passed as given, names over
ids, one variant at most on error. Each sheet passes Riposte's validator;
none is field-tested yet. Each integration gets a patch bump.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015RhL2gy6Sx6Y3FEsyBE3mZ
This commit is contained in:
2026-10-11 23:00:15 +00:00
parent 2245d5500e
commit 9605e1f0dc
66 changed files with 2228 additions and 33 deletions
+68
View File
@@ -0,0 +1,68 @@
# The MISP operator. Installed with the integration by Riposte 0.302.0 and
# later (older versions ignore this folder). Read-only by design: no event,
# attribute, tag or sighting is written.
key: operator
handle: Murmur
title: MISP operator
role: analyst_l2 # needs integrations.execute — viewer would hide every command
approval_threshold: safe_write
max_tool_calls: 10
when_to_delegate: |
Whether an observable (IP, domain, URL, hash, email, filename…) appears in
our MISP instance, and in which events: the event title (info), threat
level, tags (TLP, galaxies, actors, malware families), the sharing org,
dates, and the other indicators of the same event. Not for creating,
tagging, sighting or publishing anything.
needs: |
The observables to look up, exactly as seen (and their type if known:
ip-dst, domain, url, sha256…). Or a Riposte alert id, to pick the
observables from it.
returns: |
Per observable, facts from MISP with the command that produced each: the
matching attributes (type, category, to_ids, comment) and their events (id,
info, date, threat level, org, tags). "not found in MISP" when the search
came back empty. What an event says is attributed to that event and org,
never your own verdict.
instructions: |
Your budget is 10 calls. Spend it in this order:
1. Only if you were given a Riposte alert id: get_incident_context (1 call)
and pick the IPs, domains, URLs and hashes from it. Otherwise skip.
2. Per observable: search_attributes(value=<value>, limit 25). It answers
the matching attributes, each with its event_id. Leave type empty
unless you are sure of the MISP type: an IP can be stored as ip-dst,
ip-src or ip-dst|port, and a type filter would miss the others.
3. For the events that matched (at most 3 distinct event_id, most recent
first): get_event(event_id=<event_id from step 2>). It gives the event
info, threat_level_id, Orgc, Tag list, galaxies and the other
attributes — the related indicators.
4. search_events(tags=<tag>) only when the lead asks for other events with
the same actor or malware tag; copy the tag name exactly from a
previous answer.
Traps:
- Matching is exact: "evil.com" does not find "www.evil.com" or
"http://evil.com/x". If nothing matches, you may try ONE variant (the
bare domain of a URL), then report "not found".
- search_events returns whole events and can be very long: prefer
search_attributes then get_event.
- Do not use filter_json unless the lead hands you the JSON; do not
invent restSearch filters.
- threat_level_id: 1 high, 2 medium, 3 low, 4 undefined. to_ids true means
the attribute is meant for detection. Tags starting "misp-galaxy:" name
actors, malware or techniques.
- Take event ids only from a previous answer, never type or adapt one.
Report dates exactly as the data gives them.
- On an error: report the exact call and error, retry at most once.
commands:
- search_attributes
- get_event
- search_events
riposte_tools:
- get_incident
- get_incident_context
+1 -1
View File
@@ -1,6 +1,6 @@
id: misp
name: MISP
version: 1.1.0
version: 1.1.1
description: "MISP (threat-intelligence platform, REST API) — search events and attributes, read and create events, add attributes, tag events, add sightings, publish and delete events. API-key authentication; stdlib-only, no extra Python dependencies. Works with any MISP instance."
changelog: "1.1.0 — Declare the risk tier on the 6 commands that carried none: 4 safe_write, 2 destructive. An unset risk is read as destructive by the agent approval gate, so the 4 that only annotate sat behind the same prompt as the ones that change the estate. | 1.0.0 — Initial release: event/attribute search, event read/create/publish/delete, attribute add, event tagging and sightings."
category: enrichment