Destroying the Internet (BGP routers) EP 1 // BGP Python scapy DoS script

– Este es uno de varios
videos en los que les mostraré cómo piratear BGP o el
protocolo de puerta de enlace fronteriza. BGP es el protocolo de escritura
que ejecuta Internet. (música ambiental alegre)
♪ ¿Estás de acuerdo con BGP? ♪ ♪ Sí, me conoces ♪ ♪ ¿Estás de acuerdo con BGP? ♪ ♪ Sí, me conoces ♪ ♪ ¿Estás de acuerdo con BGP? ♪ ♪ Sí, me conoces ♪ ♪ ¿Quién está abajo con BGP? ♪ ♪ Todos los ISP ♪ : si envía tráfico a través de
Internet, por ejemplo, si va a facebook.com o
si va a otro sitio web, las decisiones sobre
dónde enrutar su tráfico se toman mediante un protocolo de escritura llamado BGP. Por lo tanto, Internet se basa en BGP. (música ambiental alegre)
♪ ¿Cuántas personas tienen un teléfono ♪ ♪ sin un plan de datos? ♪ ♪ ¿Cuántas personas viven su
vida como todos los Amish pueden? ♪ ♪ Bueno, si lo haces, entonces
no necesitas Internet en absoluto.

♪ ♪ Pero por lo demás, aquí está su protocolo. ♪ ♪ ¿Estás de acuerdo con BGP? ♪ ♪ Sí, me conoces. ♪ – Así que les mostraré
en esta serie de videos, cómo restablecer una relación de vecino BGP usando Python en Scapy. En este ejemplo, tengo a Kali ejecutándose en una computadora con Windows
dentro de una máquina virtual y enviaremos
paquetes a la red para restablecer la relación de vecino. En segundo lugar, le
mostraré cómo eliminar una ruta de la tabla de enrutamiento de un enrutador BGP.

Entonces, primer script, restablecer la
relación de vecinos. Segundo script, encuentre una ruta en la
tabla de enrutamiento y elimínela. Y el tercer script es
donde inyectamos una ruta falsa en la tabla de enrutamiento de un enrutador BGP. (música ambiental animada) Ahora, antes de continuar,
debo advertirle que este es un tema más avanzado. BGP no se cubre con mucho
detalle en absoluto en el nivel CCNA, debe llegar al nivel CCNP si desea aprender sobre BGP. Por lo tanto, normalmente aprende sobre IGP o protocolos de puerta de enlace interior
, como OSPF o EIRGP, o IS-IS que se ejecutan dentro de una organización o dentro de un sistema autónomo, y luego aprende sobre BGP, que se ejecuta entre sistemas autónomos. Por lo tanto, sus ISP o
proveedores de servicios de Internet ejecutan BGP porque anuncian
rutas de clientes a través de ellos o entre ISP.

Por lo tanto, los ISP de todo el mundo
recibirán rutas de otros ISP para habilitar básicamente la
conectividad a través de Internet global. Lo que intentamos hacer
aquí es inyectar rutas falsas o eliminar rutas de una tabla de enrutamiento BGP. Ahora, en este ejemplo, estoy ejecutando BGP localmente
en mi red doméstica, no voy a intentar
atacar Internet real porque no
quiero ir a la cárcel. Y no creo que tú
debas hacer lo mismo tampoco. Tenga en cuenta que ha habido casos de ISP en todo el mundo que inyectan ruta en la
tabla de enrutamiento global de Internet que desconecta las redes. Como ejemplo, ha
habido algunos casos famosos en los que YouTube se ha desconectado y varios otros sitios web conocidos porque varios ISP han inyectado rutas más específicas en
la tabla de enrutamiento BGP.

