Mostrando entradas con la etiqueta Kali Linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta Kali Linux. Mostrar todas las entradas

martes, mayo 20, 2025

Entre Marilyn & Manson: Vulnerando IPv6 con Man-in-the-middle usando NDP en la red de tu casa con Kali Linux

IPv6 es un acrónimo alfanumérico de cuatro caracteres de longitud que, a su “descompresión” viene a decir/representar: Internet Protocol version 6 ¿Se puede “comprimir”/acortar más? Esa es la idea… El objetivo es lograr una reducción a su mitad, tal que: IP. Dejando a un lado (u obviando) su versionado.


Podría describirse la palabra versión como sustantivo femenino que se refiere a la forma o variante particular de algo, especialmente cuando existen varias alternativas o modificaciones de un mismo objeto, texto, idea o producto. En un contexto tecnológico, puede haber un par de motivos para destacar/resaltar una versión frente a un protocolo;
  • Mismo protocolo pero con grandes diferencias en funcionalidades y capacidades (nuevas y/o mejoradas).
  • Convertirse en deprecado debido a un agujero, fallo de seguridad lo suficientemente grave como para hacerse hincapié sobre ello y movilizar a los recursos necesarios para erradicarse o ser cambiado mediante una actualización, etc.
En este caso, el motivo en IPv6 es el primero descrito. Todavía a día de hoy, no hemos podido hacernos con la misión, no hemos sido capaces de resolver el problema y quedarnos con la versión actual. Según calendario, llevamos con “el pez que se muerde la cola” desde 2010 aproximadamente a un modo de alerta recurrente. Tal vez sea lo más parecido a la escasez del petróleo en este actual siglo ¿Y... cómo ponemos solución al remedio?

IPv6 Council al Rescate

La IPv6 Council es una asociación, grupo de interés sin ánimo de lucro con espíritu muy colaborativo, portadora de ideas, ganas de promocionar, dar soporte... con el afán de “apadrinar” a la “sexta elementa” para poner a España a la vanguardia tecnológica haciendo uso de la versión “moderna” del protocolo IP.
Liderado por Carlos Ralli, Fran Gómez y Rafa Sánchez, se mira de hacer todo lo posible para hacer llegar preocupaciones, tácticas de encaje con dinamismo y posturas flexibles al extenso ámbito tecnológico, ya que, la IP es un pilar básico de cualquier dispositivo digital (como toda la “cacharrería” de los IoT).

Figura 3: Foto de la ponencia IPv6 Council llamada “Firechat - Coloquio: entendiendo Shadow-IPv6 como viento a favor” en MTW/OpenExpo con Tony de la FuenteCarlos Ralli, Federico TetiChema AlonsoFran Gómez y Rafa Sánchez

Sin ir más lejos, en este mismo mes de Mayo han estado presencialmente en el congreso MetaWorld Congress [MTW]/OpenExpo celebrado en la La Nave de Madrid.

Escasa Documentación

Lamentablemente, no se dispone de mucha documentación al respecto a día de hoy. La IPv6 Council toma como referencia el libro Ataques en redes de datos IPv4 e IPv6 publicado por 0xWord y escrito por Juan Luis García Rambla, Chema Alonso y Pablo González

JL. Rambla, ampliado y revisado por Pablo González y Chema Alonso

Al tratarse de ataques tanto en IP “clásica” como en IPv6, tienen que explicar sus bases de raíz para tener un mínimo contexto. Si le echáis un vistazo al índice podréis ver los conceptos en su capítulo V, apartado 5.1, “Conceptos básicos sobre IPv6”.


En la charla impartida en MTW/OpenExpo (en la sala Microsoft RoomChema Alonso estuvo comentando acerca de la preocupación por no disponerse de mucha materia sobre el tema. Mencionó uno de los últimos libros escritos por la editorial: “Hacking Home Devices I: PoCs & Hacks Just for Fun” & “Hacking Home Devices II: PoCs & Hacks Just for Fun” escritos por Gerard Fuguet (escritos por mí ;) ) y antes de que siguiera hablando, yo, levanté la mano… “Ah que estás aquí” dijo el Dr. dr. Maligno
Sí, efectivamente, comenté que en este par de libros, como una de la tareas principales era analizar el tráfico que fluía por los dispositivos que tienes en tu hogar, primero debes de conocerlos bien, hacer un “PreCheckeo: I&I, Identificación e Inventariado” (apartado 2 del capítulo III del primer libro de Hacking Home Devices), tal y como puedes ver en el índice que te dejo a continuación.

Figura 7: Índice del libro Hacking Home Devices I: PoCs & Hack Just for Fun!
Escrito por Gerard Fuguet.

Y te vas dando cuenta que IPv6 es también una protagonista notoria que se aposenta en tu red como telarañas discretas en un hogar. Sobretodo la presencia automática e obligatoria de Link-Local (sí, aquella que empieza con el prefijo fe80::…) Si ejecutas un ipconfig en el “ventanal negro” y la ves, es señal de que tienes en activo IPv6 (by default es así).

Primero aprende la primera versión de la IP (IPv4)

