Cosa fa#
Il Domain Name System (DNS) è il sistema distribuito gerarchico che traduce nomi di dominio leggibili (esempio.com) in indirizzi IP (93.184.216.34). Funziona come una catena di deleghe: nessun singolo server sa tutto, ma ognuno sa a chi chiedere.
TL;DR#
Flusso di risoluzione:
Browser
→ cache browser
→ cache OS locale
→ resolver ISP / 8.8.8.8
→ Root server → "per .it vai dai TLD .it"
→ TLD server → "per example.it vai dal nameserver"
→ Nameserver → "chat.example.it = 1.2.3.4"
→ resolver → cacha la risposta con il TTL del record
→ Browser → "l'IP è 1.2.3.4"ICANN è l’ente non profit che coordina indirizzi IP e nomi di dominio a livello globale.
è l’organizzazione che tiene in ordine la “rubrica mondiale” di Internet, decidendo chi gestisce i vari .com, .org, ecc. e coordinando indirizzi IP e DNS.
ICANN (Internet Corporation for Assigned Names and Numbers) è un’organizzazione non a scopo di lucro con sede negli Stati Uniti che:
ICANN
│
┌────────────────┴────────────────┐
│ │
Root zone (file) Politiche / regole
│
Root servers (A–M)
│
Deleghe TLD (.com, .net, .org, .it, ...)
│
Registry di ciascun TLD
│
Nameserver autorevoli dei domini
│
Resolver → Browser → UtenteCache — sta dove si fanno le domande, mai alla fonte:
Browser cache → personale, solo per te
Cache OS locale → /etc/hosts + cache sistema
Resolver ISP/8.8.8.8 → condivisa tra tutti i suoi client
Nameserver → fonte autoritativa, non cachaAnalogia — L'Ufficio Postale Gerarchico#
Immagina di dover consegnare una lettera a "Mario Rossi, Via Roma 15, Firenze, Italia".
Non esiste un unico postino che conosce tutti gli indirizzi del mondo. La lettera passa per una catena:
- Centro Smistamento Mondiale (Root Server
.): "Non so chi è Mario Rossi, ma la lettera va in Italia." - Ufficio Postale Nazionale (TLD Server
.it): "Non conosco Mario, ma Firenze ha il suo ufficio locale." - Ufficio Postale Locale (Authoritative NS): "Mario Rossi? Sì! Via Roma 15. Ecco il suo indirizzo esatto."
Il DNS funziona identicamente: ogni livello sa solo il pezzo di sua competenza e delega al livello sotto.
Gerarchia DNS e struttura di un nome di dominio#
"." (Root)
│
┌──────────────┼──────────────┐
.com .org .it ← TLD
│
┌─────┴──────┐
tryhackme.com google.com ← Second-Level Domain
│
└── store.tryhackme.com ← Subdomain jupiter.servers.tryhackme.com
│ │ │ │
│ │ │ └── TLD
│ │ └─────── Second-Level Domain (max 63 char)
│ └───────────────── Subdomain
└───────────────────────── Subdomain (annidati)
Lunghezza massima: 253 caratteri
Caratteri: a-z, 0-9, trattini (no inizio/fine, no consecutivi)| Tipo | Sigla | Scopo | Esempi |
|---|---|---|---|
| Generic | gTLD | Scopo del sito | .com .org .edu .gov .biz |
| Country Code | ccTLD | Nazione | .it .ca .co.uk .de |
paypal.com.login-secure.xyz ha TLD .xyz e second-level login-secure — non ha nulla a che fare con PayPal. Il second-level domain è l'unica parte che identifica il proprietario reale.
Come Funziona — Il Flusso Completo#
sequenceDiagram
participant B as Browser
participant C as Cache Locale
participant R as Resolver (ISP)
participant Root as Root Server (.)
participant TLD as TLD Server (.com)
participant NS as Authoritative NS
B->>C: www.esempio.com?
C-->>B: cache miss
B->>R: www.esempio.com?
R->>Root: www.esempio.com?
Root-->>R: prova TLD .com →
R->>TLD: www.esempio.com?
TLD-->>R: prova ns1.cloudflare.com →
R->>NS: www.esempio.com?
NS-->>R: 93.184.216.34 ✓
R-->>B: 93.184.216.34 (cache TTL)
I Due Tipi di Query#
graph LR
subgraph RECURSIVE
B1[Browser] -->|"Trovami esempio.com"| R1[Resolver]
R1 -->|fa tutto lui| R1
R1 -->|risposta finale| B1
end
subgraph ITERATIVE
R2[Resolver] -->|query| Root2[Root]
Root2 -->|prova TLD| R2
R2 -->|query| TLD2[TLD]
TLD2 -->|prova NS| R2
R2 -->|query| NS2[Auth NS]
NS2 -->|IP finale| R2
end
Analogia Recursive: Chiami la segretaria — lei chiama tutti, tu aspetti la risposta. Analogia Iterative: Chiedi a un passante, ti manda dal barista, il barista dal vigile, il vigile ti dà la risposta.
| Tipo | Meccanismo | Analogia |
|---|---|---|
| Recursive | Il resolver si assume l'onere di interrogare tutta la catena e fornire la risposta finale all'utente. | Chiedi alla segretaria di trovarti un numero: tu aspetti, lei fa tutte le chiamate. |
| Iterative | Ogni server risponde con un "Referral" (l'indirizzo del server successivo) e il chiamante deve muoversi passo dopo passo. | Chiedi indicazioni per strada: il barista ti manda al vigile, il vigile ti indica la meta. |
Attori del sistema — location fisica#
| Attore | Ruolo | Dove sta fisicamente |
|---|---|---|
/etc/hosts | Override manuale | File su disco, tua macchina |
| Cache OS | Risultati recenti | RAM, tua macchina, svuotata al reboot |
/etc/resolv.conf | IP del recursive server | File su disco, tua macchina |
| Recursive DNS | Fa il viaggio per te, mette in cache | Server fisico datacenter ISP / Google / Cloudflare |
| Root DNS | Indirizza al TLD corretto | 13 indirizzi logici, centinaia di macchine via Anycast |
| TLD server | Sa dove trovare il nameserver | Macchine fisiche Verisign (.com), Registro.it (.it) |
| Authoritative NS | Contiene i record reali | Macchine Cloudflare / AWS Route53 / etc. |
LOCALE (tua macchina) RETE (server di qualcun altro)
────────────────────── ──────────────────────────────
/etc/hosts Recursive DNS (ISP / Google)
Cache OS RAM Root DNS (Anycast globale)
/etc/resolv.conf TLD server (Verisign, etc.)
Authoritative (Cloudflare, etc.)
I primi tre non escono mai dalla tua macchina.
Dal Recursive DNS in poi sei in rete.Anycast: stesso IP annunciato da centinaia di macchine nel mondo. Il router manda la query alla macchina geograficamente più vicina — zero single point of failure, latenza minima ovunque.
Concetti Chiave: Il TTL#
TTL — Il Timer della Cache#
graph LR
A[Record DNS ricevuto] --> B{TTL scaduto?}
B -->|No| C[Usa cache]
B -->|Sì| D[Nuova query DNS]
Non confondere i due TTL — sono concetti completamente diversi:
| TTL di Rete | TTL DNS | |
|---|---|---|
| Dove vive | Header pacchetto IP | Record DNS |
| Cosa conta | Hop (router attraversati) | Secondi di validità cache |
| Valore max | 255 (8 bit) | Anche 86400 (24h) |
| Decresce | Ad ogni router | Con il tempo |
Best practice operativa quando modifichi un record:
Giorni prima: TTL = 86400 (regime normale)
│
│ 48h prima della modifica
▼
TTL = 300 ◄── i recursive nel mondo svuotano la cache
│
│ aspetta 48h (vecchi record con TTL 86400 scadono tutti)
▼
Fai la modifica del record A/CNAME/MX
│
│ aspetta max 5 min (nuovo TTL)
▼
Verifica con nslookup che la modifica sia propagata
│
▼
TTL = 86400 (torna al regime normale)Lasciare TTL a 300 permanentemente: su traffico basso nessun problema reale. Su traffico alto ~20-30% delle visite paga il costo del viaggio completo invece della cache.
La cache è posizionata dove si fanno le domande. → cache locale (OS) → resolver → Root server → "per .it vai dai TLD .it" → TLD server → "per example.it vai dal nameserver" → resolver → Browser
Scenario Reale — DNS Hijacking#
Questo è uno dei motivi principali per cui monitorare le query DNS è fondamentale in un SOC.
Un utente segnala: "Quando vado su intranet.azienda.com mi appare una pagina strana con un login diverso."
sequenceDiagram
participant U as Utente
participant M as Malware
participant F as Fake DNS (attaccante)
participant C as Clone Site
M->>U: modifica /etc/resolv.conf
U->>F: query DNS intranet.azienda.com
F-->>U: IP falso (clone site)
U->>C: connessione
C-->>U: pagina login fake
U->>C: inserisce credenziali
C->>F: credenziali rubate ✓
Come investighi:
# Controlla il resolver configurato sul PC sospetto
cat /etc/resolv.conf
# Verifica a quale IP risponde il resolver attuale
dig intranet.azienda.com
# Confronta con il resolver aziendale legittimo
dig @dns-aziendale.com intranet.azienda.comScenario Reale — DNS Tunneling (Canale Covert)#
Il firewall vede solo "una query DNS" e la lascia passare. Tecnica usata dai malware per esfiltrare dati aggirando i firewall.
sequenceDiagram
participant M as Malware (PC vittima)
participant FW as Firewall
participant DNS as DNS Auth (evil-c2.com)
M->>FW: query DNS dXRlbnRl.evil-c2.com
Note over M,FW: Dati rubati codificati in base64 nel sottodominio
FW-->>M: sembra traffico DNS legittimo ✓
FW->>DNS: forwarda la query
DNS-->>M: risposta (comandi C2 nascosti)
Come rilevarlo con suricata:
- Sottodomini molto lunghi (> 50 caratteri)
- Alta frequenza di query verso lo stesso dominio
- Entropia alta nel nome del sottodominio
DNS Recursion — vista dal resolver (Wireshark)#
Quando il resolver esegue la ricorsione, genera una nuova query con un nuovo Transaction ID verso l'upstream. Il dfir catturato sul resolver mostra 4 pacchetti:

Pkt 1: client (172.16.0.8) → resolver (172.16.0.102) query 0x8b34 A www.nostarch.com
Pkt 2: resolver (172.16.0.102) → upstream (4.2.2.1) query 0xf34d A www.nostarch.com
Pkt 3: upstream (4.2.2.1) → resolver (172.16.0.102) risposta 0xf34d A 72.32.92.4
Pkt 4: resolver (172.16.0.102) → client (172.16.0.8) risposta 0x8b34 A 72.32.92.4Il resolver mantiene internamente la mappatura 0xf34d → 0x8b34: sa che quando arriva la risposta con ID 0xf34d deve rispondere al client con l'ID originale 0x8b34.
Nuovo Transaction ID = nuova query indipendente. Se vedi Transaction ID diversi in un dfir sul resolver, stai guardando la ricorsione in azione — non un errore.
Questo meccanismo è anche il punto debole del DNS cache poisoning: un attaccante che riesce a indovinare il Transaction ID e rispondere prima dell'upstream legittimo può iniettare una risposta falsa nel resolver.
Come appare in Wireshark — pacchetto DNS#
Una query DNS è due pacchetti UDP: query e risposta. Porta fissa 53/udp sul server, porta effimera sul client (es. 1060).
Struttura del pacchetto query:
| Campo | Valore tipico | Significato |
|---|---|---|
| Dst Port | 53 | porta DNS — sempre 53/UDP |
| Src Port | 1060 (variabile) | porta effimera del client |
| Transaction ID | 0x180f | abbina query → risposta, come in DHCP |
| Flags | 0x0100 Standard query | indica tipo messaggio e opzioni |
| Recursion desired | 1 | "fai tu il viaggio completo, non voglio referral" |
| Questions | 1 | numero di domande nel pacchetto |
| Answer RRs | 0 | nella query è sempre 0 — la risposta arriva dopo |
| Type | A | tipo di record richiesto |
| Class | IN | Internet — l'unica classe usata in pratica oggi |
Transaction ID — numero casuale generato dal client. Il server lo copia nella risposta. Stesso meccanismo di DHCP: permette di abbinare risposta a query quando più query sono in volo contemporaneamente su UDP.
Class IN — DNS fu progettato per supportare classi diverse (IN = Internet, CH = Chaosnet, HS = Hesiod). Oggi si usa solo IN. Lo vedi sempre nei pacchetti ma non ha rilevanza pratica — residuo del design degli anni '80.
Flag DNS nella risposta — come leggerli in Wireshark#

Dalla risposta del resolver (Practical Packet Analysis, cap 9):
| Flag | Valore | Significato |
|---|---|---|
| Response | 1 | è una risposta (0 = query) |
| Opcode | 0 | Standard query |
| Authoritative | 0 | il resolver NON è autoritativo per il dominio — ha recuperato la risposta per conto del client |
| Truncated | 0 | risposta non troncata (se 1 → riprova via TCP) |
| Recursion Desired | 1 | il client ha chiesto al resolver di fare il viaggio completo |
| Recursion Available | 1 | il server conferma che supporta query ricorsive |
| Reply code | 0 | No error — risposta valida |
Authoritative = 0 nella risposta del resolver è normale — significa che il resolver ha fatto il lavoro iterativo per te ma non possiede la zona. Vedresti Authoritative = 1 solo se interrogassi direttamente il nameserver autoritativo del dominio.
Il Transaction ID della risposta deve coincidere con quello della query. Se non coincide in un potrebbe essere un tentativo di DNS cache poisoning — risposta falsa iniettata prima di quella legittima.
Tipi di record — valori numerici nel pacchetto#
In Wireshark vedi il tipo come numero. I più comuni:
| Valore | Tipo | Descrizione |
|---|---|---|
| 1 | A | indirizzo IPv4 |
| 2 | NS | nameserver autoritativo |
| 5 | CNAME | alias → nome canonico |
| 15 | MX | mail exchange |
| 16 | TXT | testo libero (SPF, DKIM, verifica) |
| 28 | AAAA | indirizzo IPv6 |
| 251 | IXFR | zone transfer incrementale |
| 252 | AXFR | zone transfer completo |
IXFR e AXFR usano TCP invece di UDP — i dati sono troppo grandi per un singolo datagramma. In Wireshark si riconoscono subito perché la porta 53 appare su TCP anziché UDP.
Comandi Diagnostici#
| Comando | Cosa fa |
|---|---|
dig esempio.com | Query DNS base |
dig esempio.com +trace | Mostra tutta la catena root → TLD → NS |
dig esempio.com MX | Query per tipo di record specifico |
nslookup esempio.com | Alternativa a dig (meno dettagliata) |
cat /etc/resolv.conf | Mostra il resolver configurato sul sistema |
dig esempio.com +trace è il tuo strumento principale per diagnosticare problemi DNS — mostra ogni passo della catena di risoluzione come se fossi il resolver.
DNS Zone — cosa si intende#
La zona è la porzione di spazio DNS che un nameserver gestisce direttamente e di cui è autoritativo.
target.com ← zona gestita dal nameserver
├── www.target.com
├── mail.target.com
├── vpn.target.com
├── dev.target.com
└── internal.target.comIl nameserver di target.com conosce tutti questi record perché li ha nel suo zone file — un file di testo con tutti i record DNS del dominio.
La distinzione importante: un resolver (tipo 8.8.8.8) non ha una zona — fa domande per conto dei client. Un authoritative nameserver ha una zona — risponde con dati che possiede direttamente, non che ha cercato per te.
Quando fai dig +trace target.com e arrivi all'ultimo nameserver che risponde senza ulteriori referral — sei sull'autoritativo della zona.
Subdomain Takeover#
FASE 1 — configurazione legittima:
store.tryhackme.com ──CNAME──► shops.shopify.com
│
account Shopify attivo ✓
FASE 2 — abbandono (CNAME rimane, account cancellato):
store.tryhackme.com ──CNAME──► shops.shopify.com
│
NXDOMAIN — nessuno lo possiede
FASE 3 — attaccante registra shops.shopify.com:
store.tryhackme.com ──CNAME──► shops.shopify.com
│
account ATTACCANTE ← controlla
il contenuto servitoChiunque visiti store.tryhackme.com vede il contenuto dell'attaccante sotto il dominio ufficiale della vittima. Usi: phishing, furto cookie, bypass CSP.
# Rileva CNAME orfani:
nslookup -type=CNAME store.tryhackme.com
# Se il CNAME esiste ma la destinazione dà NXDOMAIN → potenziale takeover
# Servizi noti vulnerabili:
# Shopify, GitHub Pages, Heroku, Fastly, Azure, AWS S3Collegato a#
- network — categoria
- dns-records — tutti i tipi di record (A, CNAME, MX, TXT, NS, ecc.)
- nat-concept — il resolver è spesso dietro NAT
- ip-addressing-subnetting — gli IP a cui i record A puntano
- suricata — rileva DNS tunneling e query anomale
- wazuh — monitora le query DNS per comportamenti sospetti