Y eso se ve afectado donde van los paquetes. Y el ISP quiere bloquear ciertas rutas. No aceptarán
direcciones RFC 1918 como ejemplo, ni tampoco direcciones IP
privadas, no deberían. Deberían limitar las
rutas que reciben , deberían ejecutar un (indistinto) , deberían hacer varias cosas para protegerse de un texto como el que voy a demostrar aquí. Ahora, los scripts que he
escrito aquí son bastante simples, pero me tomó un tiempo crearlos porque tuve que reescribir
el código para Python 3, es posible que encuentre algunos
ejemplos en Internet para Python 2.7, pero
ya no funcionan El código que he escrito aquí es específicamente para Python 3. ¿Cómo aprendo las cosas? Entiendo los protocolos. Usé Wireshark para capturar actualizaciones y luego, básicamente, forjé paquetes similares a los que
capturé de la red. Una de las mejores formas de aprender Scapy es básicamente capturar paquetes e intentar replicar lo que has visto.

Cubriré la introducción básica de Scapy
en un video separado. Una vez más,
hice que Kali se ejecutara dentro de una máquina virtual en esta computadora portátil con Windows. Está conectado a este
conmutador 3560CX en G0/3. También tengo dos enrutadores Cisco, uno aquí con la
dirección IP 192.168.1.246, y este enrutador 192.168.1.249 es en realidad mi enrutador
para acceder a Internet. Estoy ejecutando BGP entre estos dos enrutadores. Entonces, hay una relación BGP
entre esos dos enrutadores. Ahora hay una
infraestructura adicional aquí, que no estoy mostrando en esta tipología, que realmente no importa
desde el punto de vista de BGP porque BGP usa el puerto TCP 179.

Entonces, esencialmente hay una relación BGP a través de un grupo de dispositivos
entre estos dos enrutadores. . La infraestructura de capa dos realmente no importa en este ejemplo, simplemente necesito una sesión TCP
entre esos dos enrutadores, que tengo. Y lo que voy a hacer es rastrear paquetes
de esos enrutadores, manipular esos paquetes y enviarlos de regreso a la red. Ahora, esta sesión es TCP. Es una sesión de unidifusión. Por lo tanto, cambiar por defecto no reenviaría el tráfico a la máquina virtual Kali , enviaría el tráfico directamente entre esos dos enrutadores. Entonces este dispositivo
nunca vería el tráfico. Ahora, para resolver eso,
podríamos hacer varias cosas, podríamos usar escuchas telefónicas como estas. Aquí, tengo una escucha telefónica de gigabits, aquí tengo una escucha telefónica de 10, 100 megas. El problema con estas dos escuchas telefónicas es que en el puerto de monitoreo , este en el
puerto de monitoreo de aquí , solo envía tráfico
fuera de la interfaz , no permite que el tráfico se envíe de regreso a la red.

Así que podría enchufar dos cables aquí y luego oler el tráfico y monitorear el tráfico que sale de ese puerto , podría hacer algo muy
similar con este. Nuevamente, el problema con estas escuchas telefónicas es que me permiten monitorear el tráfico, pero no me permiten enviar tráfico de regreso a la red. Lo que queremos hacer es
monitorear el tráfico de estos enrutadores BGP, recibir el tráfico y
luego manipular los paquetes y enviarlos de regreso a la red para que los enrutadores hagan las cosas. Entonces, como ejemplo, quiero eliminar rutas
de la tabla de enrutamiento de este enrutador. Eso significa que necesito enviar
paquetes a la red, haciéndome pasar por este enrutador. Así que voy a pretender ser
246 y enviar paquetes a 249 y hacer que 249 elimine rutas
de su tabla de enrutamiento. O agregaré
rutas falsas a la tabla de enrutamiento, o restableceré la
relación de vecinos. Eso significa que
necesito usar un concentrador aquí. Entonces, podría usar un concentrador en
lugar de una escucha telefónica, el problema con los concentradores es que a menudo solo admiten
10 megabits por segundo, o lo que he hecho aquí
es configurar la duplicación de puertos, y voy a duplicar el tráfico de G0/1 uno a el dispositivo Kali y, a continuación, configure este puerto no solo para duplicar el tráfico,
sino también para recibirlo.