Cualquier docente mínimamente cualificado te dirá que antes de aventurarte con IPv6, primero debes entender bien su funcionamiento estudiando su hermana menor, la IPv4. Podríamos explicarlo en este artículo, pero se haría muy largo… por eso, me siento en la obligación de recomendar un libro realmente bueno para aprender de IP y de otros conceptos informáticos elementales (y no tan elementales). El libro de David Casas de Competencia Digital.


Te bastará solo con su lectura para entender bien su composición, tipos de IP, rango, subredes… ¿Y no habla luego de IPv6? Sí, por supuesto, pero no se potencia en detalle como IPv4 porque su interés es primero en entender bien las bases de una IP. A pesar de sus diferencias respecto a la clásica IP, la construcción de la versión 6 se hace de manera similar, pero éstas son mas bien un “choricillo” (como bien menciona David Casas) de longitud, precisamente para abarcar con muchísimas más IP’s disponibles que con IPv4 (pasando de 32 a 128 bit en la sexta versión). 

Hacking en redes de datos IPv6: Conceptos básicos IPv6 (1)
Hacking en redes de datos IPv6: Conceptos básicos IPv6 (2)
Hacking en redes de datos IPv6: Te hackearán por IPv6 por creer que no lo usas
Hacking en redes de datos IPv6: Neighbor Spoofing
Hacking en redes de datos IPv6: Captura de SMB con Neighbor Spoofing
Hacking en redes de datos IPv6: FC00::1 (Algunos) Ataques en redes de datos
Hacking en redes de datos IPv6: Man in the middle en redes IPv4 usando IPv6
Hacking en redes de datos IPv6: Desactivar IPv6 para evitar D.O.S. SLAAC
Hacking en redes de datos IPv6: Topera - Scanner de puertos sobre IPv6
Hacking en redes de datos IPv6: Predecir direcciones IPv6 Local-Link de OS X
Hacking en redes de datos IPv6: Ataques en redes de datos IPv 4 e IPv6
Hacking en redes de datos IPv6: Evil FOCA: Ataque SLAAC
Hacking en redes de datos IPv6: Evil FOCA: Bridging HTTP(IPv6) - HTTPs (IPv4)
Hacking en redes de datos IPv6: Pasar de IPv4 a IPv6 con una respuesta DNS
Hacking en redes de datos IPv6: Cómo activar IPv6 en Google Chrome
Hacking en redes de datos IPv4: Ataque DHCP ACK Injector

No obstante, si quieres aprender todos los conceptos de IPv6, en este blog tienes esta serie de artículos que hizo Chema Alonso durante tiempo preparando su charla de Defcon 21 de "Fear the Evil FOCA: Attacking Internet connection with IPv6" que podéis ver también en Español cuando la impartió en Ekoparty.


Figura 9: "Fear the Evil FOCA: Attacking Internet connection with IPv6"

Aún así,  estoy bastante convencido, que si llega el día de la extinción al completo de IPv4, todavía perdurará en los libros y documentación en Internet para facilitar su enseñanza, aunque existen grandes diferencias de funcionamiento después con IPv6 que debes aprender.

Las IPv6 de tu casa

Como se ha descrito antes, puedes saber si tu sistema operativo como Windows usa IPv6 y qué dirección toma. Si sabes como van las IPv4, las direcciones IPv6 de Link-Local (con prefijo fe80::/10) se asignan automáticamente a toda interfaz de red con IPv6 habilitado, son obligatorias y sólo funcionan dentro del segmento de red local. 

Escrito por Gerard Fuguet.

Se utilizan para funciones esenciales como la auto-configuración, el descubrimiento de vecinos (NDP) y la comunicación local entre dispositivos. Aunque tradicionalmente la parte identificadora podía derivarse de la MAC (EUI-64), hoy en día muchos sistemas operativos emplean métodos aleatorios para mayor privacidad.

Figura 11: Índice del libro Hacking Home Devices II: PoCs & Hack Just for Fun!
Escrito por Gerard Fuguet

La unicidad de la dirección se verifica mediante NDP, y no son enrutables fuera del enlace local, igual que las direcciones APIPA en IPv4, aunque en IPv6 su presencia es universal y no sólo ante fallos de DHCPSupongamos que tu equipo toma esta dirección IPv6:

fe80::9a94:43a9:9ff4:6981

Como se expresa en hexadecimal, las letras-números válidos son de 0-9 y A-F. Cada casillon de la IPv6 se compone de 4 dígitos hexadecimales y cada carácter hexadecimal representa 4 bit. Por lo tanto, cada casillón obtiene 16 bit en grupos de 8 casillones. Pero espera… ¿por qué yo aquí sólo veo 5 grupos? Cuando los grupos están a “0” se suele expresar/interpretar con doble -dos puntos- “::”. Esta IPv6 se expresaría así;

fe80:0000:0000:0000:9a94:43a9:9ff4:6981

Vale entiendo… pero y esto de la /10? Al igual que IPv4 con sus máscaras, el estándar dice que las Link-Local, pueden ir de la fe80:: a la febf:: . Esto es simple cuando descomponemos a binario (de hexadecimal a binario).

fe80:: seria 1111 1110 1000 0000
febf:: seria 1111 1110 1011 1111

