Actionable threat intelligence for security teams

Indicators

How to Write an IOC Report That Analysts Actually Use

How to Write an IOC Report That Analysts Actually Use

An indicator report can be flawless and still get ignored. The hashes are correct. The domains resolve. The timestamps line up. And the analyst on the other end still closes the ticket in thirty seconds, because nothing in the report told them what to do next. Collecting indicators is one skill; writing them up so someone else can act is another. It comes down to four things: structure that respects the reader's time, context that makes each value meaningful, confidence scoring that means something, and distribution that fits how people actually work.

Start With the Decision, Not the Indicator

Before typing a single hash, decide who is reading. A tier-one SOC analyst triaging an alert needs a blocking recommendation and a list they can paste into a query. A detection engineer needs the behavioural detail behind the indicator so they can write a rule that survives infrastructure rotation. An incident responder needs to know what to hunt for in logs. Leadership needs two sentences and a risk statement.

You can serve all four in one document if you order it correctly: decision first, evidence second, raw data third. Open with a short summary — what happened, which systems or sectors are affected, what you recommend, and how confident you are. Two to four sentences. If someone stops reading there, they should still be able to act correctly.

A Structure That Survives Forwarding

Reports get pasted into chat, forwarded to clients, dropped into ticket systems, and re-shared weeks later with the header stripped off. Build a structure that still makes sense after that.

The header block

  • Report ID and publication date, plus a review-by date
  • Authoring team and a real contact address for questions
  • Traffic light protocol (TLP) marking, stated once and repeated in the footer
  • A one-line description of the report's scope and any handling restrictions

After the summary, include a short narrative of the campaign or incident: what was observed, over what period, and against whom. Then the indicator table. Then detection and hunting guidance — queries, log sources, or rule logic a reader can adapt. Then confidence and caveats. Finish with sources.

The indicator table deserves more thought than it usually gets. Minimum useful columns: value, type, role, first seen, last seen, confidence, and notes. The role column is where most reports fall down. An IP address marked as "C2" and an IP address marked as "scanning source" require completely different responses.

Context Turns Data Into Intelligence

A bare list of IPs and hashes forces every reader to repeat your analysis from scratch. That is expensive, and they will probably skip it.

For each indicator, answer the questions a responder will ask. Where did we see it — endpoint, proxy, mail gateway, DNS? What was it doing? Is it still live? Is it dedicated infrastructure or shared hosting that will generate false positives? Did it appear alongside other activity that suggests a specific intrusion set, or is attribution still open?

Be equally clear about what you do not know. "The domain resolved to a host also used by three unrelated campaigns" is more useful than a confident label. Infrastructure rotates fast; the behaviour around it usually lasts longer, so pair every indicator with the behaviour that made it interesting.

Confidence Scoring Without Fake Precision

Define your scale once and use the same words every time. A workable three-tier version:

  • High — directly observed in your own environment or telemetry, corroborated by at least one independent source
  • Medium — observed by a trusted partner or a single reliable source, not yet confirmed internally
  • Low — reported by an unverified source, or inferred from weak circumstantial evidence

Resist percentages unless you can explain the calculation. "We are 87 percent confident" sounds rigorous and usually is not. Confidence should attach to specific claims, not be sprinkled over a whole report — you may be highly confident about the domain and barely confident about the actor behind it.

State the degraders plainly: single source, no corroboration, indicator older than the campaign it belongs to, infrastructure shared with legitimate services. Readers calibrate their response to your honesty, not your certainty.

If you cannot explain in one sentence why an indicator is worth blocking, it does not belong in the report.

Distribution: Match the Format to the Workflow

Human-readable and machine-readable serve different purposes, and good reports ship both. A PDF or well-formatted email suits briefings. A CSV or structured feed suits detection engineering and automated blocking. If your audience uses MISP, STIX 2.1, or TAXII, publish there rather than attaching a spreadsheet to an email.

Send early and update often. A partial report that lands during the incident beats a complete one that arrives after containment. Publish an expiry or review date with every indicator so consumers know when to stop trusting it, and issue explicit retractions when something turns out to be a false positive. Nothing erodes trust faster than silently deleting a bad indicator.

Close the loop. Ask consumers to report hits and misses — an indicator that fired on nothing is information too, and it tells you whether your collection is working.

Common Failure Modes

  • Indicator dumps with no expiry, no roles, and no context
  • Mixed confidence levels presented as one flat list
  • No false-positive guidance for shared infrastructure
  • No contact path for the analyst who has a question at 2 a.m.
  • Formats that cannot be parsed by the systems that need them most

A Ten-Minute Review Before You Hit Send

  1. Does the summary tell a reader what to do without opening the table?
  2. Does every indicator have a role, a timestamp range, and a confidence level?
  3. Have you flagged which values are likely to generate false positives?
  4. Is the TLP marking present and consistent?
  5. Can the indicators be imported into the tools your audience uses?
  6. Is there a name and address attached to the report for follow-up?

None of this takes long, and it changes the reception a report gets. Analysts do not ignore indicators because they are lazy. They ignore them because acting on ambiguous data costs more time than it saves. Give them the decision, the context, and the confidence level, and the same indicators suddenly get used.

Photo: https://kaboompics.com/ / Pexels

Related Posts

Local Threat Intelligence: How to Assess Cyber Risks Specific to Your City or Region

News

Local Threat Intelligence: How to Assess Cyber Risks Specific to Your City or Region

Build a regional risk picture by collecting local incident reports, mapping your area's industry mix, and tracking...

Threat Intelligence Platforms Compared: Open-Source vs. Commercial Feeds for Small Businesses

News

Threat Intelligence Platforms Compared: Open-Source vs. Commercial Feeds for Small Businesses

Open-source feeds cost staff hours; commercial platforms cost licence fees. Here is how small teams should compare...