Así que me conectaré al conmutador 3560. Entonces, en mi switch 3560 show
run pipe include monitor. En los dispositivos Cisco, usamos estos comandos para determinar qué interfaces monitorear y dónde duplicar el tráfico. Así que monitoree la sesión uno,
esto es solo un número. La interfaz de origen es G0/1. Esa es esta interfaz
que conecta el conmutador a este enrutador en mi escritorio, ejecutando BGP. Esa es una vez más, la interfaz de origen, el destino del tráfico duplicado será G0/3. Esa es esta interfaz que conecta el conmutador a
la máquina virtual Kali. Por lo tanto, ofrecemos
tráfico de esta interfaz fuera de esta interfaz como
tráfico sin etiquetar en la vlan 1, pero también permitiremos el tráfico de entrada.

Eso es muy importante, queremos permitir que el tráfico
de la máquina Kali regrese a la red. Por lo tanto, debe tener un interruptor donde pueda
configurarlo como el siguiente para que básicamente pueda acceder a la red. Entonces toque la conexión
entre los dos enrutadores o necesita un concentrador, o
necesita algún tipo de escucha telefónica para ver el tráfico
entre esos dos enrutadores.

Así que eso es lo primero
que tienes que hacer. Debe tener visibilidad del tráfico entre los dos enrutadores. Y esto me da esa visibilidad. Bien, ahora que hemos
hecho eso, lo que podemos hacer es conectar Kali al adaptador de ethernet en la computadora con Windows, y
eso es lo que he hecho aquí. Estoy conectando la
máquina virtual a este adaptador, que conecta la computadora portátil al
puerto tres en el conmutador de Cisco. Y ahora que lo ha hecho , puede inyectar
tráfico en la red. Así que tengo tres scripts una vez más, el primer script es para restablecer
las relaciones con los vecinos, el segundo script es para eliminar una
ruta de la tabla de enrutamiento y el tercer script es
para inyectar una ruta falsa en la tabla de enrutamiento BGP.

Comencemos con el restablecimiento
de las relaciones vecinales. Bien, entonces en mi primer script,
voy a importar Scapy. Voy a importar BGP. He creado un bucle en el que estoy eliminando un paquete del cable. Básicamente, estoy buscando un
paquete TCP con un destino de 192.168.1.249. Así que básicamente estoy olfateando
paquetes de este enrutador que van a mi enrutador de Internet . Voy a capturar uno de esos paquetes y luego voy a
crear un paquete falsificado. Necesito capturar un paquete del cable de la sesión BGP real, porque no sé cuáles
son los números de secuencia que usan los enrutadores. Entonces, en todas mis secuencias de comandos, estoy
capturando un paquete del cable para poder ver los números de secuencia TCP y los números de acto que
usan los enrutadores. Pero básicamente, también necesitamos conocer los puertos de origen y destino. BGP usa el puerto 179, pero depende de qué
enrutador inicie la sesión. Si el enrutador uno habla con el enrutador dos , podría iniciar la sesión en el puerto 179. Pero si el enrutador dos inicia
la sesión en el enrutador uno, el destino es el 179 de este lado.

Entonces, número de puerto aleatorio, sesión iniciada en el
número de puerto conocido 179. Pero si este sitio inicia la sesión , será un número de puerto aleatorio
yendo a 179 en este enrutador. Entonces, la dirección de quién
configuró la sesión inicial determina qué lado está
usando el puerto número 179. Así que voy a crear un nuevo marco de ethernet. Estableceré la dirección Mac de destino en la dirección Mac que se
capturó en el marco BGP. Voy a configurar la dirección Mac de origen en la dirección Mac
capturada en el marco BGP. Básicamente, estoy creando
un marco en la capa dos que imita la sesión real
entre los dos enrutadores. También estoy cambiando el tipo de ethernet, y ahora voy a cambiar los
puertos de origen y destino de PCP a los números de puerto que
usan los enrutadores. Luego voy a especificar
el número de secuencia, pero voy a incrementar
el número de secuencia en función de este bucle. Así que sé cuál es el número de secuencia cuando capturo el paquete, pero lo que estoy haciendo ahora
es simplemente incrementarlo y enviar paquetes al enrutador, con suerte obteniendo un
número de secuencia que sea válido.