La parte subrayada es la que contempla/hace referencia a la red y es intocable. El resto pertenece a la parte de host (recuerda entender bien IPv4 para saber como va el “rollete” ;) ). En la practica (por el momento) se utiliza la notación de máscara /64 por lo que el prefijo fe80:: siempre será impuesto en toda Link-Local. Es decir, en el ejemplo de la IPv6 Link-Local:

fe80:0000:0000:0000:9a94:43a9:9ff4:6981

Será inmóvil sus 4 primeros grupos. Una de mis reglas mnemotécnicas preferidas es hacer uso de la calculadora de Windows, sobretodo para esclarecer la parte de net y la de host.

Figura 12: Rango de IPv6 Link-Local haciendo
uso de la Calculadora de Windows

Se estipula en modo programador, en notación hexadecimal y teclado numérico de alternancia de bits. La parte roja hace referencia a la parte de red, que son sus primeros 10 bit inmóviles (/10) y la parte verde la de host, donde se conmutan todos los bits a “1” para saber su rango máximo en su primer casillón de 16 bits. Lo bueno de la calculadora, es que te permite conmutar cada bit a clic de ratón (parece una tontería, pero refuerza el entendimiento para su comprensión). Nota: Cómo se muestra en la figura, puedes también ejecutar más de una instancia de calculadora al mismo tiempo.

¿Y que más tipos IPv6 prefijadas puedo ver en casa?

Aquí te dejo este “chuletón” de llamadas/peticiones multicast interesantes:
  • ff02::1: Es la dirección multicast de todos los nodos en el segmento local. Todo dispositivo IPv6 la escucha.
  • ff02::1:2: Es la dirección multicast para todos los servidores DHCPv6 en el segmento local.
  • ff02::1:3: Es la dirección multicast usada por LLMNR (Link-Local Multicast Name Resolution) en IPv6, en el puerto 5355.
  • ff02::1:ffxx:xxxx (Solicited-Node Multicast): Es la dirección multicast generada automáticamente por cada host IPv6 para facilitar la resolución de direcciones (Neighbor Discovery Protocol, NDP), similar al ARP en IPv4, pero usando ICMPv6. El rango es ff02::1:ff00:0/104, y los últimos 24 bits corresponden a los últimos 24 bits de la dirección IPv6 del host.
  • ff02::2: Es la dirección multicast de todos los routers IPv6 en el segmento local.
  • ff02::c: Se utiliza para el descubrimiento de servicios SSDP (Simple Service Discovery Protocol), típicamente en el puerto 1900.
  • ff02::16: Es la dirección multicast para MLDv2 (Multicast Listener Discovery versión 2), usada por routers para saber qué dispositivos escuchan tráfico multicast.
  • ff02::fb: Es la dirección multicast utilizada por mDNS (Multicast DNS) en IPv6, puerto 5353.
Un Vídeo MitM como excusa para dar bombo a IPv6

La verdad es que esto del vídeo ha sido una “alineación de astros y planetas” en toda regla y salió en un momento bastante oportuno. Os explico a modo resumen como se gestó esto.Yo participo en el chat público de El lado del mal en MyPublicInbox. Marta Tobarias me comentó que tenía un blog de ciberseguridad y me dijo que si pudiese darle un poco de “feedback” estaría genial. Me llamó la atención uno sobre Neighbor Spoofing en IPv6. Y buscando en YouTube a mí no me acababan de llenar los vídeos sobre este tema concreto (que igual no busqué en profundidad…). 

Yo sabía bien de su funcionamiento, por. las charlas y artículos de Chema Alonso y la Evil Foca. Y le dije a Marta que le haría un vídeo intentándolo explicar bien y hacerlo un poco divertido. A este proyecto se sumó Maria Gomez Prieto que quería meterle mano, un lavado digital para romper la aburrida barrera informática de comandos y paquetes, locos protocolos… que seria OK para los más entendidos pero no tan bien para quien está aprendiendo seguridad informática (ya sabéis que este tipo de videos suelen ser en su mayoría “feos”, poco estéticos y aburridos ¡Para que engañarnos!).

Figura 14: Los culpables de que se haya hecho este artículo y vídeo. 

Yo a María la conocí en su pedazo de artículo sobre "Cómo recuperar juegos creados en Flash usando Ruffle", me sorprendió mucho su manejo en la edición de vídeos y la destreza en barajar los bits como pelar patatas para freírlas, o para acabar haciendo tortilla a la española… es decir, fue como recuperar una receta perdida y modificarla para reemplazar con ingredientes que no se tienen (o que son más fáciles de encontrar). Me contentó mucho cuando la vi por el chat, y me convertí en una especie de fan (admiro mucho su trabajo). Tal es así que nos conocimos en persona en la MTW/OpenExpo junto a otro miembro del chat, a Mikeldi.

Figura 15: Posando frente a un Delorean de Bit2MeGerard Fuguet (izquierda)
con Maria Gomez Prieto y Mikeldi en la MTW/OpenExpo 2025

María me bautizó en el chat como Mr. Fuguet, yo a ella como Lady Maria y María a Marta como Miss Marta. Con Lady Maria tengo muy buena afinidad, similar humor, etcétera. De igual modo con Mikeldi, persona espectacular y bondadosa. Me sentí muy bien y querido, estoy muy contento por hacer amistad con gente con la que tienes mucho de lo que compartir, todo gracias a ELDM y el chat que ha sido el punto de unión.

