CertaDNS
Skip to lesson

Assessing an Estate · lesson 1 of 3

A method you can run by hand

After this lesson you can

Assess any estate against every surface using public data and a fixed sequence.

Assumes you have read What to do with no budget.

An assessment is worth having only if somebody else can run it and get the same answer. That means a fixed sequence, public data, and a recorded output per domain — and it takes about fifteen minutes per domain by hand.

The sequence, by surface

D=example.com

# IDENTITY
dig +short TXT  $D | grep spf1
dig +short TXT  _dmarc.$D
for s in google selector1 selector2 s1 k1 fm1 dkim default; do
  dig +short TXT $s._domainkey.$D
done
curl -s https://rdap.org/domain/$D | jq -r '.status[]'
dig +short CAA  $D

# INTEGRITY
dig +short DS   $D @1.1.1.1
dig $D SOA @1.1.1.1 | grep -o 'flags:[^;]*'     # ad flag?
for ns in $(dig +short NS $D); do dig AXFR $D @$ns; done

# TRANSPORT
dig +short MX   $D
dig +short TXT  _mta-sts.$D
dig +short TXT  _smtp._tls.$D
mx=$(dig +short MX $D | sort -n | head -1 | awk '{print $2}')
dig +short TLSA _25._tcp.$mx

# PERCEPTION
dig +short TXT  default._bimi.$D
curl -s "https://crt.sh/?q=%25$D&output=json" | jq -r '.[].name_value' | sort -u

What to record per domain

SurfaceRecord
IdentitySPF terminal qualifier and lookup count; DMARC p, sp, np, pct, rua; DKIM selectors found and their state; lock status; CAA present or absent
IntegritySigned or not; ad flag from a validating resolver; AXFR refused on every nameserver
TransportMX present; MTA-STS mode; TLS-RPT present; TLSA present
PerceptionBIMI present; names disclosed in CT that you did not expect

Four surfaces, one row per domain, and every cell is a fact from a public query rather than a judgement. That is what makes it repeatable — the judgement happens afterwards, on a table anybody can regenerate.

At estate scale

Fifteen minutes per domain is fine for ten and not for two hundred. The sequence above scripts cleanly, and the output is a table rather than a narrative precisely so it can be generated. What does not script is the judgement: whether a domain should be sending at all, whether a selector is accounted for, whether an unexpected CT name is a takeover or a team you did not know about.

The method has to work by hand first

Any tool that runs this is running these queries. Knowing what it does means you can check its output, explain a finding it reports, and work an estate it does not cover — which is the difference between using a scanner and being able to assess a domain.

Try it on a real domain

Free, no account, public DNS only.

Last reviewed