Skip to content

Campaigns

Campaigns are curated threat operations — named clusters of activity that ShadowMap has correlated to the threat actors running them, the malware families they deploy, and the CVEs they exploit. The module is built for triage: work each campaign from Needs Review through Under Investigation to Reviewed, pivoting into the linked actor/malware/CVE entities and the underlying indicators (IOCs) as you go.

Overview

Campaigns

The page opens on a triage table. Across the top you get a six-card KPI strip, an optional analytics panel (collapsed by default), three status tabs that double as a workflow queue, and the campaign list itself. Each row is one campaign, showing its name, date, threat level, source organization, and the count of distinct actors, malware, and CVEs correlated to it.

Click any row to open a detail drawer without leaving the list; open the full detail page for the five-tab breakdown (Overview, Threat Entities, IOC Attributes, Timeline & Context, Compliance & Notes). Select rows to act on them in bulk, bookmark the ones you want to track, and export the filtered view to Excel.

This is the connective tissue of the Threat Intelligence suite: a campaign ties together entities you also see standalone in Threat Actors, Malware, and Vulnerabilities.

How it works

The mechanics below are not visible in the UI but determine exactly what you see.

What qualifies as a campaign

Campaigns are derived from MISP events — the structured threat-event records ShadowMap ingests from its MISP-based intelligence pipeline. A MISP event becomes a campaign only if it has at least one correlated threat actor or malware family. Events with no actor and no malware link are not surfaced here at all.

That correlation rule has a practical consequence: the CVE count can be zero on a valid campaign (CVEs are not required to qualify), but a campaign with zero actors and zero malware will never appear. If a campaign you expect is missing, it most likely has no entity correlations yet.

Where the data is shared vs. private to your account

This is the most important distinction in the module:

ElementScopeNotes
Campaign records (name, date, threat level, entities, IOCs)Shared global intelligenceThe same MISP-derived corpus is available to every account. ShadowMap curates it centrally; you do not "own" or generate campaigns.
Triage status (Needs Review / Under Investigation / Reviewed)Private to your accountStored per company. Your team's progress is yours alone.
BookmarksPrivate to your userStored per user within your account.
Investigation notes (comments)Private to your accountPer-company thread, attributed to the analyst who wrote each note.

Because the campaign corpus is shared, the KPI strip and analytics charts reflect the entire campaign database, not a filtered slice of your environment. Treat them as a read of the global threat landscape, not of your own attack surface.

Curated intelligence, not a scan result

Unlike attack-surface modules (open ports, web apps, certificates), Campaigns is not produced by scanning your assets. It is curated threat intelligence. Use it to understand who is active and how, then pivot to your own surface modules to check whether the exploited CVEs or techniques touch you.

Threat level

Threat level comes straight from the MISP event's threat_level_id and uses MISP's four-level scheme:

LevelMeaning
HighHigh-impact / high-confidence threat.
MediumModerate impact or confidence.
LowLow impact or confidence.
Not ClassifiedNo threat level set on the source event.

Threat level is a property of the campaign as ingested — it is not recalculated by ShadowMap from the linked entities or CVE scores.

Entity counts

The Actors, Malware, and CVEs columns are counts of distinct correlated entities for that campaign. They are computed live from the correlation maps, so a campaign linked to APT29 twice still counts one actor. CVE counts here are correlation counts only; CVSS scores and KEV status are shown when you open a campaign's detail (Threat Entities tab), where each CVE is enriched against ShadowMap's vulnerability database.

Campaign names

Some source events store a prefixed name in PREFIX | Actual Title form. ShadowMap strips the prefix and shows only the title, so what you read in the Campaign Name column is the cleaned operation name.

Triage workflow

The three tabs are a queue. Every campaign starts in Needs Review and moves forward as your team works it. Status is per-account, so two customers looking at the same campaign can be at different stages.

TabState keyWhat it means
Needs Reviewneeds_reviewDefault for any campaign your team has not actioned. A campaign with no status row at all counts here.
Under Investigationunder_investigationAn analyst has picked it up and is actively working it.
ReviewedreviewedTriage complete — assessed and closed out for now.