¡Y volviendo al vídeo! No es nada nuevo pero creo que ha quedado una obra maestra la cual todo el mérito, para nada es mío… Como os he dicho, la colaboración ha generado un producto que creo que es de muy buena calidad. Os presento, en esta foto, a los actores que participan y hablamos de sus roles ;)

Figura 16: Los actores del vídeo IPv6 con MitM con NDP
  • Izquierda-arriba: Tenemos a Manson quien actúa de mero servidor FTP (sí, sin “s” ¡OJO!) bajo Windows 10. Se va a quedar todo el tiempo calladito :D
  • Abajo-izquierda-derecha: La dulce y atractiva Marilyn, es la víctima en este escenario de juego. Quien se comunica con el FTP de Manson.
  • En el centro (¡y pa dentro!): Tenemos a Kalimera. Que le encanta el Kalimocho y cuando bebe se pone a “ciberdelinquir” un rato :P Le encanta disfrazarse para pasar desapercibida (arriba-derecha en la foto).
Las características del laboratorio son simples. Todo se corre en VirtualBox. La red usada (donde se unen todas las máquinas) es de tipo interna. Se estipula la IPv4 a modo estático en cada una de las máquinas. Tanto Marilyn como Manson usan Windows 10 de 32 bit (el motivo es para no consumir muchos recursos) que están actualizadas al máximo con su Win Update a FULL y firewall activo “By Default”, únicamente se le ha permitido la regla de FTP de entrada en la máquina de Manson
Y como no, una Kali versión 2022.3 (no muy actual pero suficiente). Las herramientas de ataque usadas vienen incluidas en Kali, son atk6-parasite6 (para verlo pasivamente) y atk6-fake_advertise6 (modo activo). No tiene sentido que os describa todo el vídeo aquí en este post, ya que “habla” por sí solo (incluida la descripción del mismo, que he agotado al máximo los 5000 caracteres que permite YouTube). Pero sí me parece interesante contarte algo que no se diga en él.

La intención de esta figura es mostrar las relaciones de IPv6 y partes de ella con la zona prefijada de MAC’s que surgen en el momento de acogerse a una IPv6 Link-Local por la “inocenteMarilyn y el rellenado de su tabla caché (relación IPv6 y MAC) cuando necesita, además, obtener la MAC de un host destino (y lo pide muy amablemente la señorita).

Figura 18: Solicited-node Multicast Address. Vista de Wireshark
y tabla de cache de los vecinos en cmd de la víctima

Antes se ha mencionado que cada host crea obligatoriamente una dirección Solicited-node Multicast. En la figura, primero se ha generado la Solicited-node Multicast - última línea en cmd - del propio host. Como se observa, los últimos 6 caracteres hexadecimales concuerdan con los últimos 6 de la MAC (lo cuál no indica su MAC real de host, se estipula para consultar sí coincide con la solicitud del contrario que intenta comunicarse con Marilyn en dicho mecanismo).


El primer paquete que aparece en la figura, el número 14, se hace uso de este mismo sistema, en su capa de datos se puede ver cómo se pide la IPv6 - Target Address - de Manson. Luego, en la ventana cmd, se genera una segunda línea por encima de su propia generada al crearse su Link-Local, Solicited-node Multicast para “dejarlo por escrito” (como un log/registro) ¿Se esclarece el enigma mejor viendo los paquetes de red?

Figura 20: Entre Marilyn & Manson: Vulnerando IPv6 con
Man-in-the-middle usando NDP en la red de tu casa con Kali Linux

Y llegó el momento de ver el vídeo de todo este embrollo… Puedes hacerte unas palomitas si lo deseas porque te prometo, que en estos casi treinta minutos, se te pasarán rápidos, como ver una película en tu mejor cine - en tu propia casa, a tus anchas, a tus comodidades y tus reglas -.  ¡¿Preparad@?! LET’S GO!!!

And Remember… Be Good. Be Hackers!!!



martes, septiembre 10, 2024

Cómo crear un volcado de procesos en GNU/Linux y buscar "leaks" de información

Hacía tiempo que no pasaba por aquí para poder escribir sobre inquietudes tecnológicas o pequeñas pruebas de concepto que pueden surgir en el día a día. Todos conocemos diferentes herramientas de volcado de procesos de memoria. Por ejemplo, Volatility, que es una de mis favoritas por todo lo que ofrece y aporta en el análisis de un volcado de memoria.

Figura 1: Cómo crear un volcado de procesos en GNU/Linux
y buscar "leaks" de información con Volatility

Volatility no es la única herramienta que se tiene, se tienen otras muchas que aportan en mayor o menor medida diferentes posibilidades, otra opción es gcore. Revisando un poco lo que ofrece /proc en los sistemas GNU/Linux se pueden sacar muchas cosas interesantes. Entre ellas, se puede leer directamente de la memoria de un proceso. Casi como si fuera un fichero. No exactamente como en un fichero, pero le estuve dando vueltas. Al final es una forma sencilla de poder leer qué información hay dentro de un proceso.

Figura 2: Linux Exploiting

