Jugamos batalla naval en BGP

BGP es el pegamento de Internet. Para el protocolo, que se dibuj贸 en dos servilletas en 1989, es a la vez sorprendente y terrible que maneje casi todas las interacciones entre los ISP, siendo una parte fundamental de Internet.

BGP tiene una mala reputaci贸n principalmente debido a la naturaleza confiable de los v铆nculos entre pares por defecto y la dif铆cil tarea de verificar la legitimidad de las rutas. Es por eso que en todas partes escuchamos acerca de los ataques de BGP de diversos grados de severidad: desde cambiar la ruta de todo YouTube a AWS Route 53 .

Pero para comprender la naturaleza de estos hacks, debe comprender la topolog铆a de Internet. Comencemos con un enrutador solitario:



Un solo enrutador es de poca utilidad si no puede enrutar nada. Por lo tanto, conectaremos otro enrutador a nivel f铆sico (puede ser cualquier cosa: desde Ethernet de cobre y fibra 贸ptica subacu谩tica hasta enlaces Wi-Fi 802.11).

Luego, dos enrutadores conectados (en nuestro caso, rojo y azul) deben entender que pueden enrutar el tr谩fico el uno para el otro. Despu茅s de todo, el objetivo de los enrutadores es enrutar el tr谩fico de un destino a otro.

Como se mencion贸 anteriormente, una forma com煤n de hacer esto entre los ISP es instalar BGP en ambos lados y dejar que "se anuncien" entre s铆 que pueden enrutar el tr谩fico:



Pero no es muy 煤til si solo hablan entre s铆, 驴de repente los enrutadores rojo y azul no est谩n conectados directamente? Cuantos m谩s enrutadores conectemos, m谩s compleja ser谩 la topolog铆a de enrutamiento que formaremos. Esto es posible porque cada par BGP comparte tablas de enrutamiento con los otros pares a los que est谩 conectado:



La forma en que los enrutadores intercambian informaci贸n entre s铆 depende de la pol铆tica de configuraci贸n, y esto generalmente depende de las condiciones del mundo real para los nodos vecinos. Hay varias configuraciones para clientes, acuerdos de intercambio de tr谩fico y proveedores superiores.

Debido a esto, los enrutadores requieren un conjunto de instrucciones programadas para filtrar lo que no quieren dar o tomar de otros nodos. Pero de vez en cuando, los atacantes obtienen acceso a un enrutador que est谩 conectado a otro enrutador que no tiene tales filtros. Arreglar esto a nivel de software es incre铆blemente dif铆cil , porque requiere cambios en los enrutadores de cada proveedor. Los intentos anteriores no est谩n muy extendidos .

BGP tiene una forma de codificar informaci贸n usando una ruta llamada comunidad. Est谩 definido en RFC1997 (desafortunadamente, escrito en 1996, se perdi贸 un poco). La comunidad se puede adjuntar a una declaraci贸n de ruta y consta de un n煤mero de 32 bits. En la pr谩ctica, este valor se divide en dos n煤meros de 16 bits (uno para el ASN y otro para la se帽al asociada con / para este ASN):



Se utilizan para transmitir informaci贸n adicional sobre la ruta, por ejemplo, donde el proveedor tom贸 esta ruta:



Esto es 煤til en t茅rminos de filtrado. Por ejemplo, si tiene muchos proveedores e intenta no dejar salir el tr谩fico fuera del pa铆s, puede utilizar la comunidad adecuada para dirigir el tr谩fico a lo largo de estas rutas.

Me hizo pensar 驴Qu茅 m谩s puedo se帽alar a trav茅s de la comunidad? 驴Y hasta d贸nde puedes llegar?

Despu茅s de algunas pruebas, result贸 que cada red de Nivel 1 borra la comunidad, excepto el anterior Nivel 3 , que permite la transferencia de la comunidad desde el enrutador de origen al cliente. Tambi茅n significa que un enrutador puede enviar informaci贸n a otros, incluso sin una conexi贸n directa.

Batalla naval


Conociendo la existencia de un canal de comunicaci贸n indirecta a trav茅s de BGP, quer铆a usar esto de alguna manera para establecer algunas comunicaciones no tradicionales. Eleg铆 "batalla naval" como medio, porque este juego requiere la transmisi贸n de una cantidad m铆nima de informaci贸n (coordenadas X e Y, as铆 como informaci贸n sobre el 煤ltimo disparo: acierto o errado).

Dos juegos en BGP se crearon dos comunidades.



Todo el juego cabe en dos n煤meros de 16 bits, lo que permite un juego confiable en dos comunidades.

Como el combate naval es un juego para dos, invit茅 a AS203729 a jugar. Est谩 conectado a BGP en Nueva York, y mi instalaci贸n funciona en Londres.

Al planear el juego, asumimos que debido a la frecuencia de actualizaci贸n de las rutas, podr铆amos amortiguar el tr谩fico de BGP . Dado que ambos estamos sentados en el tr谩fico de producci贸n real, acordamos establecer un temporizador de 30 segundos para cada movimiento, porque la amortiguaci贸n causar谩 fallas en los servidores de producci贸n.

Otro tr谩fico tambi茅n pas贸 a trav茅s de los enrutadores del juego, as铆 que tuve que mantener el demonio de enrutamiento en l铆nea y fue imposible usar el demonio BGP especial. Para evitar esta limitaci贸n, el binario del juego gener贸 y volvi贸 a cargar la configuraci贸n de BIRD utilizando el z贸calo de control del demonio para sondear los cambios de ruta.

Con esta configuraci贸n, el 16 de mayo de 2018, AS206924 y AS203729 probablemente jugaron el primer juego de mesa de la historia que se realiz贸 exclusivamente en BGP.



El juego transcurri贸 sin problemas, con la excepci贸n de una pausa de 45 minutos debido a la amortiguaci贸n anterior. Esto sucedi贸 de mi lado e hizo que el Nivel 3 aplicara la ruta menos 贸ptima para mi tr谩fico durante 45 minutos. Para evitar que se repita la situaci贸n, decidimos cambiar a un per铆odo de 90 segundos entre movimientos.

A pesar de esto, el 煤ltimo golpe a la flota de mi amigo AS203729 se realiz贸 en la jugada 68. Lo que me convierte en el primer ganador de un juego de mesa realizado utilizando un protocolo de enrutamiento p煤blico de Internet.

驴Fue eso l贸gico? Probablemente no. 驴Fue divertido? Gosh, si.

El c贸digo fuente ha sido publicado en ambos lados, aunque no propongo repetir este experimento.

隆Hasta la pr贸xima!

Source: https://habr.com/ru/post/es415689/


All Articles