Zedmos CTI
Curated Threat Intelligence
live
v0.2 — Apr 2026 30 feeds curated false-positive guarded STIX 2.1 / TAXII 2.1 16 TAXII collections MITRE ATT&CK aligned 10 firewall formats ed25519 signed CT-log watch

Curated Threat Intelligence,
delivered to your firewalls.

Zedmos CTI ingests dozens of open-source TI feeds (URLhaus, abuse.ch, CERT.pl, USOM, Spamhaus DROP, EmergingThreats, ThreatFox, OpenPhish, …), strips out false positives that historically blocked legitimate services like drive.google.com, github.com or microsoft.com, and serves clean per-category blocklists over HTTPS to thousands of firewalls.

🛡️

Our commitment to you

Every line in our default firewall feed is corroborated. A domain or IP only enters domains.txt / ips.txt if at least one of these is true:

  • ≥2 distinct upstream feeds independently published it (multi-source consensus)
  • Active enrichment classified it as malicious — GreyNoise, AbuseIPDB confidence ≥75, or VirusTotal ≥3 engine detections
  • Zedmos honeypot mesh observed the IP attacking our sensors (≥3 sensors / 24h)
  • Single-source from a strict T1 feed: USOM (Türkiye national CERT) · CERT.pl · Spamhaus DROP · abuse.ch Feodo low-FP recommended
  • Manually approved (audit-logged with timestamp + reason)

We never claim verified on absence of evidence. Single-source claims from community feeds ship only in the opt-in community-domains.txt file with explicit "not independently corroborated" labelling.

If we get this wrong, we get it wrong publicly: the daily known-good smoke test (54 must-not-block indicators including hyperscaler endpoints, OS update channels, banks, e-government), the daily random cross-validation sample, and every false-positive caught are surfaced at /v1/public/verification. No filter on what we report. Wrong claims hurt us more than they hurt you — that's the contract.

Live stats

Auto-refreshes every 30 seconds · sourced from /v1/public/stats

last updated
Verified IOCs
0
indicators served to firewalls
Malicious domains
0
unique, sorted, deduped
Malicious IPs / CIDRs
0
v4 ranges, hijack netblocks
Active feeds
0
0 last-fetch OK
FP review queue
0
candidates flagged as false-positive
Allowlist
0
Tranco + Umbrella + cloud CIDRs (AWS/GCP/CF/GH) + seed
Cloud-IP FPs caught
0
IPs auto-suppressed as in-cloud-range — live
Known-good smoke
checks every 6h that no must-not-block indicator leaked
Verified IOCs (multi-source)
0
≥2 sources or enrichment-confirmed
Trusted IOCs (T1 single-source)
0
USOM, CERT.pl, Spamhaus DROP, Feodo low-FP
Default firewall ship
0
verified+trusted only
Cross-validation pass-rate
daily random sample audit — every line proven
Distribution snapshots
0
per-category materialized files
Bytes served (cached)
total payload across categories
MITRE ATT&CK
0
STIX objects (enterprise + mobile + ICS)
TAXII 2.1 collections
0
live STIX 2.1 endpoints
Sightings 24h (anonymized)
0 firewalls reporting · 0 all-time hits
Output formats
9
plain · Suricata · Pi-hole · OPNsense · MikroTik · RPZ · STIX · TAXII · MISP
cryptographic provenance
ed25519 signed bundles

Every distribution snapshot is signable with our long-lived ed25519 key. Verify with stock OpenSSL — no Zedmos library needed.

Signing key: loading…
transparency
Live numbers, audited methodology

Every number on this page has a definition. /v1/public/methodology documents what we count, what we DON'T count, FP-filter stages, and SLA targets. /v1/public/transparency emits the same numbers as JSON.

CT-watch
Newly-issued cert monitor

Every cert issued on Certificate Transparency logs is scored on brand-keyword, lookalike, IDN homograph, and lexical entropy in real time. Operator approval required before promotion to firewall feeds.

Stream: connecting…

Suspicious newly-issued certs · last 24h

Certificate Transparency log monitor — brand impersonation, DGA-style domains, IDN homograph attempts. Operator approval required before promotion.

Raw JSON
Domain Score Brand Flags Issuer Seen
CertStream connecting — first batch in <60 s.

Hot indicators · last 24 hours

Aggregated from firewall-fleet sightings (anonymized — no PII, only count + reporting firewall count).

live, no cache
Indicator Type Hits 24h Firewalls Last sighting
loading…

Top categories