Se sabe que, en un proceso, hay elementos que están compartidos con otros procesos. Se sabe que hay páginas de memoria que tienen ciertos permisos y otras otros. Aquí es donde hablamos de lectura, escritura, ejecución. Decidí revisar más sobre este tema y preparar una pequeña prueba de concepto con Bash (un ejemplo de lo que se puede hacer con este lenguaje en GNU/Linux).

Gestión del memoria en sistemas GNU/Linux   

Antes de hablar de la prueba de concepto, vamos a pararos a estudiar un poco sobre /proc y lo que ofrece en términos de información sobre los procesos. Sabemos que /proc es un directorio especial, ya que almacena información sobre elementos volátiles (como es la memoria). Lo primero que nos puede llamar la atención es que si hago un ls sobre el directorio podremos visualizar un montón de “carpetas” con números. Estas carpetas son el ID de los procesos que hay en ejecución en la máquina.

Figura 3: /proc en GNU/Linux

¿Qué información se puede sacar de la memoria de un proceso? Cualquier cosa que esté ahí y no esté protegida (y mucha no lo estará). Para esta pequeña prueba de concepto vamos a abrir un mousepad (el bloc de notas al uso en GNU/Linux) y vamos a introducir algo de texto. Todo lo que se escribe debe estar en memoria. De eso no hay duda. Hay que recordar que la memoria es un elemento volátil, por lo que puede pasar que esté, pero con el tiempo no lo esté. En este caso, el proceso del mousepad recibe el PID 2477 por parte del sistema operativo. Vamos a acceder al directorio de /proc/2477, que es el que corresponde al proceso que hemos ejecutado.

Figura 4: /Proc/2477

Aquí encontramos bastante información interesante sobre el proceso, que nos daría para otro artículo, pero vamos a centrarnos en mem y en maps. El fichero mem nos dará acceso directo a la lectura del proceso en memoria, en crudo. Por otro lado, el fichero maps almacena todas las direcciones de lo que hay cargado en memoria sobre el proceso y nos indica las direcciones base y el offset de las páginas. Vamos a revisar un poco el fichero maps:

Figura 5: Cat maps

En este fichero, se puede ver en primer lugar la dirección de memoria dónde comienza y después del guión la dirección dónde finaliza. Esto es un ejemplo, no es todo lo que tiene en memoria el proceso mousepad que hemos ejecutado. Se puede ver dónde comienza la zona de heap (más abajo veríamos la stack), alguna librería cargada, etcétera. Se pueden ver fácilmente los permisos que existen y si son elementos compartidos. 
Este fichero da mucho juego si quieres recorrer la memoria de un proceso buscando información en diferentes zonas de la memoria. Bien, ahora vamos a ver el fichero mem. Si hacemos un cat mem, esto no va a funcionar, ya que es algo especial (y muy cambiable). Si se quiere leer de este fichero, se debe utilizar la herramienta dd para poder hacer una copia de un flujo de bytes. Para ello, se debe ejecutar la siguiente instrucción:

dd if=/proc/PID/mem bs=BLOCK_SIZE skip=$((DIRECCION_BASE))

 count=$((DIRECCION_TOPE – DIRECCON_BASE))

Con esto, copiamos desde la dirección que se le diga (saltamos a esa posición en memoria) y leeremos lo que indique count, que será la resta entre el tope de la página y el inicio. Si probamos a ejecutarlo, esto devolverá un gran flujo de bytes, la mayoría binario que no se podrá imprimir (ni leer). Aquí es donde empezará a tener sentido utilizar un binario como strings para poder filtrar entre lo que es imprimible y lo que no.

Figura 7: Volcado e impresión de bytes

Si aplicamos a esta salida el comando strings, la cosa cambiará mucho, tal y como se puede ver en la imagen, ya que eliminamos lo que no podemos entender de primeras y dejaremos lo que se puede analizar (strings).

Figura 8:  Strings

Para automatizar un poco todo, ya que recorrer el fichero maps a mano puede ser eterno, debido a todas las librerías y zonas de memoria que hay que recorrer en un proceso, pensé en hacer un pequeño script en Bash a modo de prueba (se puede crear una herramienta fácilmente, aunque ya hay algunas escritas en Python bastante interesantes).
El pseudocódigo del script es el siguiente:

Mientras haya líneas que leer en el fichero maps del proceso PID
Hacer
Obtengo dirección base
Obtengo dirección tope
Ejecuto dd para leer de memoria saltando a dirección base y con un count de la resta de tope y base
Aplico filtro de strings
Aplico filtro de elementos que estoy buscando
Fin_Hacer

Para verlo codificado en Bash os dejo la imagen. Es una PoC, muy PoC, ya que ni el PID se le pasa como argumento al script, ni hay un control mínimo de argumentos, pero queda claro que se puede automatizar.

Figura 10:  PoC en Bash

Puede ser interesante detener un proceso antes de hacer la lectura (no se ha dicho, pero lógicamente podrás leer procesos sobre los que tienes privilegios) de la memoria. Para esto se puede ejecutar un kill -SIGSTOP PID, mientras que para volver a ponerlo en marcha hay que ejecutar kill -SIGCONT PID. Hay un detalle en el script y es que hay que ponerle el “0x” a las direcciones que se leen desde el fichero maps, ya que se operará con ellas y debemos convertirlas en hexadecimal. 
En la imagen, se puede ver un ejemplo a mano de la búsqueda de la palabra “user:”. Con el script automatizamos este proceso y logramos buscarlo en cada zona o, incluso, para todos los procesos sobre los que tenemos privilegio.