The number on each tab is the count of campaigns in that state for your account. The pager total tracks the active tab, not the whole corpus.

Changing status

  • Single campaign — open the row's actions menu (or use a keyboard shortcut) and choose Mark Under Investigation, Mark Reviewed, or Reset to Needs Review.
  • In bulk — tick the checkboxes on multiple rows. A bulk action bar appears with Under Investigation, Reviewed, Reset to Needs Review, Export Selected, and Share.
  • From the drawer/detail — status changes made while a campaign is open refresh the list.

Resetting to Needs Review is always available, so triage is reversible.

Understanding the data

Columns

The table supports nine columns. Seven are shown by default; two (Tags, First Seen) are hidden until you enable them in the column customizer. Campaign Name is always present and cannot be hidden.

ColumnDefaultSortableDescription
Campaign NameShown (locked)YesThe curated operation name. Hover for the full string if truncated.
DateShownYesThe campaign's reference date from the source event.
Threat LevelShownYesHigh / Medium / Low / Not Classified badge.
Source OrgShownYesThe MISP source organization that published the event.
ActorsShownYesCount of distinct correlated threat actors.
MalwareShownYesCount of distinct correlated malware families.
CVEsShownYesCount of distinct correlated CVEs.
TagsHiddenNoMISP tags on the event (shows up to the first three, with a +N overflow chip).
First SeenHiddenNoRelative time since the record was first ingested.

Click a sortable column header to sort; click again to flip direction. The default sort is Date, descending (newest first). Your view mode and column choices are remembered between visits; sort order, filters, and page size reset to their defaults each time you reopen the module.

View modes

Three layouts are available from the header, and your choice is remembered:

ModeUse it for
ExpandedThe default table with full row spacing.
CompactDenser rows to scan more campaigns at once.
TimelineA scatter plot of campaigns by date (X) vs threat level (Y), with bubble size scaled to total entity count (actors + malware + CVEs). Use the period toggle to change the window. Replaces the table while active.

KPI strip

Six clickable cards summarize the global campaign landscape. Clicking a card (except Total) applies the matching quick filter to the list.

CardWhat it countsClick filters to
Total CampaignsAll campaigns in the corpus (events with an actor or malware link).— (no filter)
High ThreatCampaigns at threat level High.Threat Level = High
Unique ActorsDistinct threat actors across all campaigns.Campaigns that have an actor
Unique MalwareDistinct malware families across all campaigns.Campaigns that have malware
CVEs ExploitedDistinct CVEs referenced across all campaigns.Campaigns that reference a CVE
New This WeekCampaigns dated in the current week, with a week-over-week % change.Campaigns from the last 7 days

Trend colors are inverted from finance

On New This Week, an up / red arrow means more new campaigns than last week (worse), and down / green means fewer (better). More threat activity is bad news, so the colors flip the usual convention.

Analytics panel

Collapsed by default (toggle it from the header). It shows four ECharts visualizations over the full corpus: a 12-month Campaign Trend line, a Threat Level Distribution donut, Top 10 Actors by campaign count, and Top 10 Malware by campaign count.

A free-text search box matches the campaign name. Beyond that, the filter bar exposes seven structured filter fields you can combine:

FilterMatches on
Threat LevelHigh / Medium / Low / Not Classified.
Source OrganizationThe publishing MISP org.
Threat ActorCampaigns linked to a named actor.
Malware FamilyCampaigns linked to a named malware family.
CVE IDCampaigns referencing a specific CVE.
TagsMISP tag substring match.
Campaign DateA date or date range.

Filter option values are loaded on demand per field. A Bookmarked chip in the filter bar narrows the view to just your starred campaigns. Filters and search apply within the active status tab.

Detail view

Clicking a row opens a drawer for a fast look; the actions menu's Open Detail Page (or navigating directly) opens the full detail page with five tabs. The detail page links back to the list and remembers the active tab in the URL (?tab=), so a deep link lands on the right section.

