Il protocollo BGP
In origine, tutti i router di Internet condividevano le stesse informazioni di instradamento e adottavano un comune protocollo di routing.
All’aumentare delle dimensioni di Internet, questa soluzione si è dimostrata non scalabile.
Indipendentemente dal protocollo di routing utilizzato, per l’aggiornamento delle tabelle d’instradamento di tutti i dispositivi, occorre un numero di messaggi proporzionale alle dimensioni della rete.
In una rete molto estesa, le tabelle di routing divengono molto complesse (con conseguente elevato consumo di memoria) e richiedono notevoli risorse di calcolo per il loro periodo di aggiornamento.
Aggiornamenti che risultano tanto più frequenti, quanto maggiore è il numero dei collegamenti esistenti.
Ogni volta che un collegamento viene inserito o rimosso è necessario notificare il cambiamento a tutti i router e provvedere alla loro riconfigurazione.
Per minimizzare tutti questi inconvenienti si è giunti a riformare il modello della stessa Internet pubblica.
Da singola rete amministrata da una singola autorità centrale, lo scenario si è trasformato in un insieme di reti distinte, tra loro interoperanti, ma gestite autonomamente da autorità diverse.
Internet di oggi è organizzata come una complessa serie di reti eterogenee interconnesse, gestite da autorità appartenenti a Paesi diversi.
Ciascuna organizzazione è responsabile di un frammento di Internet globale.
In questo scenario, le reti connesse agli ISP locali, rappresentano soltanto il sistema periferico di accesso all’infrastruttura globale.
Il collegamento a livello geografico, sia nazionale sia internazionale, è invece realizzato attraverso reti a larga banda, denominate dorsali, gestite da grandi compagnie specializzate (carrier) nell’erogazione di servizi di trasmissione dati.
Le reti di accesso degli ISP locali, connesse a una o più dorsali, consegnano i pacchetti originati dai loro utenti al carrier ottimale, sulla base delle proprie preferenze locali e degli accordi presi con essi.
Per poter scegliere sempre il percorso ottimale i vari carrier sono tenuti a annunciare agli ISP locali tutte le reti che fanno parte dell’internet pubblica.
Sta agli ISP costruire tabelle di routing che prevedano scelte differenziate a seconda della destinazione finale.
Nel caso di indisponibilità del collegamento con un carrier, le tabelle di routing mantenute autonomamente dall’ISP locale possono essere aggiornate, al fine di utilizzare uno dei collegamenti alternativi.
Oltre agli ISP, solo le realtà di maggiori dimensioni posseggono esigenze di comunicazione tali, da volere selezionare autonomamente il carrier migliore per raggiungere server remoti e farsi raggiungere dagli altri utenti finali.
Per ottenere questo grado di indipendenza, le entità sono chiamate a gestire un Autonomous System (AS), una delle aree autonome che compongono Internet pubblica.
Le politiche di routing, che stabiliscono le regole di instradamento dei pacchetti tra stazioni appartenenti allo stesso AS, possono essere scelte liberamente dall’amministratore dell’AS.
I protocolli di routing e gli indirizzi IP assegnati all’AS, devono essere condivisi tra tutti gli amministratori delle reti locali periferiche appartenenti all’AS.
Le regole che stabiliscono invece le politiche di instradamento tra distinti AS, vengono concordate a più alto livello gerarchico.
Le tabelle di routing contenenti informazioni riguardo la raggiungibilità delle reti interne all’AS, vengono create e mantenute aggiornate tramite uso del protocollo BGP.
Tra tutti i router appartenenti a un AS, solo un sottoinsieme limitato di essi deve parlare BGP.
È necessario che il protocollo BGP sia attivo sui router che assumono ruolo di border gateway verso altri AS.
Gli altri router partecipano dei protocolli di routing interno, e si avvalgono delle informazioni mantenute dai border gateway, ogni volta che devono instradare un datagramma IP a una stazione residente in un altro AS.
Le problematiche di autenticazione dei messaggi BGP scambiati tra border gateway coincidono con quelle già affrontate relativamente agli altri protocolli di routing.
Considerato il ruolo centrale dei border gateway nell’instradamento di pacchetti attraverso Internet pubblica, è necessario amministrare con attenzione ognuno di essi.
Il protocollo BGP prevede lo scambio di informazioni tra border gateway utilizzando l’affidabilità del trasporto offerta da TCP (porta riservata 179/tcp).
Il BGP prevede 4 diversi tipi di messaggio:
- OPEN, per l’apertura della connessione e la negoziazione dei parametri iniziali;
- UPDATE, per lo scambio di informazioni riguardo la raggiungibilità delle reti interne;
- NOTIFICATION, per la notifica di eventuali errori di protocollo;
- KEEPALIVE, per mantenere aperta la connessione tra border gateway vicini.
Border gateway vicini, che intendono trasmettersi informazioni di routing, devono scambiarsi reciprocamente due messaggi di OPEN, prima di effettuare la trasmissione di ogni altro messaggio (UPDATE, NOTIFICATION, KEEPALIVE).
Una volta aperta la connessione bidirezionale tra border gateway, tutti i restanti pacchetti vengono inviati attraverso di essa.
Per questo motivo il protocollo prevede che l’autenticazione dei pacchetti sia svolta una sola volta, al momento dell’invio del messaggio di OPEN.
Il messaggio di OPEN, prevede un campo specifico per contenere le informazioni relative alla procedura di autenticazione iniziale, ma non ne fissa la dimensione.
Questo rende possibile scegliere tra più soluzioni alternative, non solo limitate all’uso di funzioni di digest.
Ogni messaggio BGP prevede un’intestazione di lunghezza prestabilita 19 byte:
- un delimitatore iniziale di 16 byte (marker)
- un campo per indicare la lunghezza del messaggio (2 byte)
- un campo per indicare il tipo di messaggio (1 byte).
Trattandosi di un protocollo connesso, con il BGP è più difficile la riuscita di attacchi basati su IP Spoofing.
Un attaccante può comunque provare a tirar giù la connessione BGP esistente tra border gateway e a iniettare informazioni false in uno dei dispositivi.
Il primo problema è legato alla possibilità di inviare dei messaggi di controllo TCP non contenenti dati che richiedono il reset di una connessione.
Il motivo per cui il protocollo BGP è risultato particolarmente esposto a questo tipo di attacchi verrà analizzato in un altro articolo.
Per evitare l’iniezione di messaggi falsi, la sola forma di protezione è richiedere l’autenticazione di ogni blocco informativo scambiato su una connessione BGP.
Oltre a prevedere la possibilità di autenticare l’apertura della connessione, alcune implementazioni del BGP dispongono di soluzionni che consentono di autenticare ciascun blocco scambiato.
Le specifiche del protocollo BGP non definiscono quali schemi di autenticazione usare per validare le informazioni di routing scambiate, lasciando però la possibilità di utilizzare a tale scopo il campo Marker.
Tale campo può trasportare un blocco di bit da usare come checksum crittografica del blocco informativo corrente.
In questo modo, il border gateway di destinazione è in grado di stabilire se un hacker ha iniettato messaggi falsi nel flusso dati indipendentemente dalle misure di sicurezza offerte dal TCP.
La dimensione del campo Marker fissa a 128 bit la massima lunghezza della checksum crittografica che può essere prodotta.
La robustezza dello schema risiede nel fatto che solo la sorgente può generare la checksum crittografica usando la propria chiave privata, mentre il ricevente può verificarne l’integrità usando la corrispondente chiave pubblica.
La chiave pubblica può essere notificata ai border gateway vicini al momento dell’invio del messaggio OPEN, eventualmente sotto forma di certificato digitale.
Una volta che i border gateway sono stati “inizializzati”, portandoli a conoscenza delle rispettive chiavi pubbliche, un hacker non può più manomettere il flusso di dati scambiato.
All’hacker, a questo punto, rimane solo la possibilità di condurre attacchi DOS (SYN Flooding, reset delle connessioni BGP), senza comunque compromettere l’integrità delle tabelle di routing.