Figura 12:  Búsqueda a mano de "user"

Con esto, llegamos al final del artículo. Lo mejor es poder entender cómo funciona la memoria y cómo poder leer sobre ella en busca de información jugosa en un Ethical Hacking. ¿Sería sencillo incorporarlo a nuestra mochila de pentester? Sí y, además, tiene un valor añadido como herramienta de post-explotación.

sábado, abril 13, 2024

On-The-Fly: Cómo hackear MQTT con Network Packet Manipulation en 1 minuto

La pasada MorterueloCON participé junto con Pablo González en las jornadas donde presentamos un nuevo módulo para nuestra herramienta 'on-the-fly' en el que habíamos estado trabajando días atrás.

Figura 1: On-The-Fly - Cómo hackear MQTT con Network Packet Manipulation en 1 minuto

'on-the-fly' es una proyecto del equipo de Ideas Locas que ofrece capacidades para realizar pruebas de pentesting en varios dominios (IoT, ICS & TI). Se trata de una herramienta innovadora al unir diferentes mundos que comparten un factor común: la red. Es Open Source, por lo que te animamos a participar activamente en el proyecto que puedes encontrar en su GitHub.


Si revisas el blog y has trabajado con la herramienta, habrás visto que hay un módulo para ‘on-the-fly’ para hacer Network Packet Manipulation, concretamente para manipular paquetes de MySQL al vuelo. En esta ocasión quisimos hacer lo mismo pero para manipular paquetes del protocolo MQTT, y así ampliar las capacidades que tienes para los proyectos de Ethical Hacking.

Figura 3: Libro de Ethical Hacking 2ª Edición
de Pablo González en 0xWord

Ahora hemos publicado este nuevo módulo y te explico como puedes ponerlo a prueba. El escenario es el siguiente:
  • Un broker MQTT que se encargue de hacer llegar los mensajes entre los diferentes clientes.
  • Dos clientes MQTT, uno que publicará el mensaje (que se manipulará en el aire) y otro cliente que esté suscrito al topic que recibirá el mensaje.
  • Una máquina con Kali Linux y herramienta ‘on-the-fly’ preparada.
  • El módulo de manipulación MQTT preparado y lanzado.
Debes saber que este tipo de módulos necesitan de otro módulo para que proporcione el tráfico, en este caso haciendo uso del módulo arp_spoof.

Montaje del broker

Para poner en marcha el broker de manera rápida puedes hacer uso de Docker con una imagen de mosquitto (puedes encontrarla en el Docker Hub):

$ docker run -it -p 1883:1883 -p 9001:9001 
-v mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto

Debes tener en cuenta que tienes que tener un fichero de configuración. En el ejemplo, mosquitto.conf se encuentra en local y se montará sobre la ruta /mosquitto/config/mosquitto.conf del contenedor. En el repositorio de GitHub de mosquitto puedes encontrar un ejemplo de configuración, además de tener la documentación oficial en el sitio web de mosquitto donde se explica con detalle cada uno de los parámetros de configuración posibles.

Para este caso, vamos a habilitar el puerto de escucha 1883 (por defecto para conexiones sin cifrar y sin autenticar) y el puerto 9001 (este se usará para una conexión a través de Web Socket, sin cifrar y sin autenticar). Esto se resume en un archivo de configuración que contenga las siguientes lineas:

listener 1883
listener 9001
protocol websockets

Ahora podemos lanzar el contenedor y hacer una prueba de conexión con el broker. Para ello necesitaremos un cliente, por ejemplo MQTTX. MQTTX es un cliente gráfico MQTT, es Open Source bajo una licencia Apache 2.0, y es multiplataforma, por lo que podemos usarlo con los principales sistemas operativos.

Figura 5: Nueva conexión en MQTTX

Al abrirlo tendremos que configurar una nueva conexión, indicando un nombre con el que se guardará en el listado de conexiones, un ID de cliente (que se auto-genera directamente en el cliente), y la dirección y puerto del host. Como nota, para la realización de la prueba de manipulación de paquetes debemos trabajar con la versión 3.1.1 del protocolo MQTT, que se puede indicar en las opciones avanzadas.

Ahora podemos crear una nueva suscripción para estar pendientes de todos los mensajes que se mandan a dicho "topic". Para este ejemplo vamos a suponer que hay una bombilla a la que se le puede cambiar el color cuando se publica sobre el topic ‘bulb/color’.

Figura 6: Suscripción al topic ‘bulb/color’

Con la suscripción creada, vamos a mandar un mensaje con un color, por ejemplo, blue, suponiendo que el dispositivo que estamos ejemplificando espera recibir este mensaje para cambiar su color.

Figura 7: Publicación de mensaje en el topic ‘bulb/color’

Al mandar y recibir el mensaje en el mismo cliente lo vemos como si fuera una conversación: a la derecha los mensajes enviados y a la izquierda los mensajes que se reciben. En ambos casos aparece el topic donde se ha mandado/recibido.