También estoy especificando el
número de reconocimiento. Y luego voy a especificar
la dirección IP de origen y la dirección IP de destino. Ahora, si conoce BGP,
si sabe cómo piratear , probablemente podría mejorar estos scripts, pero esto es lo que funcionó y estoy feliz con
fines de demostración. Lo que hice entonces fue crear un paquete. Así que estoy especificando que el
restablecimiento de BGP será un paquete IP. La dirección
IP de origen será esta fuente de IP, que obtuve del paquete original. La dirección IP de destino
será la dirección IP que una vez más
capturé del paquete, TTL o el tiempo de vida que voy a establecer en uno, esta es una continuación de línea.

Así que en realidad esta es una larga línea de texto, pero para hacerlo más fácil,
hice una barra invertida allí. Esta es una capa tres. Esto en Scapy significa siguiente capa. Entonces, la siguiente capa es TCP. El número de puerto de
destino será el número de puerto que se lee del paquete. El número de puerto de
origen será mi puerto de origen. Ahora podría apuntar directamente
al cuadro original. He creado variables que facilitan la
explicación de lo que está pasando aquí. Por lo tanto, los números de puerto de origen y destino en el encabezado TCP se configurarán de la siguiente manera. Estoy configurando las banderas en PA, el número de secuencia es el
número de secuencia que calculamos.

Pero recuerde, esto es incremental, el número de reconocimiento es
el número de reconocimiento que tomamos
del paquete de allí. La siguiente capa será el encabezado BGP. Ahora, el mercado aquí
generalmente se escribe en F, lo he escrito de la siguiente manera,
el equivalente decimal. Fíjate, así es como se ve
en una captura de Wireshark. Entonces, una vez más, si quiere saber qué
poner en un paquete Scapy, capture paquetes en Wireshark y luego puede completar los detalles. Así que especifiqué, por ejemplo, el número de puerto de origen y de destino
, el reconocimiento del número de secuencia y la longitud. Puede ver esa información aquí, con una longitud ligeramente diferente aquí, porque este es un mensaje de reinicio en lugar de un
mensaje de actualización, el tipo está configurado en tres, porque eso es un reinicio. El mensaje de actualización tiene un tipo de dos, pero estoy enviando un mensaje de reinicio en lugar de un
mensaje de actualización o de mantener vivo. Aviso, mantener vivo es
para el mensaje de actualización aquí, es para enviar un reinicio.

Entonces eso básicamente será enviado. Sendp es una forma de Scapy de
enviar una capa a un marco. Así que estoy enviando el cuadro,
que es el cuadro uno, que creé aquí
basado en el cuadro original. Y luego estoy poniendo bgp_reset en eso. Así que básicamente es la capa dos, la capa tres, que es la capa IP aquí, la capa cuatro y luego BGP encima de eso. Así que estoy apilando esas capas y luego las estoy enviando a la red. Pero solo para mostrarles cómo se ve, aquí tengo algunos comandos show
que muestran el marco, así que muestra la capa dos y luego
muestra el mensaje de reinicio de BGP inactivo durante un segundo
y luego una vuelta en bucle. Ahora, la razón por la que tengo que repetir aquí es que si la relación BGP se restablece, quiero tomar otro
marco cuando el enrutador BGP intente restablecer la relación.

Tome eso y luego envíe
mensajes más recientes para que se reinicie nuevamente. Bien, ahí está nuestro guión. En Linux, abriré una terminal. Usemos nano solo porque es fácil y crearé un
script de Python llamado bgphack1.py. Ahora Kali viene con Scapy preinstalado, por lo que no tiene que instalarlo solo. Salva eso. Y lo que puedo hacer ahora es
básicamente ejecutar mi script de Python. Ahora, antes de ejecutar ese script, echemos un vistazo al enrutador. Entonces, en mi enrutador, 1941, este es el enrutador que realmente me conecta a Internet. Mostrar ip bgp. Puedes ver que he
aprendido algunas rutas BGP. La identificación del enrutador es 192.168.3.249. Tengo una ruta predeterminada
para llegar a Internet. Aprendí varias rutas
del vecino 192.168.1.246, que es este enrutador en mi escritorio. Si me conecto a ese enrutador e inicio sesión. Este es un ISR4321 show ip bgp. Puede ver que es
una ruta aprendida aquí desde 192.168.1.249. Esa es su ruta predeterminada
para llegar a Internet.

