# DNS Amplification Attack

Il DNS Amplification Attack o DNS Reflector attack è un attacco di tipo Distributed Denial of Service (DDoS) che abusa di server DNS open resolver e ricorsivi (recursive) inviando a questi ultimi pacchetti contenenti informazioni falsificate sull'IP di provenienza (IP spoofing).

## Server open resolver e ricorsione

Il DNS (domain name system) ha una struttura ad albero ed è composto da diversi server delegati gerarchicamente a cui vengono assegnate diverse zone. I server possono essere autoritativi per una o più zone (primari e secondari), forwarder e ricorsivi. Questi ultimi sono chiamati così poiché utilizzano la ricorsione, ovvero il processo attraverso il quale un server di questo tipo, al momento della ricezione della richiesta di risoluzione di un nome, ripercorre le catene di deleghe partendo dalla zona radice; da qui, ottenendo il server di primo livello che lo gestisce, lo interroga; ricorsivamente interroga il server nel dominio di secondo livello ottenuto, fino alla risoluzione del nome desiderato. (FIGURA 1)
Idealmente un server DNS (name server) ricorsivo dovrebbe accettare richieste (DNS query) solo da client autorizzati o locali, ma ciò nella stragrande maggioranza dei casi non accade, permettendo la loro interrogazione a qualsiasi client. Questi server vengono definiti “Open resolver” e nell'ambito della ShmooCon (2006) conference, Dan Kaminsky e Mike Schiffman ne hanno resi pubblici circa 580.000 dislocati su tutta la rete internet.

## Record di Risorsa o Resource Record (RR)

Nell'ambito di una richiesta DNS avviene un'interrogazione rivolta ai record che ogni zona utilizza per organizzare le informazioni di propria competenza; questi record sono detti “record di risorsa (RR)”. Nello specifico un record di risorsa è strutturato nel seguente modo:
| CAMPI | DESCRIZIONE |
| Proprietario | Nome del dominio proprietario del record. |
| Durata TTL (time to live) | Determina il tempo di permanenza delle informazioni del record nella cache del server (è un campo facoltativo). |
| Classe | Classe di appartenenza del record, ad esempio IN indica che il record appartiene alla classe internet. |
| Tipo | Tipo del record di risorsa. |
| Dati del tipo di record | Il suo contenuto è variabile e dipende dalla classe e dal tipo di record. Contiene informazioni sulla risorsa. |
Semplificando, ci si può prendere la licenza di dire che questi record racchiudono l'associazione tra il nome del dominio e l'informazione richiesta dipendente dal tipo di record.

### Esempio 1: Risoluzione di un nome

in questo caso vengono consultati i records di tipo A che collegano l'host al suo indirizzo IPV4 a 32bit.

### Esempio 2: Richiesta start of authority (SOA)

