Subdomain Enumeration: come individuare i sottodomini di un target

L’enumerazione dei sottodomini è un processo importante per la sicurezza informatica. Consiste nell’individuare tutti i sottodomini di un dominio e aiuta ad allargare la superficie d’attacco, individuare applicazioni nascoste e sottodomini dimenticati. In questo articolo, spiegheremo come enumerare i sottodomini di un dominio utilizzando diversi strumenti.

Amass

Amass è un tool di enumerazione dei sottodomini sviluppato da OWASP. Amass utilizza tecniche passive e attive per identificare i sottodomini di un dominio.

Per utilizzare Amass, è possibile utilizzare il seguente comando:

amass enum -passive -d example.com -o results.txt

Il comando sopra elencato utilizzerà una tecnica passiva per raccogliere informazioni sui sottodomini di example.com e li salverà nel file results.txt.

Sublist3r

Sublist3r è uno strumento di enumerazione dei sottodomini che utilizza varie fonti pubbliche per raccogliere informazioni sui sottodomini di un dominio.

Per utilizzare Sublist3r, è possibile utilizzare il seguente comando:

sublist3r -d example.com

Il comando sopra elencato utilizzerà Sublist3r per cercare i sottodomini di example.com.

Dnsmap

Dnsmap è uno dei tools più utilizzati per l’enumerazione dei domini. Esso esegue un attacco di forza bruta contro il dominio principale per verificare l’esistenza di più sottodomini. È possibile utilizzarlo con una lista di parole chiave personalizzata per aumentare la precisione della ricerca.

Esempio di utilizzo:

dnsmap target-domain.foo 
dnsmap target-domain.foo -w yourwordlist.txt -r /tmp/domainbf_results.txt 
dnsmap target-domain.foo -r /tmp/ -d 3000 
dnsmap target-domain.foo -r ./domainbf_results.txt

SubBrute

SubBrute è un tool di enumerazione dei domini preciso e accurato. Una delle caratteristiche più importanti è che non invia richieste direttamente al target. Questo tool è in grado di individuare sottodomini che altri strumenti non riescono a trovare.

Esempio di utilizzo:

python subbrute.py [options] obiettivo
python subbrute.py -p target_domain

Sonar

Sonar è uno strumento di enumerazione dei domini scritto in GO. Anche se lo utilizzo poco, ho riscontrato che a volte individua sottodomini che altri software non riescono a trovare.

Esempio di utilizzo:

sonar enum domain.com

Certificate Transparency

Certificate Transparency (CT) è uno standard di sicurezza su Internet e un framework open source per il monitoraggio e la verifica dei certificati digitali. CT crea un sistema di registri pubblici per registrare tutti i certificati emessi da CA pubblicamente affidabili, consentendo l’identificazione efficiente di certificati emessi per errore o in modo malevolo.

Per utilizzare il registro CT di crt.sh, è possibile utilizzare il seguente script:

#!/bin/sh

query="SELECT ci.NAME_VALUE NAME_VALUE FROM certificate_identity ci WHERE ci.NAME_TYPE = 'dNSName' AND reverse(lower(ci.NAME_VALUE)) LIKE reverse(lower('%.$1'));"

(echo $1; echo $query | \
    psql -t -h crt.sh -p 5432 -U guest certwatch | \
    sed -e 's:^ *::g' -e 's:^*\.::g' -e '/^$/d' | \
    sed -e 's:*.::g';) | sort -u

Il comando sopra elencato utilizzerà il registro CT di crt.sh per cercare i sottodomini di example.com.

MassDNS

MassDNS è un potente strumento di risoluzione dei nomi di dominio in grado di eseguire la risoluzione dei nomi di dominio in modo rapido e preciso.

Per utilizzare MassDNS, è possibile utilizzare il seguente comando:

./scripts/ct.py example.com | ./bin/massdns -r ./lists/resolvers.txt -o S -w results.txt

Il comando sopra elencato utilizzerà MassDNS per cercare i sottodomini di example.com.

DNSRecon

DNSRecon è uno strumento di scansione dei DNS progettato per automatizzare la ricerca di record DNS e identificare i servizi ospitati su un dominio. Questo tool è particolarmente utile quando il sito target ha DNS propri, poiché ci consente di esplorare i sottodomini e cercare potenziali vulnerabilità.

Ecco un esempio di come eseguire una scansione di DNSRecon:

dnsrecon -d example.com -t brt

In questo esempio, “-d” specifica il dominio da esaminare, mentre “-t brt” indica l’elenco di record DNS da cercare. L’opzione “-t brt” cerca i record DNS “brute force” come ad esempio “www”, “ftp”, “mail”, ecc.

Subject Alternate Name (SAN)

La Subject Alternative Name (SAN) è un’estensione di X.509 che consente di associare valori aggiuntivi a un certificato SSL. Questi valori includono indirizzi email, URI, nomi DNS, nomi di directory e altro ancora.

