MISP: Advanced Features
Comfortable with events and attributes? This guide covers the features that turn MISP into a real intelligence platform: reports, objects, galaxies, sightings, the decaying model, workflows and automation.
Event Reports
Event Reports let you write a Markdown report directly inside an event. The report can reference the event’s attributes and objects, keeping analysis and data in one place. MISP can also automatically extract entities (IPs, domains, hashes) from pasted report text and turn them into attributes.
Tips
- Paste a vendor report, then use automatic extraction to pull out the IOCs.
- Reference attributes in the text instead of copying them, so the report stays current.
- Keep a stable structure: summary, TTPs, IOCs, recommendations.
MISP objects and relationships
An object groups several related attributes according to a template (file, domain-ip, email, url, person…). A “file” object, for example, holds the name, size and hashes of the same sample. Relationships between objects (“communicates-with”, “drops”, “resolves-to”) describe how the pieces connect and power the graph view.
Tips
- Prefer a “file” object over loose hashes: correlation is more reliable.
- Add explicit relationships so the graph tells the story of the attack chain.
- Create your own object templates when a business format keeps coming back.
Galaxies, taxonomies and warninglists
Galaxies link an event to shared knowledge: MITRE ATT&CK techniques, threat actors, malware families, tools. Taxonomies (TLP, PAP, admiralty-scale, kill-chain…) normalize tags. Warninglists flag values with a high false-positive risk: very popular domains, private IP ranges, well-known cloud services.
Tips
- Enable warninglists: they keep you from blocking google.com or an RFC 1918 IP.
- Use the event’s ATT&CK matrix view to see TTP coverage at a glance.
- Require tags (TLP at minimum) before publishing.
Sightings
A sighting records that an indicator was observed (or that it is a false positive, or has expired). Sent automatically from your SIEM or EDR, sightings show which IOCs are actually active in your environment and feed the decaying model.
Tips
- Automate sightings from your detection tools.
- Use the “false positive” type to surface indicators that should be removed.
Decaying model
Indicators lose value over time: a malicious IP is often reassigned within weeks. The decaying model computes a score that drops with the indicator’s age, tags and sightings. You can then exclude “decayed” indicators from the exports that feed your blocking tools.
Tips
- Use faster decay rates for IPs than for hashes.
- Combine excludeDecayed with to_ids to feed your firewalls cleanly.
{
"returnFormat": "json",
"type": ["ip-dst", "domain"],
"includeDecayScore": true,
"excludeDecayed": true
}Workflows
Workflows trigger automatic actions on internal MISP events: an event being published, an attribute being saved, a user being created… Each workflow chains modules (conditions, filters, actions such as adding a tag or calling a webhook) in a visual editor, with no code required.
Tips
- Block publishing of any event without a TLP tag.
- Notify a team channel when an event related to your sector is published.
- Test every workflow on a staging instance before enabling it.
Automation: restSearch API and PyMISP
The restSearch API is the entry point for getting data out of MISP: filter by type, tag, date or IDS flag, and export in many formats (JSON, STIX 2, CSV, Suricata or Snort rules…). PyMISP, the official Python library, covers the same API to script event creation, sightings and searches.
Tips
- Create a dedicated API key per integration, with minimum privileges.
- Export directly in the format the target tool expects (suricata, csv…).
curl -s -X POST https://misp.example.org/attributes/restSearch \
-H "Authorization: YOUR_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"returnFormat": "suricata",
"tags": ["tlp:green"],
"to_ids": true,
"last": "7d"
}'from pymisp import PyMISP
misp = PyMISP("https://misp.example.org", "YOUR_API_KEY", ssl=True)
# Record that the SOC saw this indicator today
misp.add_sighting({"value": "185.220.101.4", "source": "SOC-EU"})
# Pull every attribute tagged APT28 from the last 30 days
attributes = misp.search(
controller="attributes",
tags=["misp-galaxy:threat-actor=\"APT28\""],
last="30d",
pythonify=True,
)
for attribute in attributes:
print(attribute.type, attribute.value)Production checklist
- ✓Warninglists enabled and up to date
- ✓TLP tag required before publishing
- ✓Sightings sent from the SIEM/EDR
- ✓Decaying model applied to blocking exports
- ✓Dedicated API keys per integration
- ✓Sharing groups defined per circle of trust
Exact option names and available modules vary between MISP versions. Always check your instance’s documentation before automating.
Go further

Ready to put it into practice?
CyberXTEL is our free platform to train hands-on: certifications, CTFs and a dedicated cyber awareness space.