Fingerprint Mode
DNS fingerprint expansion mode (--mode fingerprint) discovers domains by shared DNS infrastructure rather than certificate organization names. Designed for companies using DV (Domain Validation) certificates where CT org search returns zero results.
When to use
Standard discovery relies on the Organization (O=) field in TLS certificates. Companies using DV certificates have no org name in their certs, making the primary CT org search blind. This is common among:
- Insurtech companies (Lemonade, Hippo, Next Insurance)
- Startups and digital-first businesses
- Companies using Let's Encrypt, Cloudflare, or other DV-only CAs
If domain-scout only finds the seed domain in default mode, try fingerprint mode.
How it works
Seed Domain
|
v
Extract DNS Fingerprint (MX, NS, TXT)
|
v
Existing strategies still run:
- Strategy B: Seed SAN expansion (works with DV certs)
- Strategy C: Domain guessing
- Strategy D: Subsidiary expansion (if configured)
- Strategy A: CT org search (SKIPPED - useless for DV certs)
|
v
For each candidate domain:
Extract its DNS fingerprint
Compare against seed fingerprint
Add evidence for matching signals
|
v
Score using existing corroboration tiers
Fingerprint signals
MX tenant ID (strong signal)
Enterprise email providers assign per-customer MX hostnames. If two domains share the same MX tenant, they almost certainly belong to the same organization.
Supported providers:
| Provider | MX pattern | Example |
|---|---|---|
| Proofpoint | mxa-{id}.gslb.pphosted.com |
mxa-002d0c01.gslb.pphosted.com |
| Microsoft 365 | {tenant}.mail.protection.outlook.com |
contoso-com.mail.protection.outlook.com |
| Barracuda | {tenant}.ess.barracudanetworks.com |
acmecorp.ess.barracudanetworks.com |
| IronPort | {tenant}.iphmx.com |
acmecorp.iphmx.com |
| FireEye/Trellix | {tenant}.fireeyecloud.com |
acmecorp.fireeyecloud.com |
Providers intentionally excluded:
- Google Workspace — all customers share the same MX (
aspmx.l.google.com) - Mimecast — inbound MX is shared infrastructure (
us-smtp-inbound-1.mimecast.com), not per-tenant
NS zone (moderate signal, filtered)
Shared nameserver zones can indicate common DNS management. However, large DNS providers (Cloudflare, AWS Route53, Azure DNS) host millions of unrelated domains, so these are filtered out.
Blocked NS zones: cloudflare.com, awsdns-*.com, azure-dns.com, google.com, domaincontrol.com (GoDaddy), nsone.net, and others.
Only custom/private NS zones produce matching signals.
SPF includes (moderate signal, filtered)
Shared SPF include records can indicate common email infrastructure. Common SaaS providers are filtered out.
Blocked SPF includes: spf.protection.outlook.com, _spf.google.com, sendgrid.net, amazonses.com, mailgun.org, zendesk.com, and others.
Scoring
Fingerprint signals map to existing corroboration tiers:
- MX tenant match is treated as equivalent to
rdap_registrant_match— a strong org-level signal that triggers corroboration boosts - NS zone + SPF matches contribute to multi-source count but are not strong enough standalone
Usage
# Basic fingerprint mode
domain-scout --name "Shelter Insurance" --seed shelterinsurance.com --mode fingerprint
# JSON output for programmatic use
domain-scout --name "Company" --seed company.com --mode fingerprint -o json
Fingerprint mode automatically implies --deep (GeoDNS) and sets the timeout to at least 180 seconds.
Configuration
| Config field | Default | Description |
|---|---|---|
discovery_mode |
"default" |
Set to "fingerprint" to enable |
fp_candidate_limit |
200 |
Max candidates to fingerprint-verify |
from domain_scout.config import ScoutConfig
from domain_scout.scout import Scout
config = ScoutConfig(
discovery_mode="fingerprint",
deep_mode=True, # CLI sets this automatically; Python API does not
total_timeout=180, # CLI sets this automatically; Python API does not
fp_candidate_limit=100,
)
scout = Scout(config=config)
result = scout.discover(company_name="Shelter Insurance", seed_domain="shelterinsurance.com")
Example: Shelter Insurance
Shelter Insurance uses Proofpoint for email. Default mode finds 3 domains; fingerprint mode finds 5:
=== FINGERPRINT MODE ===
amshieldinsurance.com 0.95 [ct_org_match, fp:mx_tenant, shared_infra]
^ Shares proofpoint MX tenant 'proofpoint:002d0c01' with seed
shelterinsurance.com 0.90 [ct_org_match, ct_seed_subdomain, dns_guess]
sayinsurance.com 0.90 [ct_org_match, fp:mx_tenant]
^ Shares proofpoint MX tenant 'proofpoint:002d0c01' with seed
shelterre.com 0.90 [ct_org_match, shared_infra]
cloudflaressl.com 0.80 [ct_san_expansion]
Note: ct_org_match appears because Shelter's seed certs do contain org names (discovered via seed expansion, not CT org search which is skipped).
All findings verified: AmShield is Shelter's commercial subsidiary (est. 2014), Say Insurance was a former Shelter brand, and Shelter Re is their reinsurance arm (est. 1986).
Limitations
- Requires at least one seed domain with a parseable MX tenant for best results
- Companies using Google Workspace or other shared-MX providers won't benefit from MX tenant matching (NS zone and SPF signals may still help)
- Candidate domains must already be discovered by other strategies (SAN expansion, domain guessing) — fingerprint mode verifies and boosts them, it doesn't generate new candidates from scratch
- Shodan reverse DNS for candidate generation is planned but not yet implemented (see #110)