unique IOCs per category
loading…

Distribution snapshots

files served via HTTPS to firewalls
Kind Category Type Lines Bytes Last built
loading…

Sources & credibility

Every upstream feed is classified into a credibility tier. We publish the full catalog at /v1/public/sources — provider, license, last audit, status.

honest disclosure things upstream broke that we surface, not hide

2024–2026 ecosystem changes affecting our sources

  • abuse.ch (URLhaus / ThreatFox / Feodo / MalwareBazaar / SSLBL)Auth-Key mandatory since 2025-06-30. 12 of our feeds need a free key from auth.abuse.ch. Operator must provision ABUSECH_AUTH_KEY.
  • Spamhaus eDROP merged into DROP on 2024-04-10. We migrated to drop_v4.json / drop_v6.json / asndrop.json.
  • Tor Project — old /torbulkexitlist deprecated 2020-04-01. Our feed pinned to canonical /api/bulk.
  • Talos public IP-blocklist retired 2024-09; replacement at snort.org has T&C click-through that breaks automation. Not auto-fetched.
  • Bambenek DGA — commercial license required since 2024-07-01. Not redistributed.
  • Cloudflare Radar Top Domains — CC-BY-NC-4.0 license restricts commercial redistribution. Disabled. Tranco's CF component inherits the same caveat — Majestic Million (CC-BY-3.0) is the unambiguous commercial-safe alternative.
  • SSLBL JA3 fingerprints — last update 2021-08-03. Disabled here in production due to documented Smart-TV / IoT collisions.
  • PhishTank — has had multi-month CSV outages historically (MISP issue #9855). Best-effort, not load-bearing.
  • Full list at /v1/public/sourcesdeprecation_warnings[] field.
Tier 1
Gov / national CERT
Tier 2
Industry-grade (abuse.ch / Spamhaus / ET)
Tier 3
Community-curated
Tier 4
Aggregator / mirror
Tier 5
Research / volatile (watch-only)

Audit status (last 24h)

operational
unreachable
stale (critical-only)
unknown

"operational" = HTTP 200 + content received. We deliberately do not call low-cadence feeds (Spamhaus DROP, Feodo Tracker) "stale" — they publish only when actionable changes happen. "stale" is reserved for freshness-critical feeds that exceed their expected cadence.

Top operators

loading…

Per-feed catalog (sample top by tier)

Tier Feed Operator License Status Last fetch
loading…

Showing curated sample. Full catalog as JSON →

Verify our claims yourself

No Zedmos library required. Use stock OpenSSL.

end-to-end proof

ed25519 signed bundle verification

Copy-paste, run, observe Signature Verified Successfully. Tamper one byte → instant Verification Failure.

TOKEN=tihub_...

# 1. fetch the body, the detached signature, and the public key
curl -sS https://cti.zedmos.net/v1/feeds/ti/malware_virus/domains.txt \
  -H "authorization: Bearer $TOKEN" -o body.txt

curl -sS https://cti.zedmos.net/v1/feeds/ti/malware_virus/domains.txt.sig \
  -H "authorization: Bearer $TOKEN" \
  | jq -r .signature_b64 | base64 -d > sig.bin

curl -sS https://www.zedmos.net/v1/public/keys/sign.pem -o pub.pem

# 2. verify (openssl 3.0+, no extra packages)
openssl pkeyutl -verify -pubin -inkey pub.pem -rawin \
  -in body.txt -sigfile sig.bin
# → Signature Verified Successfully
numbers audit

Cross-check the live numbers

Every counter on this page comes from /v1/public/transparency. /v1/public/methodology defines what each counter means and what we explicitly DO NOT count.

# live numbers (no-auth)
curl -sS https://www.zedmos.net/v1/public/transparency \
  | jq .live_numbers

# definitions + FP-filter stages + SLA targets + what we don't count
curl -sS https://www.zedmos.net/v1/public/methodology \
  | jq '.definitions, .fp_filter_stages, .what_we_do_NOT_count'

What we shipped

Every successful change lands here. The home page is updated after every deploy.

v0.3.1 Apr 30, 2026 — drift cleanup

Allowlist-drift cleanup — 113,942 false positives caught and removed

Honest finding: as Tranco/Umbrella allowlist anchors grew daily, 113,942 previously-ingested indicators (37% of our domain corpus) drifted into a state where the FP filter would now reject them — but they kept shipping to firewalls. We caught this in our own audit, swept them in a single pass, and now run the sweep every 6 hours as a maintenance job so it can never re-accumulate. Default firewall feed dropped from 215,608 → 137,748 indicators (~36% reduction); every remaining line strictly meets tier criteria.

v0.3 Apr 30, 2026 — phase 2-4 ship

Three-tier cross-validation pipeline live · every shipped IOC corroborated

We don't ship a single line to a customer firewall without provenance. The default domains.txt / ips.txt / sha256.txt files now contain only verified (≥2 distinct upstream sources, OR active enrichment confirmation, OR honeypot-confirmed, OR manually approved) and trusted (single-source from a strict T1 feed: USOM TR-CERT, CERT.pl, Spamhaus DROP, abuse.ch Feodo low-FP) indicators. The community tier (single-source from T2-T5 feeds) is opt-in only at community-domains.txt.

Active enrichment at ingest: GreyNoise (free Community API) classifies legitimate scanners (Google DNS, Cloudflare DNS, Shodan) → never blocked. AbuseIPDB confidence ≥75 promotes single-source IPs to verified. VirusTotal positives ≥3 promotes domains/IPs/hashes.

Honeypot ground truth: a separate ingest endpoint (/v1/honeypot/event, sensor-token auth) accepts attack observations from Zedmos honeypot mesh nodes. Quorum rule: ≥3 distinct sensors hit by the same IP in 24h, OR ≥10 hits to one sensor → IP promoted to verified with honeypot_confirmed=true. This is literal ground truth — the IP attacked our infrastructure right now.

Daily proof: a random sample of shipped IOCs is checked against tier criteria every 24h. Latest run: . Live numbers and per-tier breakdown at /v1/public/verification.cross_validation.

New today: SHA-256 hashes (sha256.txt + per-category yara.yar rules) · HMAC-signed webhooks for new_iocs / smoke_failed / cloud_fp_caught events · SOAR connectors for Cortex/TheHive + XSOAR + TheHive responder · per-token scope enforcement by kind/category/tier, ready for multi-tenant deployment.

v0.2 Apr 29, 2026 — late edition

Cloud-IP false-positive audit — caught 8,663 in our own catalog

Self-audit found 8,663 IPs (4.27%) of our IP corpus sitting inside published AWS / GCP / Cloudflare / GitHub CIDR ranges — IPs which would have caused real outages on customer firewalls had they been blocked. Caught and suppressed in a single sweep against 202,787 candidates.

Breakdown: AWS 2,619 · GCP 3,137 · GitHub 2,904 · Cloudflare 3. All moved to the review queue with fp_reason=cloud_provider_range; snapshots rebuilt — none ship to firewalls today.

Going forward: ingest pipeline now performs an inline bisect-based cloud-range membership check before any IP IOC is promoted; the cloud-range allowlist is refreshed daily from the four upstream providers via a maintenance worker. Live numbers and full provenance: /v1/public/verification.

v0.2 Apr 29, 2026

STIX 2.1 + TAXII 2.1 server

Native application/taxii+json;version=2.1 server with discovery, collections, manifest and STIX bundle endpoints. 16 collections live — one per kind+category combo. Compatible with MISP, OpenCTI, Splunk Add-on, Anomali ThreatStream and Microsoft Sentinel out of the box.

v0.2 Apr 29, 2026

9 firewall-native output formats

Same indicators, every format your stack speaks: plain text, Suricata DNS rules, Pi-hole adlist, OPNsense / pfSense URL-table, MikroTik RouterOS script, Unbound / BIND RPZ, STIX 2.1 bundle, TAXII 2.1 collection, MISP feed. No custom-format upcharge.

v0.2 Apr 29, 2026

MITRE ATT&CK ingestion

30,649 STIX objects mirrored from mitre/cti — enterprise + mobile + ICS domains. Indicators ship with kill-chain phase tagging today; technique-id mapping (T1566.002 etc.) lands in v0.3.

v0.2 Apr 29, 2026

Tranco + Cisco Umbrella allowlist anchors

Daily-refreshed anchors: Tranco top-domains, Cisco Umbrella, AWS/GCP/Cloudflare/GitHub published CIDR ranges. Allowlist now entries (). Combined with Mozilla PSL for accurate co.uk / com.tr / appspot.com handling. Live: /v1/public/verification.

v0.2 Apr 29, 2026

Closed-loop sightings (anonymized)

Firewalls can POST /v1/sightings/bulk aggregate hit counts (no PII). The hot-indicators panel above is powered by this. Privacy-preserving HMAC + bloom-dedup hardening lands in v0.3.

v0.2 Apr 29, 2026

GreyNoise + AbuseIPDB enrichment

On-demand IP context. GreyNoise classifies "internet noise" vs "common business service" — automatic FP suppression for things like 8.8.8.8. AbuseIPDB second-source confidence cross-check.

v0.2 Apr 29, 2026

ed25519 signed bundles + audited methodology

Detached .sig signatures on every distribution snapshot, verifiable by stock OpenSSL. Public key at /v1/public/keys/sign.pem. /v1/public/methodology documents exactly what each counter means and what we DON'T count. Recipe →

v0.2 Apr 29, 2026

MITRE ATT&CK technique tagging on STIX

Every STIX 2.1 indicator now ships with technique-id external references (e.g. T1566.002 Spearphishing Link for phishing IOCs, T1071.001 Web Protocols C2 for botnet IOCs). Auto-links to OpenCTI / MISP / Splunk SEC dashboards.

v0.2 Apr 29, 2026

Sigma rule export per category

10th output format: /v1/feeds/<k>/<c>/sigma.yml. Portable to Splunk SPL, Elastic ES|QL, Sentinel KQL, QRadar via sigmac / uncoder.io.

v0.2 Apr 29, 2026

CertStream watcher (best-effort)

Long-lived WS to Calidog CertStream. Brand-keyword + Levenshtein lookalike + Shannon-entropy DGA scorer. Operator approval required before promotion. Note: depends on calidog.io availability — sometimes the upstream firehose pauses.

v0.2 Apr 29, 2026

MISP feed format export — 10th format

Per-category MISP feed: /v1/feeds/<k>/<c>/misp/manifest.json + /<event-uuid>.json + hashes.csv. Drops directly into MISP Feeds → Add. Full attribute Tags (TLP, kind, category) included.

v0.2 Apr 29, 2026

abuse.ch ecosystem fully wired (7/7 platforms + Auth-Key wizard)

URLhaus + ThreatFox + Feodo + MalwareBazaar + SSLBL + YARAify + Hunting reference. Free Auth-Key required from auth.abuse.ch — validated against the upstream before persisting, then bulk-applied to all 14 abuse.ch feeds. Operation Endgame (May 2024 LE takedown) context surfaced honestly — Feodo Tracker is empty because the threats it tracked are dismantled.

v0.2 Apr 29, 2026

Honest disclosure — 8 ecosystem changes surfaced

2024–2026 retired the assumption that "abuse.ch + Talos + Bambenek = free baseline." We surface the changes that broke that assumption (abuse.ch Auth-Key, Talos retired, Bambenek paid, Cloudflare CC-BY-NC) on the Sources page rather than hide them. Each feed publishes deprecation_note + license_caveat + auth_required.

v0.2 Apr 29, 2026

8 new feeds: DigitalSide, TweetFeed, Cybercrime-tracker…

Cybercrime-tracker first run added 19,145 banking-trojan C2 indicators. DigitalSide (CC0), TweetFeed (Twitter OSINT), MalwareBazaar (sample hashes for STIX), AlienVault OTX (free), MISP CIRCL (Phase 2). Total feed count: 22 → 30.

v0.2 Apr 29, 2026

Live SLA status page

/status publishes mean-indicator-age, P99, feed-OK ratio, snapshot freshness. Auto-refreshes every 20s. Most CTI vendors hide these metrics — we show them by default.

What is CTI?

Cyber Threat Intelligence — context-rich data about adversaries, the infrastructure they use, and how to detect them.

Strategic CTI
Who and why

High-level intelligence on threat actors, geopolitical motivations, industry targeting and long-running campaigns. Read by CISOs and risk officers.

Tactical CTI
How they operate

TTPs (Tactics, Techniques and Procedures) mapped to MITRE ATT&CK. Detection engineers use this to write SIEM rules and IDS signatures.

Operational / Technical CTI
What to block, right now

Indicators of Compromise (IOCs): malicious domains, IPs, CIDRs, file hashes, JA3/JA4 fingerprints. Fed into firewalls, EDRs, DNS sinkholes. This is what Zedmos CTI specializes in.

Why curation matters

Raw open-source TI feeds are noisy. URLhaus might list a Google Drive URL because attackers used it for malware staging — but the parent domain drive.google.com is, of course, legitimate. Without curation, a firewall that suffix-matches such a feed will block hundreds of millions of legitimate users from Google Drive, GitHub, Microsoft 365 and more. Zedmos CTI runs every IOC through a five-stage filter: hard allowlist · root-domain protection · multi-source consensus · format validation · manual review queue.

How it works

From upstream feed to firewall — every minute, every indicator.

01 · INGEST
Pull from upstream

BullMQ-scheduled HTTP fetchers honour each feed's polling interval. Plain, hosts, CSV and JSON formats are parsed natively.

02 · FILTER
Strip false positives

5-stage pipeline: allowlist suffix match, registrable-root protection, multi-source consensus, syntactic validation, manual review.

03 · MATERIALIZE
Build snapshots

Per-category, per-type files are written sorted-unique with a SHA-256 ETag. Atomic rename means firewalls never see a partial file.

04 · DISTRIBUTE
Serve over HTTPS

NGINX reverse-proxy with per-FW Bearer auth, ETag/304 revalidation, gzip, rate-limits and a 60-second cache zone scaled for thousands of firewalls.

Public API

All endpoints emit Cache-Control and ETag. Firewall feeds require a Bearer token.

GET /v1/public/stats no auth
Service-wide aggregates: feed counts, IOC counts by type, review queue size, top categories, snapshot index.
GET /v1/stix/info no auth
STIX/TAXII discovery — list of every TAXII 2.1 collection with id / title / kind / category.
GET /v1/public/health no auth
Liveness probe.

Firewall feed endpoints Bearer

Same indicators, your favourite format. Substitute <kind>ti | security | waf and <cat> with a category from /v1/stix/info.

GET/v1/feeds/<kind>/<cat>/domains.txt
Plain text, sorted-unique. Drop into any agent.
GET/v1/feeds/<kind>/<cat>/ips.txt
Plain text v4/v6 IPs and CIDRs.
GET/v1/feeds/<kind>/<cat>/suricata.rules
Native Suricata DNS-block rules with auto-allocated SID range and metadata tags.
GET/v1/feeds/<kind>/<cat>/pihole.txt
Pi-hole adlist format (one domain per line, with header comment).
GET/v1/feeds/<kind>/<cat>/opnsense.txt
OPNsense / pfSense URL-table alias source. IPs/CIDRs.
GET/v1/feeds/<kind>/<cat>/mikrotik.rsc
MikroTik RouterOS firewall script. Idempotent — replaces previous list.
GET/v1/feeds/<kind>/<cat>/unbound.rpz
Unbound / BIND Response-Policy Zone. Wildcard-covers subdomains.
GET/v1/feeds/<kind>/<cat>/stix.json
STIX 2.1 bundle. Drops into MISP, OpenCTI, Splunk, Sentinel, Anomali, ThreatConnect.

TAXII 2.1 server Bearer

Discovery root:
https://cti.zedmos.net/taxii2/
Conforms to OASIS TAXII 2.1 OS. Compatible clients: MISP, OpenCTI, Splunk Add-on for STIX/TAXII, Anomali ThreatStream, Microsoft Sentinel, OASIS Cabby.
Curl examples:
# Live stats (no auth)
curl -sS https://www.zedmos.net/v1/public/stats | jq .iocs

# Suricata rules (Bearer required)
curl -sS https://cti.zedmos.net/v1/feeds/ti/malware_virus/suricata.rules \
  -H "authorization: Bearer tihub_..."

# STIX 2.1 bundle for Splunk / MISP / OpenCTI
curl -sS https://cti.zedmos.net/v1/feeds/ti/phishing/stix.json?limit=1000 \
  -H "authorization: Bearer tihub_..."

# TAXII 2.1 collection list
curl -sS https://cti.zedmos.net/taxii2/api1/collections/ \
  -H "authorization: Bearer tihub_..." \
  -H "accept: application/taxii+json;version=2.1"

What you get

No false positives by design

Allowlist of major cloud, social, OS-update and CDN domains. Registrable-root protection prevents a feed listing google.com from killing every Google subdomain.

High-throughput delivery

NGINX proxy_cache + ETag + gzip means a firewall fetching a 1 MB feed every 10 minutes costs us a few KB of revalidation traffic per request.

Drop-in for Zedmos firewalls

No engine recompile required: replace the upstream URL in agent.json with the matching cti.zedmos.net path, drop in a Bearer token, restart the agent.

Multi-source consensus

Each IOC tracks its provenance across feeds. Operators can require a minimum number of independent sources before an indicator gets shipped to firewalls.

Audit-ready

Every change to the catalog — feed updates, IOC promotions, allowlist edits — is recorded with timestamps and reasons. Suitable for compliance evidence.