Knowledge Base

SwarmHawk Platform Guide

Everything you need to know about SwarmHawk — from signing up and scanning your first domain to integrating the API into your workflow and managing enterprise attack surfaces.

Last updated: March 2026 · swarmhawk.com

Platform Overview

SwarmHawk is a continuous external attack surface management (EASM) platform. It automatically discovers, scans, and scores every internet-facing domain in your inventory — then maps exactly how an attacker would move through them using real MITRE ATT&CK techniques.

Instead of producing a 500-page vulnerability report once a quarter, SwarmHawk runs continuously and surfaces a short, prioritized action list: the 3–5 things that, if fixed today, would most reduce your real breach risk.

How it works at a glance

1
You add domains
Paste in a list of domains, upload a file, or let SwarmHawk auto-discover subdomains from your seed domain. The platform also ingests from certificate transparency logs and CZDS zone files.
2
The scan engine runs 22+ security checks
DNS health, SSL/TLS configuration, open ports, email security (SPF, DKIM, DMARC), web headers, known breach data, WHOIS, and more — continuously, not once a year.
3
A risk score is computed
Each domain gets a 0–100 risk score. Critical issues (open RDP, missing DMARC, expired SSL) carry heavy weight. Scores update automatically when your configuration changes.
4
Breach paths are mapped
For enterprise accounts, the org graph engine clusters domains into organizations and computes directed attack paths — showing exactly which pivot points connect an entry node to your critical assets.
5
You fix. The score drops.
Act on the prioritized recommendations in your dashboard, via the API, or through your AI assistant using MCP. SwarmHawk re-scans automatically and confirms the fix.

Quick Start

Sign up and add your first domain

1
Create an account
Go to swarmhawk.com and click Start Free. Register with email/password or Google Sign-In. No credit card required for the Free tier.
2
Open your dashboard
After login you land in the Domains tab automatically. Click Add Domain and enter your domain (e.g. example.com).
3
Wait for the first scan
The initial Tier 1 scan completes in under 60 seconds. Your risk score and first findings appear automatically. No refresh needed.
4
Read your results
Click any domain row to open the detailed report. The top section shows your risk score; below it, each finding is listed with severity, explanation, and a concrete remediation step.
💡

Tip: Start with your primary business domain. SwarmHawk will also scan any subdomains it discovers during the process — you'll quickly see your real internet footprint.

Your Role

SwarmHawk serves four distinct user types. Your role determines which features are most relevant — but everyone uses the same unified platform.

🏢
SMB Domain Owner
Individual · Small Business
You own 1–10 domains and want to know if they're secure without hiring a security team. SwarmHawk gives you plain-English findings and a clear fix list. Free tier covers your first domain.
⚙️
Developer
API · MCP · Automation
You want to embed domain security checks into CI/CD pipelines, customer-facing products, or AI workflows. Use the REST API or the MCP server to query scan results programmatically.
🛡️
Enterprise Security Team
EASM · Breach Path Analysis
You manage hundreds or thousands of domains across a complex organization. Enterprise features give you org-level risk scoring, attack path visualization, MITRE ATT&CK mapping, and SIEM/XDR integrations.
🌐
Hosting Provider / MSP
B2B · Reseller · White-label
You host domains for thousands of customers and want to offer security monitoring as a value-add or upsell. The Bulk Feed API gives you continuous scan data for your entire portfolio in one call.

Role-based access

FeatureFreeProBusinessEnterprise
Domain scanning1 domainUp to 10Up to 100100+ custom
Risk score + findings
PDF report
REST API + MCP access
NIS2/DORA compliance export
Domain ownership verification
Shodan attack surface intel
Breach intel (ParanoidLab)
Authenticated scan
Supply chain monitoring
SIEM / XDR integration
SSO / SAML
White-label dashboard

Dashboard Guide

The SwarmHawk dashboard is a full-screen app that opens automatically after login. It has three tabs: Domains, Account, and Admin (admin users only).

Domains Tab

This is your main workspace. It shows every domain in your inventory with its current risk score and status.

Domain list

Filtering

Use the filter bar above the domain list to show only all, critical, warning, or clean domains. The filter selection persists across page refreshes.

Domain report

Click any domain row to open the full scan report. The report is divided into sections:

Adding domains

Click + Add Domain (top-right of the domains tab). Enter a bare domain name (example.com) — do not include https:// or trailing slashes. SwarmHawk normalizes the input automatically.

⚠️

Domain limits: Free accounts are limited to 1 domain. Pro ($79/mo) unlocks up to 10, Business ($299/mo) up to 100, Enterprise is fully custom. If you hit your plan limit, you'll see a tier-specific upgrade prompt.

Account Tab

The Account tab shows your plan details, billing history, API key, and profile settings.

Admin Tab

Visible only to users with the admin role. Contains four sections:

Pipeline stats

Live counts from the scan engine: total domains in queue, pending scans, completed today, error rate, and the timestamp of the last successful scan cycle.

Domain management

Search and manage any domain in the system. Force a re-scan, change priority tier, flag for review, or delete a domain from the database.

Batch upload

Upload a .txt file (one domain per line) or a .json array to ingest domains in bulk. Useful for onboarding a new customer portfolio or importing from another scanner.

Enterprise compute

Trigger the org graph clustering engine to re-cluster all domains into organizations and recompute breach paths and risk scores. This runs automatically on a schedule but can also be triggered manually here.

Scan Engine

SwarmHawk's scan engine uses a three-tier architecture to balance speed, depth, and cost.

TierWhat it doesLatencyFrequency
Tier 1 DNS resolution, basic SSL check, HTTP reachability, WHOIS lookup < 60 s Every 6 hours
Tier 1.5 Email security (SPF/DKIM/DMARC), DNS record analysis, certificate expiry 1–3 min Daily
Tier 2 Port scan (top 1000), breach data lookup, full TLS handshake analysis, security headers 3–8 min Every 48 hours

When you add a new domain, a Tier 1 scan is dispatched immediately. Tier 1.5 and Tier 2 scans are queued and run on the next available cycle.

Security Checks

SwarmHawk runs 23 individual checks grouped into six categories:

📖

Full remediation guides for every check → The Security Knowledge Base has a dedicated step-by-step fix guide for each check — SPF, DMARC, HSTS, CSP, CVE exposure, open ports, and 25 more. Each guide includes exact server config commands you can copy directly.

DNS Health

DNS resolution failure
Critical — domain not resolving
Missing AAAA record
Low — IPv6 not configured
DNS zone transfer enabled
High — zone data exposed
Dangling DNS records
High — subdomain takeover risk

SSL / TLS

Certificate expired
Critical — browser will warn users
Self-signed certificate
High — not trusted by browsers
Certificate expiring soon (<30d)
Medium — action required
Weak cipher suites (TLS 1.0/1.1)
Medium — protocol downgrade risk

Email Security

Missing DMARC record
Critical — email spoofing enabled
Missing SPF record
High — sender forgery possible
DMARC policy = none
Medium — monitoring only, no enforcement
Missing DKIM
Medium — email integrity unverified

Web / HTTP

Missing HSTS header
High — MITM downgrade possible
Missing CSP header
Medium — XSS risk elevated
Clickjacking (no X-Frame-Options)
Medium
HTTP to HTTPS redirect missing
Medium — traffic sent in cleartext

Infrastructure

Exposed RDP / SSH port
Critical — brute force target
Domain in breach database
Critical — credentials likely stolen
Domain expiry <60 days
High — hijacking risk if renewal fails
No DNSSEC
Informational — DNS spoofing possible

Active Reconnaissance New

Database port exposed to internet
Critical — MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch open
Sensitive subdomains public
Critical — dev/staging/admin/git subdomains resolving
High-risk management port open
High — RDP, VNC, Docker API, Jupyter accessible
Large subdomain footprint
Medium — 15+ subdomains discovered via CT logs + DNS
Technology version disclosed
High — Server header, X-Powered-By, or generator tag reveals version
CMS fingerprinted
Medium — WordPress, Drupal, or Joomla identity detectable
📚

Every check includes a knowledge base entry. Click any finding in the domain report to expand it — you'll see a plain-English description of the vulnerability, a link to the authoritative reference (RFC, MDN, OWASP), and a numbered list of concrete next steps to remediate it.

Risk Scoring

Every domain receives a risk score from 0 (fully clean) to 100 (critically exposed). The score is computed from a weighted sum of active findings:

SeverityBase weight per findingExamples
Critical25 pointsExposed RDP, expired SSL, no DMARC, breach hit
High15 pointsDNS zone transfer, no SPF, MITM-prone redirect
Medium8 pointsNo HSTS, weak TLS, DMARC policy=none
Low / Info2 pointsMissing AAAA, no DNSSEC

The raw sum is capped at 100. Multiple critical findings push the score to 100 quickly — which is intentional. A domain with 4 critical issues is as urgent as one with 6.

💡

Score changes automatically. When you fix a finding (e.g. add a DMARC record), the next scan detects the change and the score drops without any manual action required.

REST API

The SwarmHawk REST API gives programmatic access to scan data, domain management, and reporting. It's the foundation for the MCP server and bulk feed integrations.

Base URL: https://swarmhawk.com/api

Authentication

All API requests require a Bearer token in the Authorization header. You can find your token in the Account tab of the dashboard under API Key.

# Example: fetch your domain list
curl -s https://swarmhawk.com/api/domains \
  -H "Authorization: Bearer YOUR_API_KEY"
🔒

Keep your API key secret. Treat it like a password. If it's compromised, regenerate it from the Account tab. Do not commit it to source control.

Key Endpoints

Domain Management

GET
/domains
List all domains in your account with current risk score and scan status.
POST
/domains
Add a new domain. Body: {"domain": "example.com"}
GET
/domains/{domain_id}
Get full scan result for a single domain including all findings.
POST
/scan/{domain_id}
Force an immediate re-scan of a domain.
DELETE
/domains/{domain_id}
Remove a domain from your inventory.

Scanning & Reports

GET
/scan-results/{domain}
Raw scan result JSON for a domain, including all individual check outputs.
GET
/pipeline/status
Current scan queue depth, completion rate, and last scan timestamp.

Bulk Feed (Team / Enterprise)

GET
/feed/domains
Return all scan results for your entire portfolio. Supports ?since=ISO8601 for delta pulls.
POST
/admin/batch-upload
Upload a .txt or .json file to ingest domains in bulk (admin only).

Enterprise

GET
/enterprise/stats
Org-level aggregate statistics: total orgs, avg risk score, critical asset count.
GET
/enterprise/orgs
List all discovered organizations with domain count and risk score.
GET
/enterprise/breach-paths
Return all computed breach paths with MITRE ATT&CK technique labels.
POST
/enterprise/compute
Trigger org graph clustering and breach path computation for all domains.

Example: scan a domain and read findings

# 1. Add domain
curl -sX POST https://swarmhawk.com/api/domains \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"example.com"}'

# 2. Poll until scan completes (status != "pending")
curl -s https://swarmhawk.com/api/scan-results/example.com \
  -H "Authorization: Bearer YOUR_API_KEY" | \
  jq '{score: .risk_score, findings: [.findings[] | {sev:.severity, msg:.message}]}'

MCP Integration

SwarmHawk exposes a Model Context Protocol (MCP) server so AI tools — Claude, Cursor, GitHub Copilot, and any MCP-compatible assistant — can query your security data and answer questions like "which of my domains are most at risk?" or "summarize the findings for api.example.com".

What is MCP?

MCP (Model Context Protocol) is an open standard that lets AI assistants call external tools and data sources in a structured, sandboxed way. When you connect SwarmHawk's MCP server to your AI tool, the assistant can read your live scan data — but cannot make changes without your explicit approval.

Connect to Claude Desktop

Add the following to your claude_desktop_config.json (found in your Claude Desktop settings):

{
  "mcpServers": {
    "swarmhawk": {
      "url": "https://swarmhawk.com/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Connect to Cursor / VS Code

# In your workspace .mcp.json
{
  "servers": {
    "swarmhawk": {
      "url": "https://swarmhawk.com/api/mcp",
      "apiKey": "YOUR_API_KEY"
    }
  }
}

MCP tools available

ToolDescription
list_domainsReturns all domains with risk score and status
get_scan_resultFull findings for a specific domain
get_pipeline_statusCurrent scanner queue state
get_risk_summaryAggregate: total domains, avg score, critical count
trigger_scanRequest an immediate re-scan (requires confirmation)
🤖

Example prompt: "Using SwarmHawk, tell me which of my domains have a critical risk score and what the top issue is for each one."
Claude will call list_domains, filter for score > 70, then call get_scan_result for each one and summarise the top finding.

For full MCP setup instructions for Claude Desktop, Cursor, Windsurf, Cline, and self-hosting — including copy-paste config snippets, all 7 tool definitions, example prompts, and troubleshooting — see the → MCP Integration Guide.

Attack Surface Management

Enterprise accounts unlock SwarmHawk's EASM capabilities — designed for security teams who need a continuous, organization-wide view of their exposure, not just a domain list.

What EASM means in practice

Org Graph

The org graph engine reads your full domain inventory and clusters domains by their registered parent domain (eTLD+1). Each cluster becomes an organization node.

Each domain in the cluster is classified as one of four node types:

Node typeMeaningExample
EntryInternet-facing, lower security posture — likely first hop for an attackerPublic marketing site, dev/staging environment
PivotIntermediate domain that connects entry to critical assetsAPI gateway, partner portal
CriticalHigh-value target — authentication, billing, data storageauth.example.com, app.example.com
SafeLow risk, limited connectivity to critical assetsStatic content CDN, redirect-only domain

Breach Path Analysis

Once the org graph is built, SwarmHawk's path engine enumerates directed attack paths from every entry node to every critical asset — up to depth 4 and 100 paths per organization.

Each path edge is labelled with a MITRE ATT&CK technique that represents the likely exploitation method:

Source → TargetTechniqueExample scenario
Entry → PivotT1190 Exploit Public-Facing AppAttacker exploits exposed dev site to reach API gateway
Pivot → CriticalT1078 Valid AccountsCredential reuse from compromised pivot grants auth.domain access
Critical → CriticalT1550 Use Alternate Auth MaterialSession token from auth domain used to access billing

Choke points are nodes that appear on the highest number of paths. Hardening a choke point — even moderately — breaks the most attack paths simultaneously. SwarmHawk ranks choke points by blast radius and surfaces them first in the remediation queue.

Per-domain Attack Surface Analysis → The Security Knowledge Base contains full explanations of how the Attack Surface Analysis works, how to read the MITRE ATT&CK breach path graph, what every node colour means, and how to act on ParanoidLab dark web intelligence findings.

NIS2 / DORA / GDPR

SwarmHawk maps directly to the technical security measures required under current EU regulations. Your scan data can be exported as a compliance evidence package.

NIS2 Article 21 mapping

NIS2 requirementSwarmHawk coverage
Risk analysis and security policiesContinuous risk scoring with documented findings history
Incident handlingBreach database detection, real-time alerting
Business continuityDomain expiry and DNS failure monitoring
Supply chain securityThird-party domain scanning via bulk feed
Network and information systems securityFull 22+ check scan covering DNS, TLS, ports, headers
Cryptography and encryptionTLS configuration and cipher suite analysis
Multi-factor authenticationExposed auth endpoint detection

DORA (Digital Operational Resilience Act)

DORA requires financial entities to continuously monitor their ICT attack surface. SwarmHawk satisfies the threat-led penetration testing and vulnerability management pillars by providing continuous automated scanning as a documented, auditable process.

GDPR Article 32

Article 32 requires "appropriate technical measures" to ensure data security. SwarmHawk's TLS, header, and breach detection checks provide evidence of proactive security hygiene — suitable for inclusion in a GDPR technical measures register.

📋

Compliance export: Pro and Enterprise plans include a one-click PDF compliance report formatted for NIS2 Article 21 technical annex. Access it from the Account tab → Compliance Reports.

Plans & Limits

PlanDomainsAPI accessKey featuresPrice
Free 1 Full scan, PDF report $0 / mo
Pro 10 API, MCP, NIS2, ownership verification, email alerts $79 / mo
Business 100 Everything in Pro + Shodan, breach intel, authenticated scan, supply chain $299 / mo
Enterprise 100+ (custom) ✓ Unlimited Everything in Business + SIEM, SSO/SAML, white-label, custom SLA From $999 / mo

API rate limits are enforced per API key. Exceeding the limit returns HTTP 429 Too Many Requests. Limits reset at midnight UTC.

Domain limits are enforced at the account level. Attempting to add a domain beyond your plan limit returns HTTP 403 Forbidden with a domain_limit_reached error code.

XDR & SIEM Integration Guide

Integration Guide · Live

SwarmHawk pushes the full external attack surface picture — not just a risk number — directly into your existing security stack. Every integration sends platform-optimised, fully-enriched payloads: 22-check scan results, CVE list, software fingerprints, email security chain (SPF/DMARC/DKIM), threat classification, blacklist status, domain age, and per-check remediation steps.

Configure in one click: Go to Account → Integrations, click Configure next to any platform, paste your credentials, hit Test Connection, then Save. SwarmHawk automatically pushes findings the next time any monitored domain scores risk ≥ 70.

What SwarmHawk sends to every integration

FieldTypeDescription
domainstringMonitored domain name
risk_scoreint 0–100Composite risk score across all 22 checks, IP reputation, blacklists
max_cvssfloatHighest CVSS score found in CVE matches against detected software
prioritystringCRITICAL / HIGH / MEDIUM / LOW / INFO
threat_typeslistClassified threat types: phishing_vector, unpatched_cve, malware_distribution, ssl_misconfiguration, exposed_ports, etc.
top_cveslistTop 5 CVEs with ID + CVSS score
software_detectedlistFingerprinted software stack: product + version
failed_checkslistNames of all checks that returned critical or warning
spf_statusstringpresent / missing / invalid
dmarc_statusstringpresent / missing / invalid
dkim_statusstringpresent / missing / invalid
email_security_scoreint 0–3Combined SPF+DMARC+DKIM score — 0 = fully spoofable
phishing_riskbooltrue when SPF+DMARC both missing/invalid
blacklistedboolDomain/IP active on Spamhaus, URLhaus, or IP blocklists
domain_age_daysintAge of domain registration — newly registered domains = higher phishing risk
countrystringISO-2 country code of registrant / IP geolocation
waf_detectedboolWAF/CDN presence detected in front of domain
ip_reputationstringIP reputation score from threat intel feeds

📊 Splunk SIEM

What you gain: SwarmHawk writes CIM-aligned events (sourcetype=swarmhawk:scan) into your Splunk index. Security analysts can immediately write SPL queries across your entire external domain footprint — no custom schema required.

Blind spot filled: Splunk sees your internal endpoint telemetry. SwarmHawk tells it what's exposed externally. Together: correlate "employee browsed domain X" with "domain X is blacklisted + has unpatched CVE-2024-XXXX".

Setup

  1. In Splunk: Settings → Data Inputs → HTTP Event Collector → New Token
  2. Note the HEC URL (https://your-splunk:8088) and token
  3. In SwarmHawk: Account → Integrations → Splunk → Configure
  4. Paste HEC URL, token, and target index

CIM fields sent

dest              = "example.cz"          -- domain (CIM: Network)
vendor_product    = "SwarmHawk EASM"
category          = "vulnerability"
severity          = "high"
risk_score        = 87
max_cvss          = 9.1
threat_types_csv  = "phishing_vector,unpatched_cve"
cve_ids           = "CVE-2024-1234, CVE-2023-5678"
software_names    = "Apache 2.4.51, OpenSSL 1.0.2"
failed_checks_csv = "ssl,headers,dmarc"
spf_status        = "missing"
dmarc_status      = "missing"
email_security_score = 0                   -- 0/3 = fully spoofable
phishing_risk     = 1
blacklisted       = 0
country           = "CZ"
domain_age_days   = 180

Example SPL queries

-- Find all phishing-ready domains
index=swarmhawk sourcetype=swarmhawk:scan phishing_risk=1
| table dest, country, domain_age_days, registrar
| sort -risk_score

-- Top exposed software stacks
index=swarmhawk sourcetype=swarmhawk:scan
| rex field=software_names "(?P<product>[^,]+)"
| stats count by product | sort -count

-- Domains with active CVEs by country
index=swarmhawk sourcetype=swarmhawk:scan cve_count>0
| stats avg(max_cvss) as avg_cvss, count by country
| sort -avg_cvss

-- Risk posture trend over time
index=swarmhawk sourcetype=swarmhawk:scan
| timechart avg(risk_score) by priority

🔵 Microsoft Sentinel

What you gain: SwarmHawk creates a custom SwarmHawk_CL log table in your Log Analytics workspace. Every field is KQL-queryable with typed suffixes (_s string, _d number, _b boolean). Use it in workbooks, analytic rules, and SOAR playbooks.

Cross-source correlation: Write a KQL rule that fires when a user in your AAD sign-in logs browses a domain that SwarmHawk has flagged as phishing_risk=true. Impossible without SwarmHawk's external view.

Setup

  1. In Azure: Log Analytics workspace → Agents → Workspace ID + Primary Key
  2. In SwarmHawk: Account → Integrations → Microsoft Sentinel → Configure
  3. Paste Workspace ID and Shared Key (primary or secondary)

KQL fields in SwarmHawk_CL

Domain_s, Country_s, Registrar_s, DomainAgeDays_d
RiskScore_d, MaxCVSS_d, Priority_s, CriticalCount_d
ThreatCategory_s, ThreatTypes_s, AttackVectors_s
PhishingRisk_b, Blacklisted_b, WAFDetected_b
CVEList_s, CVECount_d, SoftwareStack_s
SPFStatus_s, DMARCStatus_s, DKIMStatus_s, EmailSecurityScore_d
ComplianceFlag_s  -- "NIS2-Art21" when risk >= 70
TimeGenerated

Example KQL queries

// Phishing-ready domains with email spoofing risk
SwarmHawk_CL
| where PhishingRisk_b == true
| project Domain_s, Country_s, EmailSecurityScore_d, DomainAgeDays_d, RiskScore_d
| order by RiskScore_d desc

// High-CVSS domains by country heatmap
SwarmHawk_CL
| where MaxCVSS_d >= 7.0
| summarize count(), avg(MaxCVSS_d) by Country_s
| order by count_ desc

// NIS2 compliance exposure
SwarmHawk_CL
| where ComplianceFlag_s == "NIS2-Art21"
| summarize count() by ThreatCategory_s

// Cross-source: user browsed blacklisted domain
SwarmHawk_CL
| where Blacklisted_b == true
| join kind=inner (
    SigninLogs | project UserPrincipalName, ResourceDisplayName
) on $left.Domain_s == $right.ResourceDisplayName
| project UserPrincipalName, Domain_s, RiskScore_d, ThreatTypes_s

🦅 CrowdStrike Falcon

What you gain: SwarmHawk pushes your high-risk domains as typed IOCs into Falcon's threat intelligence. Falcon then blocks or alerts when any endpoint — anywhere in your estate — attempts to connect to those domains.

Proactive blocking: SwarmHawk pushes IOCs 90 days before they appear in standard threat feeds. A domain with CVSS 8.5 and missing DMARC is a confirmed phishing vector — block it now, before an employee clicks a link.

IOC enrichment sent to Falcon

type:        "domain"
value:       "compromised-supplier.cz"
action:      "prevent"   -- for blacklisted/malware; "detect" for CVE/misconfiguration
severity:    "HIGH"      -- CRITICAL (CVSS≥9) / HIGH (7-9) / MEDIUM (4-7)
description: "SwarmHawk EASM | Risk: 91/100 | CVSS: 9.1
              Threats: phishing_vector, unpatched_cve
              CVEs: CVE-2024-1234, CVE-2023-5678
              Software: Apache 2.4.51, OpenSSL 1.0.2
              ⚠ Domain can be spoofed — SPF/DMARC missing"
tags:        ["swarmhawk","easm","phishing_vector","unpatched_cve"]
expiration:  90 days (auto-refreshed on rescan)

🛡️ Bitdefender GravityZone

What you gain: SwarmHawk creates named domain rules in GravityZone, classified by threat type. Endpoints covered by GravityZone are protected from domains your external scanner has flagged — without manual rule management.

Rule naming convention: [SwarmHawk CRITICAL] compromised-domain.cz — instantly visible in GravityZone policy console with priority embedded in the name.

Action is set to block for confirmed malware/blacklisted domains and report for CVE-exposure or misconfiguration findings.

🟠 Palo Alto Cortex XDR

What you gain: SwarmHawk inserts external alerts into Cortex XDR's investigation timeline, mapped to MITRE ATT&CK techniques. Your SOC analysts see domain-level exposure findings alongside endpoint detections — in the same pane of glass.

MITRE ATT&CK mapping

SwarmHawk threat typeMITRE technique
phishing_vectorT1566 — Phishing
malware_distributionT1189 — Drive-by Compromise
unpatched_cveT1190 — Exploit Public-Facing Application
exposed_portsT1046 — Network Service Discovery
ssl_misconfigurationT1557 — Adversary-in-the-Middle
active_malware_urlT1204 — User Execution

🎫 Jira

What you gain: SwarmHawk creates fully-structured Jira tickets in Atlassian Document Format (ADF) — with tables, bullet lists, and headings. Each ticket includes everything the assignee needs to remediate without ever opening SwarmHawk.

What's in each ticket

Labels are auto-set: swarmhawk easm nis2 phishing-vector cz — enabling sprint filters and SLA tracking.

Only fires for domains with risk_score ≥ 70 or max_cvss ≥ 7.0 — no ticket noise for low-risk findings.

🔧 ServiceNow

What you gain: SwarmHawk creates ServiceNow incidents with business risk framing, NIS2 compliance references, urgency/impact auto-mapped from risk score, and per-check remediation steps with SLA guidance.

Urgency / Impact mapping

SwarmHawk priorityUrgencyImpactSuggested SLA
CRITICAL1 — High1 — High4 hours
HIGH1 — High2 — Medium24 hours
MEDIUM2 — Medium2 — Medium7 days
LOW3 — Low3 — Low30 days

📡 Webhook / REST API

Configure a webhook URL in Account → Integrations → Webhook. SwarmHawk will POST a fully-enriched JSON payload to your endpoint each time a scan completes for a high-risk domain (risk ≥ 70). Use this to build Slack alerts, PagerDuty incidents, custom dashboards, or SOAR automations.

POST https://your-endpoint.com/swarmhawk-hook
Content-Type: application/json
X-SwarmHawk-Signature: sha256=<hmac>

{
  "event":               "scan.completed",
  "domain":              "target.cz",
  "risk_score":          87,
  "max_cvss":            9.1,
  "priority":            "CRITICAL",
  "critical_count":      4,
  "threat_types":        ["phishing_vector", "unpatched_cve"],
  "phishing_risk":       true,
  "blacklisted":         false,
  "cve_ids":             "CVE-2024-1234, CVE-2023-5678",
  "software_names":      "Apache 2.4.51, OpenSSL 1.0.2",
  "failed_checks":       ["ssl", "dmarc", "headers"],
  "email_security_score": 0,
  "country":             "CZ",
  "timestamp":           "2026-03-30T09:12:00Z"
}

Signature verification (Python)

import hmac, hashlib
from flask import Flask, request, abort

app    = Flask(__name__)
SECRET = b"your_webhook_secret"

@app.post("/swarmhawk-hook")
def handle():
    sig      = request.headers.get("X-SwarmHawk-Signature", "")
    expected = "sha256=" + hmac.new(SECRET, request.data, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(sig, expected):
        abort(403)
    payload = request.json
    # Route by priority
    if payload["priority"] == "CRITICAL":
        page_oncall(payload)
    elif "phishing_vector" in payload["threat_types"]:
        alert_security_team(payload)
    return {"ok": True}

⚡ STIX / TAXII 2.1

What you gain: SwarmHawk serves your critical domain findings as a STIX 2.1 bundle via a TAXII 2.1-compliant endpoint. Any threat intel platform — MISP, OpenCTI, Anomali, Recorded Future — can ingest it natively.

Share with your sector ISAC. Export your domain findings as standardised STIX bundles (DomainName + Vulnerability + Relationship objects) and contribute to your industry threat intelligence group — without exposing raw data.

TAXII endpoints

GET /taxii/collections/
Authorization: Bearer swh_YOUR_SESSION_TOKEN

GET /taxii/collections/swarmhawk/objects/?min_risk=70&limit=100
Authorization: Bearer swh_YOUR_SESSION_TOKEN

STIX object types generated

Full Field Mapping Reference

SwarmHawk fieldSentinel KQLSplunk SPLDescription
domainDomain_sdestMonitored domain
risk_scoreRiskScore_drisk_scoreComposite 0–100 score
max_cvssMaxCVSS_dmax_cvssHighest CVSS found
priorityPriority_sseverityCRITICAL/HIGH/MEDIUM/LOW/INFO
threat_typesThreatTypes_sthreat_types_csvClassified threat categories
phishing_riskPhishingRisk_bphishing_riskSPF+DMARC both missing/invalid
blacklistedBlacklisted_bblacklistedActive on Spamhaus/URLhaus
cve_idsCVEList_scve_idsComma-separated CVE IDs
software_namesSoftwareStack_ssoftware_namesDetected software products
email_security_scoreEmailSecurityScore_demail_security_score0=none, 3=SPF+DMARC+DKIM all present
failed_checksAttackVectors_sfailed_checks_csvCheck names that returned critical/warning
countryCountry_scountryISO-2 country code
domain_age_daysDomainAgeDays_ddomain_age_daysDays since domain registration
waf_detectedWAFDetected_bwaf_detectedWAF/CDN in front of domain
compliance_flagComplianceFlag_s"NIS2-Art21" when risk ≥ 70

NIS2 Compliance Findings

Pull per-article NIS2 findings for a domain via GET /domains/{id}/nis2. Each finding includes the article reference, pass/fail, and remediation guidance — import directly into Sentinel workbooks or Splunk ES compliance dashboards.

Need Help?

For enterprise integration support or custom SIEM connectors, contact sales@swarmhawk.com or open a ticket from the Contact page.

Intelligence Feeds

SwarmHawk enriches every scan with multiple external threat intelligence sources — several of which are completely free with no API key required. This section documents each feed, its coverage, and how to enable it.

Free feeds active by default: CISA KEV, EPSS, OSV.dev, BGP/ASN via BGPView, and Certstream CT streaming require no API key and are enabled automatically on every instance. SecurityTrails and Censys have generous free tiers and require one-time registration.
FeedWhat it addsCostEnv var required
CISA KEVBoosts risk to 95 for any CVE actively exploited in the wildFree, no key
EPSSExploit probability score (0–1) per CVEFree, no key
OSV.devExtra CVEs for 24 package ecosystems (npm, PyPI, Go, Maven…)Free, no key
CertstreamReal-time domain registration from CT logs (seconds vs 24h batch)Free, no keyCERTSTREAM_ENABLED
BGP/ASNOrg-wide IP prefix expansion → reverse DNS → new domainsFree, no key
Subdomain enumcrt.sh + HackerTarget + VirusTotal passive DNSFree (VT: 500/day)VIRUSTOTAL_API_KEY (optional)
CensysInternet-wide host scan data, open ports, bannersFree 250 q/dayCENSYS_API_ID + CENSYS_API_SECRET
NucleiActive CVE validation (confirms fingerprinted vulns are real)Free, open sourceNUCLEI_ENABLED
SSE AlertsReal-time push to dashboard for risk ≥ 80 findingsBuilt-in

CISA KEV — Known Exploited Vulnerabilities

The CISA Known Exploited Vulnerabilities catalog is maintained by the US Cybersecurity and Infrastructure Security Agency. It lists every CVE that has been confirmed as actively exploited in the wild — not just theoretically dangerous, but actually used in real attacks right now.

What SwarmHawk does with it

Why this matters

A CVE with CVSS 7.5 is "high severity." A CVE with CVSS 7.5 that is in the KEV catalog means attackers have automated exploit tools for it and are using them in active campaigns right now. SwarmHawk treats these categorically differently.

GET https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json # Free, no API key, updated daily # ~1,200+ entries as of 2026

EPSS — Exploit Prediction Scoring System

EPSS (Exploit Prediction Scoring System) is published by FIRST.org and assigns every CVE a probability from 0.0 to 1.0 indicating how likely it is to be exploited in the wild within 30 days. Unlike CVSS (which measures severity), EPSS measures likelihood.

EPSS thresholds in SwarmHawk

EPSS ScoreRisk BoostInterpretation
≥ 0.70risk_score → max(current, 90)Very high exploit probability — act within 24h
≥ 0.50risk_score → max(current, 80)High probability — patch within 72h
< 0.50No boostStandard CVSS scoring applies

EPSS scores are fetched in bulk (up to 100 CVEs per API call) and cached for 24 hours. The API is free with no key required.

OSV.dev — Open Source Vulnerability Database

OSV.dev is Google's open-source vulnerability database covering 17+ package ecosystems. NVD alone covers C/C++ and vendor software well but routinely lags 30–90 days behind for npm, PyPI, Go, Maven, and Rust packages. OSV.dev bridges that gap.

Ecosystems covered by SwarmHawk

npm: jquery, react, angular, vue, express, lodash, axios PyPI: django, flask, requests, Pillow Maven: log4j-core, spring-core, struts2-core Packagist: wordpress, drupal/core, laravel/framework, symfony, opencart, magento, typo3 RubyGems: rails, devise Go: gin-gonic/gin, beego

During every scan, SwarmHawk takes the software fingerprint (e.g., WordPress 6.4.1) and queries OSV.dev for all known vulnerabilities in that version. CVEs found in OSV that are not yet in NVD are added to the result with "source": "osv".

Certstream — Real-Time CT Log Streaming

Certificate Transparency logs record every TLS certificate issued. Certstream streams these in real-time via a WebSocket feed. New domains appear in SwarmHawk's discovery queue within seconds of certificate issuance — vs the previous 24-hour batch via crt.sh.

How it works

Practical impact

A threat actor registers a phishing domain (e.g., secure-yourbank-login.com) and gets a Let's Encrypt cert. SwarmHawk sees it within 10–30 seconds via Certstream and begins scanning. Previously this would take up to 24 hours.

Configuration

Env varDefaultDescription
CERTSTREAM_ENABLEDtrueSet false to disable the WebSocket worker

BGP / ASN Expansion

Given a root domain, SwarmHawk can discover every other FQDN in the same organisation's IP space by following the chain: domain → IP → ASN → all IP prefixes → reverse DNS → new FQDNs.

How it works (BGPView API, free, no key)

1. Resolve domain to IP: example.com → 93.184.216.34 2. Look up ASN via BGPView: 93.184.216.34 → ASN15133 "Edgecast Inc" 3. Get all IP prefixes for ASN: 93.184.216.0/24, 93.184.217.0/24, … 4. Reverse DNS each /20+ prefix: → mail.example.com, api.example.com, cdn.example.com 5. Ingest new FQDNs into queue: source = "asn_expansion"

Prefixes wider than /20 (more than 4,096 IPs) are skipped to avoid spending excessive time on large CDN ranges. The function is capped at 300 new domains per root domain per run.

Use case

Enterprise customers can call run_asn_discovery_job(["yourcompany.com"]) to discover every IP your organisation routes — including cloud assets, legacy servers, and acquired company infrastructure that never appeared in CT logs.

Subdomain Enumeration — Free Multi-Source

SwarmHawk enumerates subdomains using three completely free sources in parallel. SecurityTrails was originally planned here but was acquired by Recorded Future and now costs $11k–$70k/year — so SwarmHawk uses better free alternatives instead.

SourceMethodCostKey requiredCoverage
crt.shCertificate Transparency logsFreeNo~80–90% of subdomains
HackerTargetDNS hostsearch APIFreeNo~50–70% of subdomains
VirusTotalPassive DNS databaseFree 500/dayVIRUSTOTAL_API_KEY~60–80% of subdomains

Setup

crt.sh and HackerTarget work automatically with zero configuration.

VirusTotal (optional, adds coverage): Register free at virustotal.com → API Key → add to Render as VIRUSTOTAL_API_KEY=your_key

Example output

Input: example.com crt.sh → mail.example.com, staging.example.com, dev.example.com, vpn.example.com, api.example.com, cdn.example.com … HackerTarget → admin.example.com, legacy.example.com … VirusTotal → beta.example.com, old.example.com … Merged & deduped: 23 unique subdomains → queued for Tier 1 scan

Discovered subdomains are ingested with source = "securitytrails" (legacy field name preserved) and scanned by the next Tier 1 batch run.

Censys — Internet-Wide Host Scan Data

Censys continuously scans the entire IPv4 internet and indexes the results. For any IP or organisation, you can retrieve open ports, service banners, TLS certificates, and autonomous system information — without touching the target.

Free community tier

What SwarmHawk uses it for

Example host record

{ "ip": "93.184.216.34", "org": "Edgecast Inc", "asn": 15133, "open_ports": [80, 443, 8080], "services": [ {"port": 443, "name": "HTTPS", "banner": "nginx/1.24.0"}, {"port": 8080, "name": "HTTP", "banner": "Apache/2.4.58"} ] }

Nuclei — Active Vulnerability Validation

Nuclei is an open-source vulnerability scanner from ProjectDiscovery. The full template library has 11,000+ entries; SwarmHawk uses the ~3,000 templates applicable to unauthenticated external scanning — CVEs, exposed admin panels, misconfigurations, and default credentials. SwarmHawk uses it to actively confirm whether a vulnerability is exploitable, eliminating false positives from passive NVD version-range lookups.

How SwarmHawk uses Nuclei

Installation

# Install nuclei (Go required) go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest # Or download binary from GitHub Releases # https://github.com/projectdiscovery/nuclei/releases # Update templates nuclei -update-templates # Verify nuclei -version

Configuration

Env varDefaultDescription
NUCLEI_ENABLEDtrueSet false to disable even if nuclei is installed

If the nuclei binary is not in PATH, SwarmHawk silently skips active scanning — all other intelligence feeds continue to work normally.

Real-Time Alerts — Server-Sent Events

SwarmHawk's dashboard receives push notifications for new high-risk findings via Server-Sent Events (SSE) — a persistent HTTP connection over which the server can push data at any time without polling.

Endpoint

GET /stream/alerts?min_risk=80 Authorization: Bearer <session_token> # Returns text/event-stream # Events: {"type":"alert","domain":"example.com","risk_score":95,"priority":"CRITICAL",...} # Heartbeat every 25s: {"type":"heartbeat"}

JavaScript client example

const token = localStorage.getItem('swarmhawk_token'); const es = new EventSource( `https://swarmhawk.com/api/stream/alerts?min_risk=80` ); // Note: EventSource doesn't support custom headers natively. // Use the token as a query param for browser clients, or use // fetch + ReadableStream for header-based auth. es.onmessage = (e) => { const event = JSON.parse(e.data); if (event.type === 'alert') { console.log(`🚨 ${event.domain} — risk ${event.risk_score} (${event.priority})`); // Update UI, show toast notification, trigger sound, etc. } }; es.onerror = () => { // Browser auto-reconnects on error console.log('SSE reconnecting…'); };

Event payload fields

FieldTypeDescription
typestring"alert" or "heartbeat"
domainstringThe domain that triggered the alert
risk_scoreinteger0–100
prioritystringCRITICAL / HIGH / MEDIUM
max_cvssfloatHighest CVSS score among detected CVEs
countrystringISO-2 country code
kev_cvesarrayCVEs present in CISA KEV (empty if none)
epss_maxfloatHighest EPSS probability among CVEs
timestampISO stringWhen the finding was recorded

OSINT Intelligence Checks

SwarmHawk now includes four open-source intelligence (OSINT) checks powered by public APIs and the Agent-Reach intelligence framework. These run automatically on every scan alongside the 23 standard checks — no extra configuration needed unless you want higher GitHub rate limits.

27 total checks as of April 2026: The 4 OSINT checks join the existing 23 standard checks. They run in parallel and appear in the same grouped sections in the dashboard report and PDF export.
CheckDashboard SectionWhat it findsScore impactEnv var
github_leaksActive ThreatsPublic GitHub code containing domain + credential keywordsUp to +20GITHUB_TOKEN (optional)
threat_feedsActive ThreatsCISA KEV matches against detected software stackUp to +18
github_pocConfirmed VulnerabilitiesPublic PoC/exploit repos for detected CMS/server/frameworkUp to +15GITHUB_TOKEN (optional)
contact_discoveryInfrastructureRFC 9116 security.txt presence + security contact via Jina Reader+3 to +5

GitHub PoC Hunter (github_poc)

After fingerprinting the domain's tech stack (server header, X-Powered-By, WordPress/Drupal/Joomla signals, and meta generator tags), SwarmHawk searches GitHub's repository index for public proof-of-concept exploit code targeting those exact products and versions.

How it works

What this means for you

Most vulnerability scanners tell you a CVE exists. SwarmHawk tells you whether there is public working exploit code for it on GitHub right now — the difference between a theoretical risk and something an attacker can deploy in minutes.

Rate limits & GitHub Token

Without a GitHub token, the GitHub Search API allows 10 requests/minute. Each github_poc check uses up to 3 requests (one per detected software component). For production deployments scanning many domains, add a GitHub personal access token:

# Render environment variable GITHUB_TOKEN=ghp_your_token_here # Free GitHub account → Settings → Developer settings → Personal access tokens # Scopes needed: none (public read is sufficient — do not add any scopes) # Rate limit with token: 30 search requests/minute

Contact Discovery (contact_discovery)

This check determines whether the domain's owner has published a security contact — a critical prerequisite for responsible disclosure and fast incident response. It follows a two-step discovery process.

Step 1 — RFC 9116 security.txt

SwarmHawk checks both canonical locations for a security.txt file:

https://example.com/.well-known/security.txt ← preferred (RFC 9116) https://example.com/security.txt ← legacy fallback

If found with a valid Contact: field, the check returns OK and extracts all contact methods (email, URL, phone). An additional warning is shown if the Expires: field is missing (required by RFC 9116).

Step 2 — Jina Reader web scan

If no security.txt is found, SwarmHawk uses Jina Reader (https://r.jina.ai/) to fetch a plain-text version of the domain's /contact, /about, /security, and homepage, then scans for email addresses using a regex pattern. Found emails are surfaced as a WARNING alongside a recommendation to publish a proper security.txt.

Why this is a security check

GDPR Article 33 requires organisations to report data breaches within 72 hours. NIS2 Article 23 mandates early warning within 24 hours of a significant incident. If researchers or threat intelligence teams cannot find a contact for your domain, they have no way to alert you — and attackers can stay undetected longer.

CISA KEV Direct Matching (threat_feeds)

While SwarmHawk already boosts risk scores for KEV CVEs found during vulnerability scanning, the threat_feeds check takes a different approach: it fingerprints the live software stack and directly looks up each detected product against all 1,200+ CISA KEV entries — without needing a prior CVE detection step.

Why this is different from the standard CVE check

cve checkthreat_feeds check
Requires NVD version matchYes — needs exact version stringNo — product name match is sufficient
SourceNVD + SHODAN + OSVCISA KEV catalog directly
FocusAll CVEs (severity-ranked)Only actively exploited vulns
Ransomware flagVia KEV boost post-scanShown inline per match

Severity thresholds

Performance

The KEV catalog (~1.2 MB JSON) is fetched once and cached in-process for 6 hours. Each scan performs the matching locally with zero additional network requests.

GitHub Credential Leak Scan (github_leaks)

This check searches all publicly indexed GitHub code for files that mention your domain alongside credential-related keywords. It catches accidental commits of configuration files, .env files, database connection strings, and API credentials — often before the organisation itself is aware.

Search query

"yourdomain.com" password OR secret OR api_key OR token OR credential # Examples of what gets caught: DB_URL=postgres://user:password@db.yourdomain.com/prod API_BASE=https://api.yourdomain.com Authorization: Bearer sk-live-... SMTP_HOST=mail.yourdomain.com SMTP_PASS=hunter2

Severity thresholds

False positives

The check flags any file containing the domain name with credential keywords — it cannot read file contents via the Search API and cannot confirm whether the values are real credentials or placeholder examples. Always review each linked file before taking action. A finding here means "investigate urgently", not automatically "you are breached".

GitHub Token

The GitHub Code Search API requires authentication for production use. Without a token, searches may return HTTP 403 after 10 requests/minute, at which point the check returns an informational result rather than a false negative. Add GITHUB_TOKEN to your Render environment variables to enable reliable scanning.

FAQ

How long does the first scan take?

The Tier 1 scan (DNS, SSL, basic reachability) completes in under 60 seconds. The deeper Tier 2 scan (port scan, breach data, full TLS analysis) typically takes 3–8 minutes and runs automatically in the background.

Does SwarmHawk scan subdomains?

Yes. When you add a root domain like example.com, SwarmHawk queries certificate transparency logs to discover subdomains and adds them to the scan queue. You'll see them appear in your domain list automatically.

How do I prove domain ownership?

Currently SwarmHawk does not require ownership proof for individual domains on paid plans. For Enterprise accounts scanning large portfolios, a verification step may be required — contact us to discuss.

Is my scan data private?

Yes. Your domain list and scan results are private to your account. Scan results are never shared with other users or used to populate any public dataset. See our Privacy Policy for full details.

What happens if a scan fails?

If a domain is unreachable (e.g. DNS fails), SwarmHawk marks the scan as error and retries automatically on the next scan cycle. Persistent failures are flagged in your dashboard as a critical finding: "Domain unreachable."

Can I whitelist SwarmHawk's scanner IPs?

Yes. Contact support to receive the current list of scanner egress IPs. This is useful if your infrastructure blocks external scanners or if you want to ensure SwarmHawk's requests are never rate-limited by your firewall.

How do I cancel my subscription?

Go to Account → Billing → Manage Subscription. You can cancel at any time. Your plan remains active until the end of the current billing period, then drops to Free tier.

I'm a hosting provider. How does the Bulk Feed work?

Use GET /feed/domains with your admin API key to pull scan results for all domains in your account. Add ?since=2026-03-01T00:00:00Z to pull only results updated after a given timestamp — ideal for incremental sync into your own database or dashboard.

Where can I get support?

Email hello@swarmhawk.com, open a ticket from the Account tab, or check the Contact page. Enterprise accounts have a dedicated Slack channel and a named support engineer.


Last updated March 2026 · swarmhawk.com · Privacy · Terms