Ricerca nei log dei certificati

Ogni volta che viene emesso un certificato per uno dei tuoi nomi host, finisce in un registro pubblico che chiunque può leggere. Questa ricerca legge quel registro per un dominio, elenca i nomi che espone e verifica nel DNS i più recenti.

Oppure prova wordpress.org, python.org

Un registro che chiunque può leggere

Un certificato TLS viene emesso da un’autorità di certificazione (CA), e un browser si fida di qualsiasi certificato firmato da una qualunque delle circa cento autorità nella sua lista. Per anni questo ha significato che un’autorità negligente o compromessa poteva emettere un certificato valido per il dominio della tua banca senza che nessuno se ne accorgesse.

Certificate Transparency (CT) chiude questa falla. Le autorità devono inviare ogni certificato a log pubblici in sola aggiunta, e da aprile 2018 Chrome rifiuta i certificati che non portano una prova di registrazione. Safari applica la stessa regola. I log sono gestiti da aziende come Google, Cloudflare, DigiCert, Sectigo e Let’s Encrypt, e chiunque può consultarli.

Per te, questo vale nei due sensi. Puoi vedere ogni certificato mai emesso per il tuo dominio, compresi quelli che non hai mai chiesto. Lo stesso vale per chiunque altro, insieme a ogni nome host scritto in quei certificati.

Cosa fa la ricerca con il log

Interroghiamo crt.sh, un indice pubblico dei log CT, per il dominio registrato e tutto ciò che sta sotto. I risultati vengono conservati per un’ora. Poi li esaminiamo così:

  • I certificati vengono contati una volta sola. Ogni emissione compare due volte nei log, come pre-certificato e come certificato finale. Le voci con lo stesso emittente e lo stesso numero di serie vengono unite.
  • I sottodomini vengono raccolti dai nomi presenti in ogni certificato e ordinati per data del loro certificato più recente. I wildcard come *.example.com sono elencati a parte.
  • I 40 nomi più recenti vengono risolti nel DNS per vedere se portano ancora da qualche parte.
  • Gli emittenti vengono conteggiati, in totale e per gli ultimi 90 giorni, e confrontati con il tuo record CAA se ne pubblichi uno.

Quando un dominio ha una storia molto lunga, crt.sh ne restituisce solo una parte o va in timeout. La pagina te lo segnala e ripiega sui certificati ancora validi.

CNAME orfani e takeover di sottodomini

Mettiamo che status.example.com fosse un tempo un CNAME verso example.herokuapp.com. Qualcuno ha eliminato l’applicazione e si è dimenticato del record DNS. L’alias ora punta a un nome libero da rivendicare, e chiunque crei un’applicazione con quel nome sulla stessa piattaforma riceve il traffico del tuo sottodominio. Da lì può servire una pagina di login sotto il tuo dominio e ottenere un certificato valido per essa.

La colonna di stato mostra cosa dice oggi il DNS.

Si risolve
Il nome ha un indirizzo. Niente da fare.
Destinazione scomparsa (rosso)
Un CNAME verso una piattaforma nota per permettere di riusare nomi abbandonati, come GitHub Pages, Heroku, Azure, Amazon S3, Netlify o Shopify, e la destinazione restituisce NXDOMAIN. Trattalo come urgente.
Destinazione scomparsa (ambra)
Stessa situazione presso un servizio che non riconosciamo.
Scomparso / Nessun indirizzo
Il sottodominio stesso non esiste più. È innocuo, anche se il suo nome resta nei log.

La riparazione richiede un solo passaggio. Elimina il record CNAME, oppure ricrea la risorsa sulla piattaforma se il sottodominio ti serve ancora. E d’ora in poi, fai di «rimuovere il record DNS» una parte della chiusura di qualsiasi servizio in hosting.

Leggere la tabella degli emittenti

La maggior parte dei domini mostra una o due autorità. Let’s Encrypt e Google Trust Services compaiono spesso perché hosting e CDN chiedono loro i certificati in automatico. Un emittente viene segnato come Insolito in due casi. O ha emesso negli ultimi 90 giorni e non figura nel tuo record CAA, oppure non hai un record CAA e rappresenta al massimo due certificati su un dominio che ne ha dieci o più.

Insolito non significa ostile. Attivare una CDN, un site builder o un nuovo strumento per landing page spesso porta con sé una nuova autorità. Chiedi a chi gestisce quei servizi. Se nessuno sa spiegare il certificato, trova il suo numero di serie tramite il link crt.sh nell’ultima tabella e chiedi a quell’autorità di revocarlo.

Per limitare d’ora in poi chi può emettere, pubblica record CAA che nominano solo le autorità che usi:

example.com.  CAA  0 issue "letsencrypt.org"
example.com.  CAA  0 issue "pki.goog"

Vengono testati solo 40 nomi, e solo per una destinazione CNAME mancante. Alcune piattaforme possono essere sottratte anche quando la destinazione risponde ancora, e i nomi host coperti da un wildcard non compaiono mai nei log. Un risultato pulito qui non è un audit completo della tua zona DNS.

Domande frequenti

Posso rimuovere un sottodominio dai log di Certificate Transparency?

No. I log accettano solo aggiunte, e sono costruiti in modo che una cancellazione verrebbe notata. Considera che qualsiasi nome host inserito in un certificato pubblico resta pubblico per sempre.

Come trovo tutti i sottodomini di un dominio?

I log CT sono la fonte pubblica più completa, perché quasi ogni nome host HTTPS ha avuto un certificato a un certo punto. Mancano i nomi che hanno usato solo un certificato wildcard e quelli che non hanno mai servito HTTPS.

Perché ci sono centinaia di certificati per il mio dominio?

I certificati automatici durano 90 giorni o meno e vengono rinnovati circa ogni 60 giorni, per ogni nome host, e una CDN davanti al sito ne emette di propri in aggiunta. Un sito con cinque nomi host può produrre più di trenta certificati l’anno.

Come tengo i nomi host interni fuori dai log?

Usa un certificato wildcard, che registra solo *.example.com, oppure emetti i certificati interni da un’autorità privata di cui si fidano i tuoi dispositivi. Nei certificati pubblici, evita nomi descrittivi come vpn-admin o il nome di un prodotto non ancora lanciato.

Un certificato nei log significa che il sito è attivo?

No. Significa che qualcuno è riuscito a dimostrare il controllo di quel nome il giorno dell’emissione. La verifica DNS nella tabella dei sottodomini ti dice se il nome porta ancora da qualche parte.