JL. Rambla, ampliado y revisado por Pablo González y Chema Alonso

Como ves, hacer uso del protocolo MQTT para intercambiar mensajes entre dispositivos es algo muy sencillo. Únicamente se debe disponer de un broker y de uno o varios clientes para realizar el intercambio.

MQTT Packet Manipulation PoC

Ahora que ya sabemos como funciona el protocolo MQTT, vamos a hacer uso del nuevo módulo de 'on-the-fly' para manipular estos paquetes en el aire.

Figura 9: Esquema manipulación de paquetes MQTT

Para empezar necesitamos hacer que el tráfico de una máquina víctima pase a través de nosotros, por lo que comenzamos haciendo uso del módulo arp_spoof, o cualquiera de las técnicas que se explican en el libro de Ataques en redes de datos IPv4&IPv6 (4ª Edición).

load modules/spoof/arp_spoof

En el ejemplo, conocemos la dirección IP de la víctima y del su puerta de enlace - "gateway" -, por lo que lo configuramos con el uso del comando set y lo ejecutamos con run.

Figura 10: Ejecución del módulo arp_spoof en Kali Linux

Con el ARP Spoofing en ejecución, cargamos el módulo de manipulación MQTT:

load modules/manipulation/mqtt_manipulation

Para este módulo hay que configurar dos parámetros:
  • mqtt_topic_modify: este valor indica el topic que se quiere escuchar para manipular su mensaje.
  • msg_spoof: este valor representa el nuevo mensaje que se quiere asignar.
De esta manera, en el ejemplo se ha indicado que se quiere escuchar el topic bulb/color y vamos a reemplazar cualquier mensaje por lime, por lo que vamos a cambiar cualquier color a éste.

Figura 11: Ejecución del módulo mqtt_manipulation en Kali Linux 

Por último, realizamos la prueba de funcionamiento. Nos dirigimos a la máquina víctima y realizamos la publicación de un nuevo color.

Figura 12: Manipulación en tiempo real de los paquetes MQTT

Si todo ha ido bien podremos observar que, aunque el mensaje que ha salido del cliente es correcto, la recepción que llega a la suscripción es el modificado por 'on-the-fly', por lo que hemos conseguido manipular el tráfico MQTT en tiempo real. En el siguiente video puedes ver la demostración completa del ejemplo.

Figura 13: PoC de Network Manipulación MQTT con 'on-the-fly'

Como ves, este módulo de manipulación de paquetes MQTT hace muy sencillo poder jugar con este protocolo, y propone otro caso de uso para un entorno IoT donde 'on-the-fly' tiene ya varios módulos disponibles.


 Esperamos que os haya gustado este artículo, y esperamos que lo utilicéis y nos aportéis ideas de mejoras, o que ayudéis a mejorar nuestro 'on-the-fly' con nuevos módulos.

miércoles, marzo 22, 2023

"iBombShell: Revolution". Sólo para Pentesters!

El pasado día 10 de Marzo participamos en RootedCON 2023 dónde tuvimos la oportunidad de presentar el trabajo que hemos trabajado desde hace un tiempo. La idea es la de proporcionar a los pentesters y desarrolladores el potencial de iBombShell y poder integrarlo con sus herramientas. 

Figura 1: "iBombShell: Revolution". Sólo para Pentesters!

De este modo podemos decir que iBombShell o el Core de ésta es una API que permitirá a los usuarios poder integrar lo que ellos quieran. Damos un pequeño repaso a esta presentación, comentando las principales novedades de iBombShell: Revolution.

¿Qué era iBombShell y que ha cambiado?

Ya se ha hablado largo y tendido sobre iBombShell en este blog, desde Euskalhack 2018 dónde mostramos la idea de lo que queríamos hacer, pasando por técnicas de post-explotación y el desarrollo de nuevos módulos para esta herramienta Open Source. Sin olvidarnos de uno de los momentos más importantes para iBombShell que fue la presentación en la BlackHat Eruope 2018 en Londres. O la incorporación de iBombShell a la C2Matrix, un hito más que interesante de este proyecto, el cual nos llena de orgullo y nos rellena la barra de la ilusión para hacer nuevas cosas.

Figura 2: iBombShell en GitHub

iBombShell Legacy tenía dos modos de funcionamiento, el llamado “Everywhere”, que permitía descargar a memoria, en apenas 4 pasos, una consola PowerShell con funciones útiles y dinámicas para un pentester, y que estuviera disponible en cualquier momento y en cualquier lugar.
Y, por otro lado, también se contaba con el llamado modo “Silently” que permitía conectar una instancia de iBombShell a un C2 escrito en Python y que podía ordenar de manera remota instrucciones creadas en los módulos de PowerShell.

Figura  4: iBombShell Legacy y sus modos Everywhere y Silently