Como ejemplo, este enrutador
puede hacer ping a google.com. Entonces, de vuelta en el primer
enrutador, muestre el resumen de ip bgp. Esto me muestra que el enrutador
tiene una relación de vecino con 192.168.1246. Ha estado activo durante aproximadamente dos
horas, recibió cinco prefijos. De vuelta en 246, muestre el resumen de ip bgp. Obtuve nuestra relación de vecino
a 192.168.1.249. También estado despierto durante unas dos horas. Eso básicamente nos muestra la relación entre los dos enrutadores para monitorear las cosas que están sucediendo. Depurar ip bgp. Eso nos permitirá ver
qué está pasando con bgp. Con suerte, veremos que la
relación de vecino se restablece a través de mensajes de depuración. Y también vea que el temporizador se reinicia. Así que eso es lo que es en este momento. Esos son los mensajes enviados y recibidos. Así que ejecutemos nuestro script de piratería. Ahora lo que debe hacer es capturar
algunos paquetes del cable. Por lo tanto, necesita ver el tráfico
enviado entre los dos enrutadores. En BGP, eso puede llevar un tiempo. BGP no envía muchos mensajes de un enrutador a otro.

Bien, ahí lo tienes,
algo sucedió y estamos enviando
paquetes a la red. Y fíjense aquí, algo está pasando. Se queja de un error de sincronización. Pasamos de establecido a cierre, se envió mensaje de notificación. Cierra a menudo la notificación. Eliminamos cosas de la tabla de enrutamiento y notamos que al usar el comando nuevamente, podemos ver que la relación está inactiva. La relación se está formando de nuevo. Así que están negociando
para establecer una relación. Y una vez más, podemos ver
que ha estado activo durante 13 segundos, ahora durante 32 segundos.

Entonces logré que la
relación de vecino entre esos dos enrutadores restableciera el motivo por el que enviaba
mensajes de notificación. Ahora vamos a ejecutar eso de nuevo. Así que ejecútalo de nuevo. Es a los 52 segundos. Ahora se está reiniciando de nuevo. Observe cinco segundos
, está inactivo en este momento. Mostrar ip bgp. Se han perdido rutas. No vemos 192.168. 1.249 es un vecino. Ahora lo hacemos, por lo que puede ver
que se muestran un montón de mensajes. Ahora vemos las rutas desde 192.168.1.246. Así que hice que esta
relación de vecinos se reiniciara. Observe 24 segundos en este
punto, lo ejecutaré nuevamente. Podrías dejar las escrituras ejecutándose y las estoy rompiendo solo para intentar que esto suceda rápidamente, pero podrías dejarlas ejecutándose y establecer el ciclo en un valor para que
busque mensajes constantemente y luego envíe mensajes de reinicio. Por el momento, 53 segundos. La relación ha terminado, pero observe que
ahora se está rompiendo de nuevo. Fue a cuatro segundos. Mostrar ip bgp. Las rutas se están aprendiendo.

Fui demasiado lento allí,
puedes ver las actualizaciones de ruta. Puede ver
que se intercambiaron las capacidades. Así que logré restablecer la
relación de vecino. Bien, entonces este video se está haciendo demasiado largo, este es un video muy largo. Les mostraré los otros
guiones en videos separados, porque esto es muy largo. Básicamente, mi script simple aquí ha enviado un mensaje de reinicio de BGP
a la red para restablecer la relación de vecino. En el siguiente video, le mostraré cómo eliminar una
ruta de la tabla de enrutamiento. Ahora, si está viendo
demasiados de esos mensajes , en realidad restablecerá la
relación de vecino. (música ambiental alegre).

As found on YouTube