Premesso che start of authority (SOA) significa “inizio dell'autorità”, con questo tipo di richiesta viene interrogato il record SOA che delimita le zone autoritative ed è unico per ogni zona, restituendo in associazione: informazioni autoritative sulla zona (Server DNS primario e secondario) il numero seriale del dominio, l'e-mail dell'amministratore e alcuni timer utili a gestire il TTL (time to live, durata di validità) dei record e la frequenza di trasmissione.
Ecco come si presenta il contenuto del record SOA di google.com:
Primary Nameserver: ns1.google.com Email of Person responsible for this domain: dns-admin@google.com Serial Number of zone: 2009061800 Refresh: 7200 (2 Hours) (a secondary name server must refresh it's zone from the primary after this many seconds) Retry: 1800 (30 Minutes) (a secondary name server should retry after this many seconds if it can't contact the primary) Expire: 1209600 (2 Weeks) (a secondary should expire the zone if it can't contact the primary after this many seconds) Minimum TTL: 300 (5 Minutes) (name servers that are not primary or secondary for this domain should only cache records for this number of seconds.)

### Esempio 3: Utilizzo di EDNS e lo pseudo record option (OPT)

Per proseguire nell'esempio è necessario ricordare che:
* L'User Datagram Protocol (UDP) è un protocollo di comunicazione utilizzato su internet, basato sull'invio e la ricezione di pacchetti.
* Le Request for Comments (RFC) sono una raccolta contenente standard di protocollo utilizzati su internet, rapporti e proposte.
In primo luogo bisogna definire l'EDNS (Extension Mecchanism for DNS - RFC 2671) come un'estensione del protocollo DNS, la cui utilità è quella di permettere di specificare le dimensioni dei pacchetti UDP. In base alla RFC 1035 il limite di dimensione dei pacchetti UDP è 512 byte, ma sorge a volte la necessità di sforare questo limite, avendo così la possibilità di trasferire pacchetti più grandi. A tale scopo, è necessario che al server DNS giunga una richiesta (query) al cui interno è contenuto un record OPT, dal quale il server estrapola informazioni sul livello di trasporto UDP, fra cui le dimensioni massime che ogni pacchetto può possedere e, ottimizzando lo spazio, modifica la risposta facendo in modo che essa contenga quanti più record di risorsa possibile. È importante specificare che si definisce un record OPT uno pseudo record poiché non contiene veri e propri dati DNS, bensì informazioni sul livello di comunicazione UDP.

## Descrizione dell'attacco

Lo studio di questo attacco ha portato la consapevolezza che per la sua completa riuscita è necessario soddisfare due fondamentali precondizioni:
* Un nome di dominio valido con record di risorsa di tipo SOA e TXT che supporti EDNS
* Una query personalizzata al cui interno sia contenuto l'indirizzo Ip della vittima a cui sarà successivamente destinata la risposta. Questa tecnica prende il nome di IP spoofing.
Il primo punto sta alla base del meccanismo di amplificazione, il secondo si riferisce invece alla rifrazione dell'attacco. Il concetto di amplificazione ha base sul fatto che query (richieste) molto piccole possono generare risposte molto più grandi, ad esempio una query UDP di 60 byte può generare una risposta di 512, cioè 8.5 volte più grande della richiesta. Chiameremo l'amplificazione della risposta “fattore di amplificazione”. La rifrazione invece consiste nell'ip-spoofing che è il meccanismo attraverso il quale si dirotta la risposta verso un'altra destinazione prestabilita. Chi sferra quest'attacco solitamente si avvale di una rete di computer dislocati sulla rete internet (ad esempio una Botnet) utilizzata inconsapevolmente allo scopo d'inviare una moltitudine di richieste a diversi server DNS open resolver. Questo primo aspetto dell'amplificazione viene successivamente potenziato per mezzo di diverse query, precostruite manualmente, atte ad interrogare i diversi record di risorsa dei domini sfruttati. Ad esempio, s'ipotizzi di mandare una richiesta con indirizzo di risposta falsificato (spoofed query) ad un server DNS “open resolver” che attraverso lo pseudo-record OPT e sfruttando EDNS, specifichi dimensioni molto più grandi dei pacchetti UDP in risposta, ad esempio 4000 byte. Dal punto di vista dell'amplificazione si nota subito che la stessa query di 60 byte può amplificare la sua risposta fino a 4000 byte, con un fattore di amplificazione pari a 66.7. Tale fattore è ulteriormente incrementabile attraverso la combinazione delle diverse risposte ottenute dall'interrogazione di record SOA, di TIPO A e TXT e in caso di frammentazione, cioè se sforando l'MTU (Maximum Transmission Unit= Massima unità trasmettibile) di un qualsiasi router che collega i server DNS “attaccanti” al bersaglio, i pacchetti vengono ridimensionati incrementandone il numero a discapito del bersaglio. Un'ultima precisazione: le operazioni che permettono l'attacco sopracitato si basano su abusi (come l'utilizzo improprio di EDNS) e vulnerabilità (come l'ip spoofing) del servizio DNS i cui server partecipano involontariamente all'attacco.