BGP, DNS e la fragilità dei nostri sistemi critici di Malcolm Heath, Senior Threat Researcher degli F5 Labs
Il 4 ottobre 2021, Facebook ha subito un’interruzione dei servizi di sei ore che ha riguardato tutte le sue properties, tra cui WhatsApp, Instagram e Oculus VR.
Data l’entità di questo evento, definito dallo stesso Zuckerberg come “il peggior crollo dei servizi che abbiamo mai avuto”, credo sia importante fare un passo indietro per comprendere quanto accaduto e analizzare le tecnologie Internet su cui tutti noi facciamo affidamento.
È sempre colpa del DNS
Il Domain Name System (DNS) è un singolo punto di failure dei sistemi Internet, che mappa i nomi, come facebook.com, agli indirizzi IP, consentendo agli utenti di fare riferimento in modo semplice ai siti chiamandoli per nome.
Il DNS, in effetti, fornisce la traduzione tra nomi e indirizzi IP, come una rubrica. Quando i server DNS di un sito non sono attivi, questa ricerca non può avvenire e le persone non sono più in grado di raggiungere il sito. Mantenere i server DNS attivi, operativi e sicuri è un elemento fondamentale per l’affidabilità di un sito.
A meno che la colpa sia del BGP
Al di sotto di questo, c’è un’altra tecnologia che è importante almeno quanto il DNS. Si tratta di un protocollo di routing (uno dei tanti) chiamato Border Gateway Protocol (BGP).
Il BGP è il protocollo che consente ai Sistemi Autonomi (insiemi di grandi reti controllate da un’unica entità) di fare sapere ad altri sistemi autonomi come possono raggiungere le reti che controllano. Non esegue direttamente il routing, ma è il protocollo che condivide le informazioni tra i router. Dopo aver ricevuto queste informazioni, i router possono prendere decisioni su dove inoltrare i dati.
Per farvi capire quanto il BGP sia importante pensate al seguente esempio: digitiamo “f5.com” in un browser web. Il computer esegue una ricerca DNS e si spera che il server DNS locale utilizzato dal computer restituisca un indirizzo IP di 107.162.162.40. Questa è la parte della rubrica.
Ora, tuttavia, il computer deve essere in grado di inviare traffico a quell’indirizzo IP. È importante notare che le decisioni di routing vengono prese hop-by-hop.
Ogni router attraverso il quale passano i dati deciderà quale deve essere il prossimo passo del percorso guardando l’indirizzo IP di destinazione e consultando la sua tabella di routing per determinare la destinazione a cui inoltrare i dati.
Se il router è abilitato BGP, questa tabella di routing sarà costruita dalle informazioni che ha ricevuto da altri router abilitati BGP.
Tra queste informazioni ci sono quelle relative a quali reti possono essere raggiunte da quali router e su quanto il percorso sia vicino alla destinazione. “Vicino”, in questo caso, non si riferisce al numero di router che i dati dovranno attraversare, ma piuttosto al numero di Sistemi Autonomi che i dati attraverseranno. Esiste un algoritmo complesso utilizzato per determinare quale dei possibili percorsi sia il migliore. “Best” può significare molte cose diverse, poiché vengono considerati anche fattori come le policy di uscita e gli accordi di transito tra gli ISP. Se si scopre che la tabella di routing del router A mostra due router che possono inoltrare i dati per raggiungere 107.162.162.40, in base a tali metriche, ne viene scelto uno.
Ciascun router Internet, nel momento in cui riceve dati da indirizzare, prende decisioni di instradamento: a seconda della sua posizione rispetto alla destinazione, può inoltrare i dati ad un altro router o consegnare direttamente il pacchetto alla rete 107.162.0.0/16 che contiene di fatto l’IP di destinazione finale. Lo stesso processo sottende all’instradamento e alla consegna del pacchetto di ritorno che, attraverso un’altra serie di router e network internet, raggiungerà il client.
Questo schema presenta molti vantaggi perché finché è disponibile un eventuale router di destinazione finale per il traffico – e la maggior parte delle aziende con una grande presenza su Internet ha molti di questi router – i nostri dati dovrebbero (alla fine) finire lì e, dato che le informazioni necessarie per servire un sito sono suddivise in molti pacchetti, è possibile che eseguano percorsi diversi.
Questo è il vero punto di forza: se un router intermedio si interrompe, i pacchetti che compongono la nostra richiesta o risposta possono essere reindirizzati per evitare il problema e tutto è perfetto se le tabelle di routing sono coerenti e contengono buone informazioni. Dopotutto, Internet è stato originariamente progettato per aggirare gli attacchi nucleari!
Immaginate di voler arrivare a casa di un amico, dove non siete mai stati. Cercate il suo indirizzo, come se cercaste parte del DNS e poi dovete capire come arrivarci. Vi recate all’incrocio più vicino e chiedete a qualcuno in che direzione dovreste andare. Vi dicono di girare a sinistra. Percorrete quella strada fino a raggiungere un altro incrocio e chiedete di nuovo. La seconda persona vi dice di andare a destra e continuate questo processo fino a raggiungere la destinazione.
È possibile che qualcuno vi dica: “Di solito ti suggerirei di andare oltre il ponte ma il ponte è rotto, quindi vai a sinistra qui e poi chiedi al prossimo incrocio”. Oppure potrebbero rispondere: “Andare a sinistra è più diretto, ma se vai a destra e prendi l’autostrada vai molto più veloce”.
Ecco, il percorso che farete alla fine non è detto che sia sempre quello più diretto per raggiungere la meta, e non è nemmeno detto che sia necessariamente il più veloce, ma vi permetterà di superare i blocchi stradali, i ponti crollati e le strade piene di buche. Certo, se tutti quelli a cui avete chiesto informazioni hanno risposto bene!
Ma il BGP non sbaglia mai?
In realtà no, perché è molto affidabile e ha una buona scalabilità, caratteristica fondamentale quando si tenta di interconnettere miliardi di host. Questo però non significa che non possano verificarsi dei problemi.
Le informazioni del percorso possono omettere alcuni sistemi che dovrebbe indicare, il che significa che la rete associata scompare semplicemente da Internet. Nessuno sa come arrivarci e il traffico destinato a quella rete viene interrotto.
Si tratta di un processo che a volte viene fatto intenzionalmente, in genere per bloccare le connessioni da o verso una determinata rete, e si chiama blackholing a route. Ci sono una varietà di casi in cui avviene, ad esempio quando si vuole bloccare il traffico DDoS proveniente da una rete ostile o, in alcune circostanze, se si vuole rimuovere un intero Paese da Internet durante un colpo di stato o altro. Il risultato è che il traffico di rete viene semplicemente cancellato, spesso senza alcuna notifica al mittente. La rete in blackhole non riceverà traffico e sarà effettivamente tagliata fuori dal mondo (digitale).
È anche possibile che vengano fornite indicazioni sbagliate sul percorso; un’errata configurazione da parte di un sistema autonomo può far sembrare possibile instradare il traffico verso reti che non controlla. Fatto intenzionalmente, questo si chiama dirottamento BGP e, sebbene ci siano sistemi di difesa che permettono di contrastarlo, è successo molte volte in passato, causando l’instradamento di grandi quantità di traffico in luoghi molto strani, forse come tentativo di catturare e ispezionare il traffico a fini di spionaggio.
Gli incidenti sono molto più comuni di quanto si pensi, basta che un operatore di rete o un sistema automatizzato configuri male qualcosa e il percorso necessario scompare del tutto, o che un’errata configurazione finisca per creare un loop di routing (dove il traffico viene inoltrato avanti e indietro tra due router all’infinito), oppure che il traffico venga instradato verso un router che non sa nulla del percorso, che quindi interrompe tutto.
Sulla base di quanto detto finora, è possibile che l’interruzione di Facebook possa essere stata, almeno in parte, causata da un’errata configurazione del BGP. Per essere chiari: in questa fase, si tratta solo di una mia speculazione e dovremo aspettare che Facebook confermi con precisione cosa è successo e il perché.
Nel frattempo, credo che a tutti noi si presenti un’opportunità interessante. iniziare a prestare un po’ più di attenzione a quella parte meno conosciuta ma di fondamentale importanza per “l’impianto idraulico” di Internet, perché alla fine è grazie a questa che quando faremo una ricerca con il browser vedremo comparire insieme sul nostro schermo tutte le immagini che desideriamo.