viernes, 20 de febrero de 2009

Inestabilidad de BGP a nivel mundial

Durante el principio de semana sufrimos de una inestabilidad de BGP a nivel mundial.

Los equipos que recibían por BGP toda la tabla mundial empezaron a cerrar las sesiones aleatoriamente con un mensaje de error, el resultado directo de esto es la pérdida conocimiento de las redes remotas, por lo que digamos mal y pronto que "no andaba internet".

El motivo del problema fue que un sistema autónomo (47868) se puso a jugar con BGP de una forma muy extraña y sin medir las consecuencias de esto.



Como todos sabemos. cualquier mala configuración de este protocolo puede ser penalizado y aislado o bien puede hacer un blackhole.

En este caso el tema fue mucho peor porque desencadenó un bug de muchos routers de la espina dorsal de internet.

Puntualmente esta gente del AS47868 (SuproNet) puso en práctica algún tipo de idea loca para su política de enrutamiento exterior.

Este AS "empeoró" sus rutas aumentando excesivamente el largo del atributo bien conocido AS_PATH.

Para los que no saben de BGP voy a dar una pequeña intro:


BGP es un protocolo de enrutamiento de gateway exterior (EGP) que usa un algoritmo de tipo vector camino para decidir el enrutamiento.

La métrica es compuesta, y depende de muchos atributos que son evaluados para conseguir la mejor ruta al destino.

Uno de esos atributos es el llamado AS_PATH, que es un vector (un arreglo unidimensional para los que saben de programación) en donde se van guardando todos los AS por donde pasó ese prefijo hasta llegar al router local.

[caption id="attachment_297" align="aligncenter" width="300" caption="Ejemplo de Atributo AS-PATH"]Ejemplo de Atributo AS-PATH[/caption]

Cada vez que el prefijo se pasa de un AS a otro, se agrega su número y por ende el largo de este vector aumenta.

Si no se consideran otros atributos que se evalúan antes, el camino con el AS_PATH más corto es el que se instala como ruta preferida.

Un router nos permite agregar nuestro propio AS muchas veces a este atributo (prepending) para aumentar este largo intencionalmente, y por ende podemos "empeorar" una ruta para que sea backup, ya que todos los routers eligirían la más corta por defecto.

Entonces tenemos publicada la ruta por dos lados, por uno en forma normal, y por el otro "prependeada" para que sea el último recurso.

Cuando la publicación normal esté andando todo llega por ahí, pero cuando se cae todo llega por la empeorada. Digamos que esto se hace para evitar el balanceo de carga por los dos enlaces.

La cuestión es que los genios del AS 47868 prependearon su AS 252 veces!!! y desataron la colgada de los equipos que mencioné anteriormente, los cuales seguro tienen sistemas operativos no actualizados.

Ahora vos te preguntas de quien es la culpa de esto...

Bueno, podemos verlo así:

  • El originador del problema no tenía la menor idea de lo que estaba haciendo y qué consecuencias podía tener.

  • El proveedor de ese AS no tenía una política de filtrado para evitar que esto se propague al mundo.

  • El resto del mundo (para mantener la estabilidad) usa sistemas operativos muy estables y probados, pero eso significa también que son viejos y que no implementan los nuevos features de los protocolos de enrutamiento. El tener un AS_PATH de 256 entradas es una modificación relativamente nueva al protocolo, y se propaga activando algunos campos especiales del paquete de actualización. Sumado a esto, tampoco teníán protección contra este evento.


Bien, ahora que todos somos culpables, quiero mencionar una frase que escribió un CCIE veterano que se llama Ivan Pepelnjak, y que me tomé la molestia de traducir:
Dos routers 3725 de "core": U$D 15.000.

Un switch Layer-3 para conectarlos: U$D 3.000.

Connectividad a dos proveedores de internet: U$D 3.000 por mes (estimado).

Provocar un fallo mundial en internet porque te ahorraste U$D 1000 en un curso de BGP o U$D 50 en un libro: No tiene precio.

En el próximo episodio les cuento como se puede evitar este nuevo tipo de ataque. Porque como siempre, el IOS tiene un feature que nos evita este problema. Pero la cuestión es la misma de siempre, nadie lo usaba (yo tampoco).

Actualización #1:


Pueden aprender como prevenir el problema en este post.

A pesar que yo voy a ir escribiendo acerca de este protocolo, de todas formas recomiendo imperiosamente leer la bibliia que escribió Sam Halabi: Arquitectura de Enrutamiento En Internet - 2b: Edicion (Spanish Edition).

No hay excusa para no tenerla, y para mejor está totalmente traducida al español.

3 comentarios:

Maxi dijo...

Excelente descripción Ariel. Felicitaciones por tu blog.

Max

La ca dijo...

[...] II: Un amigo Ariel ha escrito en su blog una excelente descripci

Ariel Weher dijo...

Gracias Maxi. Saludos

Publicar un comentario