TabContents
OverviewCampaign name, threat level, date, source org, the actor/malware/CVE/MISP-attribute counts, first-seen time, current triage status, and the tag chips.
Threat EntitiesTables of Linked Actors (name, country, description), Linked Malware (name, type, description), and Linked CVEs (CVE ID, CVSS badge, a KEV flag for known-exploited vulnerabilities, and description).
IOC AttributesThe campaign's MISP attributes (indicators) in a searchable table: category, type, value, and comment. Each value has a one-click copy button for feeding into your own tooling.
Timeline & ContextA scatter-plot timeline scoped to this campaign, plus a Related Campaigns list — other campaigns that share at least one actor or malware family with this one. Click a related campaign to pivot to it.
Compliance & NotesThe private investigation thread for your account. Add notes, see who wrote each one and when, and delete your own. Use it to record what you assessed and why.

The Related Campaigns logic is what makes this module a pivot tool: it surfaces campaign clusters by shared actor or malware, so you can walk an adversary's broader operation rather than reading one event in isolation.

Taking action

ActionWhereEffect
Set triage statusRow menu, bulk bar, drawer, or keyboardMoves a campaign between the three tabs (per-account).
BookmarkStar icon on a row, or the Bookmarked filterTracks a campaign for your user; filterable.
Add investigation noteDetail → Compliance & NotesRecords analysis in the per-account thread.
Copy IOC valueDetail → IOC AttributesCopies an indicator to the clipboard.
ExportHeader Export or the bulk barGenerates an Excel file as a background task; respects current filters, search, sort, and status tab. You're notified when it's ready.
ShareBulk action bar → ShareShares the selected campaigns via your configured integrations.

Keyboard shortcuts

The list supports vim-style triage. Press ? to open the in-app shortcut overlay.

KeyAction
j / kNext / previous row
EnterOpen the drawer for the focused row
SpaceToggle selection of the focused row
sToggle bookmark
aMark Under Investigation
dMark Reviewed
EscClose the drawer
?Toggle the shortcuts help

Common questions

Are campaigns specific to my organization? No. The campaign corpus is shared, curated threat intelligence derived from MISP events — every account sees the same campaigns. What is private to your account is your triage status, your bookmarks, and your investigation notes. Use Campaigns to understand the threat landscape, then check your own attack-surface and vulnerability modules to see whether a campaign's CVEs or techniques actually touch you.

Why don't the KPI cards match the number of campaigns in my tab? The KPI strip and analytics charts count the entire campaign database, while the tabs and pager count your account's triage queue for the active status. They are measuring different things on purpose.

Why is a campaign I expected not listed? A MISP event only becomes a campaign if it has at least one linked threat actor or malware family. Events without those correlations are excluded, even if they carry CVEs or indicators.

Can a campaign have zero CVEs? Yes. CVEs are not required for an event to qualify — actor or malware correlation is. A high-threat campaign with no CVE link is perfectly valid.

How is threat level decided? It is taken directly from the source MISP event (threat_level_id), using MISP's High / Medium / Low / Not Classified scheme. ShadowMap does not re-derive it from the linked CVEs.

What's the difference between the drawer and the detail page? The drawer is a quick read without leaving the list. The detail page is the full five-tab view — entity tables, IOC attributes, the per-campaign timeline with related campaigns, and the investigation notes thread.

Does export include everything? Export reflects the current view: active status tab, filters, search, and sort. It runs as a background job and notifies you when the Excel file is ready.

  • Threat Actors — the actor entities linked from a campaign; pivot here for full actor profiles.
  • Malware — the malware families correlated to campaigns.
  • Vulnerabilities — the CVEs a campaign references, with full CVSS and KEV context.
  • Indicators — search the IOC attributes that campaigns surface.
  • Threat Feed — the broader stream of threat-intelligence events campaigns are curated from.
  • Threat Intelligence Overview — the suite landing dashboard that summarizes campaigns alongside actors, malware, and CVEs.
  • KEV Compliance — track known-exploited CVEs, including those flagged on campaign detail pages.

ShadowMap - External Attack Surface Management