Para la renovación de iBombShell, se quería cambiar completamente el modo de trabajo, centrándonos en hacer una herramienta más sencilla, fácilmente extensible, integrable con varios clientes y que fuera un componente que estuviera centralizado, de tal manera que un equipo de trabajo pueda utilizar una misma instancia de iBombShell para realizar sus pruebas. De esta manera, queremos destacar como principales novedades de la versión Revolution:
  • Nuevo iBombShell "apificado": Como se ha comentado anteriormente, iBombShell ahora es una gran API a la que llamamos Core. ¿Cómo interactuar con el Core? Vamos a desarrollar algunos clientes “oficiales” del proyecto, pero cualquier desarrollador o pentester podrá integrar sus necesidades directamente con el Core gracias al uso de la API.
  • Gestión total desde el CORE: El Core gestiona todo lo que sucede en iBombShell, es decir, si hay que cargar un módulo, si hay que ejecutarlo, si llega la conexión de un nuevo warrior, etcétera.
  • Gestión de usuarios: El Core es una plataforma multiusuario, pero de esto hablaremos en otro artículo para explicar cómo funcionan los roles y los usuarios en iBombShell.
  • Autenticación (JWT): Toda acción que deba ser autorizada utilizará un JWT. Esto es algo que creemos que es importante para la gestión de usuarios y lo que cada uno puede hacer.
  • Generación warriors (code / file): La generación de los Warriors, tal como ocurría en la ‘Legacy’ iBombShell se puede hacer tanto en código como en un fichero. Iremos mostrando algunos ejemplos de uso para que se entienda mejor.
  • Nueva consola para los warriors (PowerShell): Se ha implementado una nueva consola en Powershell para interactuar con el nuevo Core.
  • Facilidad de integración.
Arquitectura de iBomShell

La nueva arquitectura de iBombShell cuenta con una pieza central: el core. Este elemento realiza toda la gestión de los usuarios, los módulos, los warriors y las tareas. Para almacenar la información se apoya en una base de datos local SQLite, además de algunos diccionarios para almacenar en memoria los usuarios activos y los warriors en ejecución.


Todo esto es accesible y gestionable desde la API, de tal manera que es posible integrar distintos clientes como web, interfaces gráficas de usuario para distintas plataformas, consolas, o automatizar la generación de warriors y creación de tareas con scripts en Bash, Python, JavaScript…

Figura 6: Arquitectura de iBombShell

La API se ha dividido en 4 principales tags, los mismos que gestiona el core y, a través de la especificación OpenAPI, se puede acceder a su documentación y prueba de la misma. Algunas de las peticiones que se tienen disponibles a través de la API son:
  • /auth: Permite la autenticación de usuarios y la obtención de un JWT para usar la API.
  • /get_modules: Permite obtener los módulos, ordenados por categorías.
  • /generate: Solicita la generación de un nuevo warrior.
  • /create_task: Crea una nueva tarea asociada a un warrior.
  • /get_task_warrior: Solicitado por un warrior para obtener su tarea a ejecutar.
  • /put_task: Utilizado por el warrior para guardar los resultados de una tarea ejecutada.
  • /get_task_results: Utilizado por un cliente para obtener los resultados de una tarea ya ejecutada.
Iremos publicando más información sobre la API y la doc de ésta, cuando se libere el proyecto. A día de hoy, queremos implementar clientes oficiales para que el core de lo mejor de sí. 

Figura 7: Documentación de la API de iBombShell

Para la charla de RootedCON todo lo mostramos de integración fue desarrollado con pocos días para mostrar a los desarrolladores el potencial que la Apificación del Core de iBombShell proporcionaba y cómo podían integrar fácilmente scripts u otro tipo de herramientas.

Workflows

Para darle un sentido a todo, es necesario contar con algunos flujos de trabajo. Por ejemplo, en primer lugar, contar con un Token JWT para acceder a gran parte de la API. Para realizar esto, haremos una petición a /auth con un usuario y contraseña válidos, y obtendremos el JWT que utilizaremos, a partir de ahora, en la cabecera Authorization [Bearer] para hacer el resto de peticiones.



Figura 8: Flujo de trabajo de la autenticación del cliente

A continuación, podemos leer todos los módulos disponibles, definir los valores necesarios para utilizar distintos módulos u optar por generar un nuevo guerrero. Una vez que se dispone de un guerrero en ejecución es posible asignar tareas y esperar a que el warrior descargue las instrucciones para ejecutarse y devolver los resultados.

Figura 9: Flujo de trabajo de creación de nuevas tareas

El workflow del warrior es bastante sencillo ya que se basa en, primero el registro del nuevo warrior, y después hacer peticiones constantes al listener de iBombShell (Core) para consultar si tiene nuevas tareas asociadas a su identificador para descargarlas, ejecutarlas y mandar los resultados de nuevo al listener.

Figura 10: Flujo de trabajo del Warrior

Y esto es, a grandes rasgos, las novedades del nuevo iBombShell. Pronto tendremos más novedades e iremos mostrando algunas cosas. Este año es el año en el que iBombShell se reinventa y viene con la capacidad de dar el control al desarrollador. En el siguiente vídeo tienes una demostración completa de siete minutos de las principales funciones de iBombShell Revolution mezclada con Kali Linux y Metasploit. Sólo para pentesters.



El repositorio oficial de iBombShell en Github mantiene la versión ‘Legacy’ sobre la que no haremos cambios hasta que publiquemos la nueva versión. Y antes de acabar… Gracias Securiters por darnos la oportunidad de presentar nuestro trabajo en vuestro track.

Happy Hacking with iBombShell!

Autores: Pablo González Pérez escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root",  “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González
Contactar con Pablo González

Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares