Hacking de Infraestructura: Protocolo BGP II

BGP Hijacking

Este artículo es una continuación del último post sobre el protocolo BGP. Si todavía no lo has leído, hazlo antes de empezar.

Recordemos donde nos quedamos en el post anterior. Lo que creemos que está pasando es que un usuario que estará en AS-200 se está conectando al FTP, y nosotros queremos averiguar sus credenciales de acceso, pero el paquete no pasa por nosotros sino que va de AS-200 directo a AS-300. Sin embargo podemos hacer un ataque BGP de hijacking de forma que anunciemos en nuestro router AS-100 que tenemos una ruta más rápida para ir al servicio FTP, y que de esa forma AS-200 nos mande el paquete a nosotros en vez de a AS-300 creyendo que será más rápido.

 

De esa forma nos haremos con toda la información, que como sabrás del post sobre el protocolo FTP, va en claro.

Hacking de Infraestructura: Protocolo BGP II

Para iniciar el ataque hay que entrar en el modo de configuración:

Si estás en el modo config, y quisieras correr un comando que no es de configuración como alguno de los que hemos visto anteriormente, simplemente añade «do» al inicio del comando.

El primer paso es entrar en el router AS-100:

Ahora vamos a anunciar la ruta para llegar a la ip 10.120.15.10, pero en vez de hacerlo poniendo la subred 10.120.15.0/24, vamos a hacerlo poniendo la subred 10.120.15.0/25, porque normalmente la subred más específica es la que gana, la idea es que nuestra ruta sea la escogida como ruta preferida.

Ahora ejecutamos el siguiente comando para reestablecer todas las rutas y reanunciarlas:

Si ejecutamos ahora el comando show ip bgp 10.120.15.0/25, para ver los detalles de las rutas, veremos que ahora aparece la nuestra;

Y si miramos las rutas que anuncia el router AS-200, vemos que ahora anuncia la nuestra:

Ahora vamos a poner un tcpdump capturando los paquetes ftp durante un ratito, un minuto o asi:

Si ahora analizamos la traza con wireshark, vemos que algo extraño sucede, y no responde como debería, nunca se está completando el handshake:

Si hacemos lo mismo pero analizando un ping que mandemos, no recibiremos respuesta, y analizando las trazas vemos que lo que está pasando es que se está formando un bucle entre nosotros (AS-100) y el AS-300. Por lo que para solucionarlo tenemos que eliminar la ruta a ese router:

Para ello, si miramos la configuración, vemos que la linea «route-map to-as300 permit 10» está permitiendo la comunicación, vamos a modificarla por un deny.

Para hacer esto, necesitamos crear un «ip-prefix» que servirá de identificador, puede tener cualquier nombre en este caso es «PleaseSubscribe» e indicamos la subred que estamos anunciando:

Ahora creamos una nueva instrucción que deniega el acceso a AS-300:

El 5 que ponemos aqui o el 10 que vemos arriba es solo la secuencia para insertar o eliminar un valor del route-map, podriamos poner desde 1 a 65535 y primero sería el 1 luego el 2 etc. Se suele poner de 10 en 10 (el primero el 10, el segundo el 20, etc) porque en caso de tener que reordenarlo es muy dificil de hacer si se hace de 1 en 1. En nuestro caso como ya hay una regla que tiene el 10 y queremos poner una que vaya antes, pues ponemos el 5.

Por ultimo tenemos que asignar a la subred que hemos añadido en el prefix-list PleaseSubscribe esta lógica que deniega la ruta.

(Hemos tenido que hacer el apaño de crear un prefix-list y añadirle esa subred porque en el comando match ip address no te da opción de añadir una subred, tienes que añadir un prefix-list)

Si ahora comprobamos la configuración, vemos que ha cambiado:

Ahora volvemos a limpiar y reanunciar:

Sin embargo, todavía hay algo que está mal. Si volvemos a intentar hacer la prueba de hacer un ping, vemos que no recibimos nada tampoco, analizando veremos que ahora lo que sucede es que enviamos el ping desde AS-100 a AS-300 (porque lo que hemos cortado es la ruta de AS-300 a AS-100, ya que AS-300 no sabe mandarlo por ahi puesto que no lo anunciamos, pero nosotros si que sabemos mandarlo de AS-100 a AS-300). AS-300 al ver que no lo puede mandar a AS-100 directamente, lo que está haciendo es mandarlo primero a AS-200, y de ahi a AS-100:

Lo que pasaba antes:

Lo que pasa ahora:

Por lo que seguimos teniendo el bucle.

Asi que lo que tenemos que hacer es a parte de no anunciar la ruta que hemos creado a AS-300, cuando se la anunciemos a AS-200 tenemos que decirle que no lo anuncie a nadie:

Tenemos que editar la línea de «route-map to-as200 permit 10» para indicarle que no anuncie nuestra red.

Y con este comando le indicamos que no lo anuncie:

Salimos, limpiamos y si ahora hacemos un ping, ya lo recibimos correctamente:

Repetimos ahora el tcpdump para ver el ftp como hicimos anteriormente, y al mirar la traza veremos que ahora ya si que recibimos paquetes FTP y podemos hacer un seguimiento, viendo el usuario y la contraseña:

Con esa contraseña conseguimos acceso a la máquina donde estaba la víctima de nuestro ataque.

Como extra, podemos listar con «lxc list» los contenedores a los que podemos acceder, y vemos los 3 authority routers:

Nos podemos conectar a cada uno con lxc exec — <nombre del contenedor> bash

Si hacemos un ping o un traceroute a 10.120.15.10, donde está el FTP, podemos ver que nuestro hijaking funciona perfectamente:

(en el ping lo podemos ver porque el ttl que recibimos es de 62, si fuese directo el ttl sería de 63 (el ttl lo que hace es que un paquete no de más de 64 saltos, por ello se va restando por cada router y si llega a 0 muere. Por tanto si ha saltado 1 vez porque va directo recibimos un ttl de 63 y si ha saltado 2 porque se ha desviado, recibimos un ttl de 62))

Como extra, hay una forma inintencionada con la que podemos engañar al router para recibir la información. Básicamente, hacemos lo que hicimos al principio del todo, simplemente anunciamos que sabemos como llevar los paquetes a 10.120.15.0/25:

Aqui vemos que no recibimos respuesta del ping puesto que se crea el bucle inicial que vimos entre AS-100 y AS-300.

Bien, pues aqui lo que vamos a hacer es modificar nuestra IP para que el router AS-100 se crea que nosotros somos 10.120.15.10, y cuando AS-200 le mande el paquete (porque recordemos que se lo va a mandar a AS-100 antes que a AS-300 porque hemos puesto /25 en vez de /24) lo que hará AS-100 es mandarnos el paquete directamente a nosotros:

Recibimos el primer USER root que manda la víctima:

Sin embargo al no recibir respuesta de nosotros simplemente termina la conexión.

Lo que vamos a hacer es que cuando mande USER root le vamos a responder con 331, que es el identificador de usuario válido que manda el servidor FTP cuando nos conectamos, y como vemos la victima nos responde con la contraseña:

Recibimos el primer USER root que manda la víctima:

Y de esta forma hemos completado con exito el BGP Hijacking. Esto es todo sobre el protocolo BGP, como puedes comprobar es un ataque complejo puesto que para realizar el ataque es necesario tener una buena imagen mental de toda la infraestructura, pero aunque hemos tneido algunos problemas, una vez entiendes qué está pasando es fácil buscar una solución.

Si te ha gustado el artículo, te recomiendo que visites el resto de artículos de hacking de infraestructura.

Lethani.

5/5 - (48 votos)

Deja un comentario