Per ottenere una lista dei nomi DNS associati a un certificato SSL, è possibile utilizzare il comando openssl s_client insieme alla pipe e al comando openssl x509 come segue:

true | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -text  | perl -l -0777 -ne '@names=/\bDNS:([^\s,]+)/g; print join("\n", sort @names);'

Rapid7 Forward DNS dataset

Il servizio in questione contiene un insieme di dati che rappresentano le risposte ai richieste DNS per tutti i nomi DNS noti dal progetto Sonar di Rapid7. Fino all’inizio di novembre 2017, tutte queste richieste erano per il record “ANY” con una richiesta di fallback A e AAAA se necessario. Dopo quella data, lo studio ANY rappresenta solo le risposte alle richieste ANY, e sono stati creati studi dedicati per le ricerche di record A, AAAA, CNAME e TXT con file appositamente denominati. Il file è un file compresso in formato GZIP contenente il nome, il tipo, il valore e il timestamp di qualsiasi record restituito per un determinato nome in formato JSON.

Brute Force Enumeration

La forza bruta è un metodo di enumerazione in cui si esegue una scansione di tutte le possibili combinazioni di nomi DNS per trovare nomi di sottodomini validi.

Di seguito sono riportati alcuni wordlist utili per la forza bruta:

  • Jhaddix’s all.txt
  • DNS Discovery di Daniel Miessler.
  • Commonspeak2

Per eseguire una scansione di forza bruta utilizzando Amass, è possibile utilizzare il comando seguente:

amass enum -brute -w subdomains.txt -d example.com -o results.txt

Per eseguire una scansione di forza bruta utilizzando Massdns, è possibile utilizzare il comando seguente:

./scripts/subbrute.py subdomains.txt example.com | ./bin/massdns -r ./lists/resolvers.txt -o S -w results.txt

Per eseguire una scansione di forza bruta utilizzando Gobuster, è possibile utilizzare il comando seguente:

gobuster dns -t 30 -w subdomains.txt -d example.com

DNS

DNS (Domain Name System) è un sistema di naming gerarchico per computer, servizi o qualsiasi risorsa collegata a Internet. Il sistema DNS traduce i nomi di dominio in indirizzi IP e viceversa.

Zone Transfer

La zona di trasferimento DNS è uno dei meccanismi per replicare i database DNS su server DNS.

Per effettuare una zona di trasferimento, è necessario inviare una query AXFR al server.

Per eseguire una zona di trasferimento utilizzando dnsrecon, è possibile utilizzare il comando seguente:

dnsrecon -a -d tesla.com

Per eseguire una zona di trasferimento utilizzando dig, è possibile utilizzare il comando seguente:

dig axfr @ns1.example.com example.com

CNAME Records

Un record CNAME (Canonical Name) è un tipo di record DNS che mappa un nome di dominio (un alias) su un altro (il nome canonico). Ciò significa che un CNAME permette di creare un’associazione tra due nomi di dominio, in modo che quando un utente cerca di accedere ad un sito web utilizzando l’alias, il server DNS restituisce l’indirizzo IP del nome di dominio canonico corrispondente.

Per verificare l’associazione tra due nomi di dominio tramite il comando “dig”, possiamo utilizzare la seguente sintassi:

dig +short -t CNAME example.com

Questa riga di comando restituirà il nome di dominio canonico associato all’alias “example.com”.

SPF Records

Un record SPF (Sender Policy Framework) è un tipo di record DNS TXT utilizzato come metodo di autenticazione delle email. L’obiettivo di un record SPF è quello di specificare i server di posta autorizzati a inviare email per il tuo dominio.

Per verificare se un record SPF è presente per un determinato dominio, possiamo utilizzare il comando “dig” come segue:

dig +short -t TXT example.com

Questa riga di comando restituirà il record SPF associato al dominio “example.com”.

HTTP Headers

L’header di risposta HTTP Content-Security-Policy consente agli amministratori di siti web di controllare le risorse che il browser è autorizzato a caricare per una determinata pagina. Ciò significa che un CSP consente di limitare le fonti di script, immagini e altri contenuti che possono essere caricati sul proprio sito web, riducendo così il rischio di attacchi XSS (Cross-Site Scripting) e altre vulnerabilità.

Per verificare se un sito web utilizza un header CSP, possiamo utilizzare il comando “curl” come segue:

curl -I -s -L https://www.miodominio.com | grep -iE 'Content-Security|CSP'

Questa riga di comando restituirà l’header CSP associato al sito web “www.miodominio.com”.

Nota: L’opzione “-I” del comando curl significa che vengono scaricati solo gli header della pagina, mentre le opzioni “-s” e “-L” disattivano l’output verboso e seguono le eventuali ridirezioni HTTP.

Nota: Esistono anche forme deprecate di CSP headers, ovvero X-Content-Security-Policy e X-Webkit-CSP.