Add SpoofSentry integration#2963
Conversation
…d takedown events SpoofSentry by DomainSeal sends domain security events to Datadog via the Logs API. Includes: - Integration tile with manifest and classifier tags - Pre-built dashboard (7 widgets: event counts, severity timeseries, threat toplist, domain breakdown, takedown activity, log stream) - Log pipeline with attribute remapping (eventType, severity, domain, tenantId) - Setup documentation Event types: DMARC failures, spoofing campaigns, lookalike domains, DNS enforcement changes, takedown orchestration lifecycle. Severity levels: critical, high, medium, low, info Sourcetype: spoofsentry (ddsource tag) Auth: DD-API-KEY header Multi-site: datadoghq.com (US), datadoghq.eu (EU)
|
Added DOCS-13959 to track docs review |
|
@netallion Your organization will need to onboard as a Technology Partner. Please reach out to ecosystems@datadoghq.com and reference this PR. |
| "tile": { | ||
| "overview": "README.md#Overview", | ||
| "configuration": "README.md#Setup", | ||
| "uninstallation": "README.md#Uninstallation", |
There was a problem hiding this comment.
The manifest references README.md#Uninstallation, but the README doesn't include an ## Uninstallation section. Please add one. For a log-based integration, this can be brief — for example:
## Uninstallation
Remove the SpoofSentry integration from **Integrations > Integrations**.
| "uninstallation": "README.md#Uninstallation", | ||
| "support": "README.md#Support", | ||
| "changelog": "CHANGELOG.md", | ||
| "description": "Ingest DMARC monitoring, spoofing detection, and takedown events from SpoofSentry", |
There was a problem hiding this comment.
This description is 81 characters, which exceeds the 80-character limit for tile descriptions. Trim slightly — for example:
| "description": "Ingest DMARC monitoring, spoofing detection, and takedown events from SpoofSentry", | |
| "description": "DMARC monitoring, spoofing detection, and takedown events from SpoofSentry", |
|
|
||
| ### Log Pipeline | ||
|
|
||
| A log pipeline is included that: |
There was a problem hiding this comment.
| A log pipeline is included that: | |
| The integration includes a log pipeline that: |
|
|
||
| ### Logs | ||
|
|
||
| SpoofSentry sends domain security events as JSON logs via the Datadog Logs API. |
There was a problem hiding this comment.
| SpoofSentry sends domain security events as JSON logs via the Datadog Logs API. | |
| SpoofSentry sends domain security events as JSON logs through the Datadog Logs API. |
| ## Support | ||
|
|
||
| - Email: hello@spoofsentry.com | ||
| - Documentation: [https://spoofsentry.com/docs/integrations/datadog](https://spoofsentry.com/docs/integrations/datadog) | ||
| - Status: [https://spoofsentry.com/status](https://spoofsentry.com/status) |
There was a problem hiding this comment.
The Support section for integrations-extras typically points directly to the creator's support contact. The Documentation: and Status: list items are non-standard here — consider simplifying to match the convention used by other integrations, and folding the docs link into the Setup section if it's useful there:
| ## Support | |
| - Email: hello@spoofsentry.com | |
| - Documentation: [https://spoofsentry.com/docs/integrations/datadog](https://spoofsentry.com/docs/integrations/datadog) | |
| - Status: [https://spoofsentry.com/status](https://spoofsentry.com/status) | |
| ## Support | |
| Need help? Contact [SpoofSentry support](mailto:hello@spoofsentry.com). |
| { | ||
| "id": 1, | ||
| "definition": { | ||
| "title": "Security Events (24h)", |
There was a problem hiding this comment.
The (24h) suffix implies a fixed time window, but this widget uses the dashboard's time selector. Consider removing it or renaming to reflect the dynamic range, for example "Security Events".
| { | ||
| "id": 2, | ||
| "definition": { | ||
| "title": "Critical & High Threats (24h)", |
There was a problem hiding this comment.
Same as above — the (24h) suffix is misleading since the time range is controlled by the dashboard selector. Consider "Critical & High Threats".
| "indexes": ["*"], | ||
| "compute": { "aggregation": "count" }, | ||
| "group_by": [ | ||
| { "facet": "host", "limit": 10, "sort": { "aggregation": "count", "order": "desc" } } |
There was a problem hiding this comment.
The "Events by Domain" widget groups by host, but the log pipeline maps domain to @network.destination.domain. Please verify that host is populated with the monitored domain — if not, this facet should likely be @network.destination.domain or @domain.
domalessi
left a comment
There was a problem hiding this comment.
Editorial review — SpoofSentry integration
Thanks for the submission! The integration looks well structured overall. A few things to address before this can be approved:
Blocking
- The manifest references
README.md#Uninstallationbut the README has no## Uninstallationsection. Add a brief one (see inline comment onmanifest.json).
Must fix
- Missing Validation subsection: Add a
### Validationstep under## Setupexplaining how users can confirm the integration is working — for example, by navigating to Logs and filtering bysource:spoofsentry. - Missing Data Collected subsections: The README is missing
### Metrics,### Service Checks, and### Eventsunder## Data Collected. Each should include a statement such as "The SpoofSentry integration does not include any metrics." See the standard README template for reference.
See inline comments for additional must-fix and suggestion items.
| 1. Log in to [SpoofSentry](https://spoofsentry.com) | ||
| 2. Go to **Settings > Integrations > SIEM** | ||
| 3. Select **Datadog** | ||
| 4. Enter your **Datadog API key** (from Datadog > Organization Settings > API Keys) | ||
| 5. Select your **Datadog site** (US: `datadoghq.com`, EU: `datadoghq.eu`) | ||
| 6. Click **Test Connection** to verify |
There was a problem hiding this comment.
| 1. Log in to [SpoofSentry](https://spoofsentry.com) | |
| 2. Go to **Settings > Integrations > SIEM** | |
| 3. Select **Datadog** | |
| 4. Enter your **Datadog API key** (from Datadog > Organization Settings > API Keys) | |
| 5. Select your **Datadog site** (US: `datadoghq.com`, EU: `datadoghq.eu`) | |
| 6. Click **Test Connection** to verify | |
| 1. Log in to [SpoofSentry](https://spoofsentry.com). | |
| 2. Go to **Settings > Integrations > SIEM**. | |
| 3. Select **Datadog**. | |
| 4. Enter your **Datadog API key** (from Datadog > Organization Settings > API Keys). | |
| 5. Select your **Datadog site** (US: `datadoghq.com`, EU: `datadoghq.eu`). | |
| 6. Click **Test Connection** to verify, |
|
|
||
| ### In Datadog | ||
|
|
||
| Events appear automatically in **Logs** with `source:spoofsentry`. The pre-built dashboard is installed with this integration. |
There was a problem hiding this comment.
| Events appear automatically in **Logs** with `source:spoofsentry`. The pre-built dashboard is installed with this integration. | |
| Events appear automatically in **Logs** with `source:spoofsentry`. A prebuilt dashboard is installed with this integration. |
|
|
||
| ### In SpoofSentry | ||
|
|
||
| 1. Log in to [SpoofSentry](https://spoofsentry.com) |
There was a problem hiding this comment.
Integration READMEs conventionally use reference-style links (e.g., [SpoofSentry][1] with [1]: https://spoofsentry.com at the bottom of the file) rather than inline URLs. Consider converting all links in this README to that format for consistency with the standard template.
|
|
||
| | Field | Description | | ||
| |-------|-------------| | ||
| | `eventType` | Event classification (e.g., `SPOOF_THREAT_DETECTED`) | |
There was a problem hiding this comment.
| | `eventType` | Event classification (e.g., `SPOOF_THREAT_DETECTED`) | | |
| | `eventType` | Event classification (for example, `SPOOF_THREAT_DETECTED`) | |
|
|
||
| ### Tags | ||
|
|
||
| All events include these tags: |
There was a problem hiding this comment.
| All events include these tags: | |
| All events include the following tags: |
domalessi
left a comment
There was a problem hiding this comment.
A few inline suggestions but nothing blocking. Approved!
|
|
||
| The integration includes a log pipeline that: | ||
| - Maps `eventType` to `evt.name` | ||
| - Maps `severity` to log status |
There was a problem hiding this comment.
Is "log status" an attribute name? Ideally, this bullet would be parallel with the first and third bullets which include an attribute name.
| { | ||
| "id": 1, | ||
| "definition": { | ||
| "title": "Security Events", |
There was a problem hiding this comment.
| "title": "Security Events", | |
| "title": "Security events", |
| { | ||
| "id": 2, | ||
| "definition": { | ||
| "title": "Critical & High Threats", |
There was a problem hiding this comment.
| "title": "Critical & High Threats", | |
| "title": "Critical and high threats", |
| { | ||
| "id": 3, | ||
| "definition": { | ||
| "title": "Events by Severity", |
There was a problem hiding this comment.
| "title": "Events by Severity", | |
| "title": "Events by severity", |
| { | ||
| "id": 4, | ||
| "definition": { | ||
| "title": "Events by Type", |
There was a problem hiding this comment.
| "title": "Events by Type", | |
| "title": "Events by type", |
| { | ||
| "id": 5, | ||
| "definition": { | ||
| "title": "Events by Domain", |
There was a problem hiding this comment.
| "title": "Events by Domain", | |
| "title": "Events by domain", |
| { | ||
| "id": 6, | ||
| "definition": { | ||
| "title": "Takedown Activity", |
There was a problem hiding this comment.
| "title": "Takedown Activity", | |
| "title": "Takedown activity", |
| { | ||
| "id": 7, | ||
| "definition": { | ||
| "title": "Recent Security Events", |
There was a problem hiding this comment.
| "title": "Recent Security Events", | |
| "title": "Recent security events", |
| @@ -0,0 +1,160 @@ | |||
| { | |||
| "title": "SpoofSentry - Domain Security Overview", | |||
There was a problem hiding this comment.
| "title": "SpoofSentry - Domain Security Overview", | |
| "title": "SpoofSentry: Domain Security Overview", |
What does this PR do?
Adds a new integration for SpoofSentry by DomainSeal — a DMARC monitoring, domain spoofing detection, and automated takedown platform.
SpoofSentry sends domain security events to Datadog via the Logs API (HTTP intake).
Includes:
Motivation
SpoofSentry protects domains from email spoofing, phishing impersonation, and lookalike domain abuse. Security teams using Datadog need these events alongside their other security data for centralized analysis, correlation, and alerting.
Review checklist
Log Pipeline Description
The log pipeline (
assets/logs/spoofsentry.yaml) includes these processors:eventType→evt.name(event classification)severity→status(log level mapping)domain→network.destination.domain(target domain)tenantId→usr.id(customer tenant)Additional Notes
spoofsentry(ddsource tag)