- PERSONA
- Splunk / Detection Engineer
- CATEGORY
- Integration
- ENDPOINTS
- 3 used
- UPDATED
- April 2026
IOC enrichment for Splunk
SPL has no native threat-intel reach
- Manual copy-paste between Splunk and 5+ TI tabs for every noteworthy indicator.
- KV-store threat lists go stale without a pipeline to refresh them; fresh intel rarely lands in dashboards.
- Each individual TI integration brings its own API key, rate limit, and failure mode to manage.
“Manual copy-paste between Splunk and 5+ TI tabs for every noteworthy indicator.”
The endpoints that solve it
Multi-source IOC enrichment
Accepts an indicators[] array of IPs, domains, URLs or hashes. Returns a normalized verdict aggregated across up to 11 integrated sources (VirusTotal, AbuseIPDB, GreyNoise, Shodan, urlscan, OTX, Pulsedive, and more).
Custom search command integration
Streaming custom search command (chunked protocol, python.version = python3) reads a field per event, calls the API, and appends risk_score / verdict / sources_hit fields to each event.
SPL-native output
Enriched events keep flowing through the pipeline — usable in stats, timechart, where, and any downstream alert or dashboard with no schema changes.
One line of SPL, one API call
# In SPL — enrich every src_ip in a firewall search
index=firewall action=blocked
| dfir_enrich type=ip field=src_ip
| where dfir_risk_score > 70
| stats count by src_ip, dfir_verdict, dfir_sources_hit
# The command itself POSTs each indicator to:
# https://api.dfir-lab.ch/v1/enrichment/lookup
# Authorization: Bearer <api_key>- 01Step 01
Package as a Splunk app
Standard app layout with commands.conf (chunked = true, python.version = python3) registering a streaming custom search command that shells out to the enrichment API.
- 02Step 02
Invoke from any search
`| dfir_enrich type=ip field=src_ip` — runs per event, appends verdict fields, works inside scheduled searches, notable-event rules, and dashboards alike.
Step-by-step walkthrough with configuration, error handling, and deployment notes.
Pricing that tracks your workload
- 01
Light usage — 50 enriched IOCs/day in hand-run searches
50 × 30 × 3 credits = 4,500 credits/monthProfessional (2,500) + a small top-up, or move to Enterprise if analyst volume grows. - 02
Scheduled dashboards — 20 IOCs/hour from a saved search
20 × 24 × 30 × 3 credits = 43,200 credits/monthEnterprise. Alternatively, cache enrichments with | lookup and only hit the API on new indicators. - 03
Evaluation — one dashboard, a few dozen IOCs/day
30 × 30 × 3 credits = 2,700 credits/monthProfessional ($99, 2,500 credits) with a modest overage, or Starter ($29, 500) for truly light evaluation.
Three ways to evaluate
Frequently asked
- Q / 01
- Yes, if your Splunk Cloud stack has private app installation enabled. The app is a standard custom search command with no native binaries — it ships Python only, so it passes app inspection.
- Q / 02
- Streaming. It reads a field from each event, enriches it, and appends fields. A generating variant (one-shot lookup without an upstream search) is a trivial modification — see the article for both.
- Q / 03
- Dedup before enrichment — `| dedup src_ip | dfir_enrich ...` — and/or cache results in a KV-store lookup keyed by indicator with a TTL. Most teams only need fresh enrichment per indicator once or twice a day.
- Q / 04
- Yes. The endpoint handles ip, domain, url, and hash types. Pass `type=url` or `type=hash` to the same command against the appropriate field.
Other teams solving adjacent problems
Stop triaging by hand.
Create a free account — 100 credits per month, no credit card. Or keep browsing to find the use case that matches your workflow.