jueves, octubre 10, 2019

Técnicas de escaneo y evasión con nmap para saltarse la seguridad de red

El próximo 21 (y 22 y 23) de octubre estaré en Chile para unas pequeñas vacaciones e impartir una serie de talleres sobre Ethical Hacking, Powershell ofensiva y Metasploit dentro del congreso 8dot8 que se celebra en la ciudad de Santiago. 3 días de talleres que hay que ir preparando con mimo para que todos puedan sacar lo mejor. Allí, además, podrás encontrar los libros de 0xword durante el evento, y puede que tenga alguna sorpresa para los asistentes durante los talleres.

Figura 1: Técnicas de escaneo y evasión con namp para saltarse la seguridad de red


También tengo el honor de estar en la 8dot8 dando una charla sobre un trabajo que hemos realizado en el departamento de Ideas Locas del área CDO de Telefónica. Hemos trabajado sobre GANs y VAEs autoencoders con el objetivo de ver cómo de fácil es lograr que una IA genere la cara de un rostro conocido y la misma voz de dicha persona. La charla se llama: “GANs and Roses: Weaponizing the CEO Scam fraud with AI and Autoencoders”.  Un título ‘molón’ para un trabajo molón, pero para ir abriendo boca puedes ir viendo la LUCA Talk que hemos dado mi compañero Enrique Blanco y yo esta semana.

Figura 2: Uso de GANs y Autoencoders en Ciberseguridad

Volviendo al tema del artículo, tras estar preparando los talleres de 8dot8 estuve recopilando técnicas básicas de evasión, con el objetivo de explicar la fase de reconocimiento y fingerprint lo más variado y con más posibilidades, posible, valga la redundancia. Por ello, quería mostrar algunas de las técnicas en este post, aunque muchas son antiguas y conocidas, siguen siendo válidas en ciertos escenarios.

Lo primero son los conceptos

Lo primero es tener claro a qué elementos uno se enfrenta. Hay muchos elementos. Cada vez más efectivos y cada vez más complejos. A continuación, se enumeran:
NIDS: Sistema de detección de intrusión de red. En un breve resumen se puede decir que se utiliza un tap, un span port o un hub para recopilar los paquetes de la red. Se analizan intentando identificar comportamientos ilícitos o anómalos. Los métodos utilizados son la comparación de firmas, el análisis del estado en protocolos, etcétera. Procesando la captura de tráfico, el IDS procesa y lanza alertas y flags sobre el tráfico sospechoso.
HIDS: Sistema de detección de intrusión en host. Un agente en el equipo monitoriza la actividad del equipo con el objetivo de detector la anomalía. Se intenta detectar, de nuevo, comportamientos anómalos e ilícitos sobre el equipo. El agente utiliza una combinación de firmas, reglas y heurísticas para identificar la actividad anómala.
IDS: Sistema de detección de intrusiones. Solo reporta que hubo una intrusión.
IPS: Sistema de prevención de intrusiones. Aparte de detectar la intrusión, toma acciones contra la intrusión. El objetivo es minimizar el impacto de la amenaza. A veces, se puede entender o acercar a que el IPS es la suma de la detección de un IDS con las reglas que aplica un firewall para mitigar el impacto. Repito, acercar a este concepto.
Respecto a las técnicas de evasión podemos encontrar muchas, como dije anteriormente, unas más modernas y otras más antiguas. Algunas más eficientes y otras menos. Depende siempre de los casos y los escenarios. Cuanto mayor conocimiento se tenga mayor es la posibilidad de tener éxito en una evasión, por lo que todo suma. A continuación, os dejo un listado de técnicas:
• Fragmentación 
• Timing 
• Sending bad checksums 
• Utilizando múltiples técnicas 
• Usar proxies 
• MAC Address Spoofing 
• IP Address Spoofing 
• Changing data length 
• Transmission Unit
Ping Sweep

Aunque no lo he puesto en el listado anterior, ya que no es una técnica, si no un detalle, y en ocasiones obvio, el llamado Ping Supression consiste en decirle a Nmap que no envíe el ping, ya que en muchas ocasiones el firewall lo bloqueará. Para decirle a Nmap que no envié un icmp echo request, es decir, un ping, le decimos con nmap –Pn [dirección IP].

Figura 3: Libro de Pablo González sobre Ethical Hacking en 0xWord

Pero si hablamos de esta técnica un poco más en profundidad podemos hablar de Ping Sweep. Este escaneo utiliza el parámetro –sP. Es un escaneo utilizado para identificar equipos vivos sin tirar de ARP, aunque solamente a medias. Si la máquina destino se encuentra en nuestra red tiraremos de ARP para detectar si está “viva” o no. Mientras que si la máquina destino no se encuentra en nuestra red local tiraremos de estas opciones:
1. ICMP echo request 
2. ICMP timestamp request 
3. Escaneo de tipo SYN al puerto 443 
4. Escaneo de tipo ACK al puerto 80
Figura 4: Ejecución de nmap -sP --disable-arp-ping

Si en una red local no quieres lanzar un ARP Scan se puede deshabilitar con el parámetro –disable-arp-ping como se ve en la imagen superior.

Figura 5: Respuesta en Wireshark

Como se ve en la respuesta nmap ha tirado por la opción de TCP, no ha utilizado ARP, y ha lanzado un SYN al puerto 80 y 443. Se ha obtenido una respuesta que es un RST, ACK a ambos casos. Esto quiere decir que la máquina está arriba, pero, además, ya sabemos que el puerto está cerrado, por lo que no hay un servidor en esos puertos.

Figura 6: Libro de Hardening GNU/Linux 3ª Edición

Si bloqueamos el ping sweep con itpables obtendremos un resultado en el que se nos dice que la máquina no está viva. Es decir, el objetivo de este tipo de escaneo estaría fallando, ya que la máquina está funcionando, pero el firewall está bloqueando esa información. La configuración de iptables es la siguiente:

Figura 7: Configurando IPTABLES para fortificar el servidor

El resultado de la ejecución de nmap puede verse en la siguiente imagen, se puede observar como el resultado es que el equipo está “down”.

Figura 8: El servidor aparece down

El primer intento es hacer un TCP SYN Ping Scan, es decir, utilizar el flag de SYN al puerto 80. Hay que recalcar que en el listado que comentaba anteriormente se hablaba de dos paquetes ICMP con la opción –sP, deshabilitábamos el ARP Scan, y se probaba también el ACK Scan al puerto 80 y el SYN Scan al puerto 443. TCP SYN Ping Scan lo que intentará es hacer un SYN Scan al puerto 80. Pero, el resultado es malo. ¿No hay host?

Figura 9: 0 hosts descubiertos

Esto es porque cuando hemos bloqueado el ping sweep mediante iptables. También hemos metido la regla de hacer DROP contra todos los SYN al puerto 80. La regla es (véase libro de fortificar servidores GNU/Linux):
iptables –I INPUT –p tcp –tcp-flags ALL –dport 80 –j DROP.
Podemos hacer un bypass a TCP SYN Ping haciendo un TCP ACK Ping. Con Nmap podemos utilizar el parámetro –PA para indicar que queremos hacer un envío de flags ACK. Por defecto, se hacen al puerto 80, pero viendo el iptables que hemos configurado previamente, eso ya está bloqueado. Por esa razón, utilizamos –PA443, para que el tráfico vaya al puerto 443 o al que nosotros nos interese. Quizá alguno encontremos que no esté filtrado.

Figura 10: 1 host descubierto en 443

Tal y como se ve en la imagen, obtenemos de nuevo la respuesta de que la máquina está viva. Como se puede ver en la captura de Wireshark se envió el ACK al 443 y se obtuvo una respuesta RST, es decir, pasamos el firewall y la máquina contestó.

Figura 11: Registro en WireShark

Ahora bloqueamos TCP ACK Ping Scan mediante la regla:
iptables –I INPUT –p tcp –tcp-flags ALL ACK –j DROP. 
Ahora ya da igual el puerto. ¿Cuál es el camino a seguir? Ahora toca seguir probando con ICMP Echo y con ICMP Timestamp Ping. En nuestro caso, hemos aplicado un DROP a ICMP, por lo que cualquier paquete ICMP será descartado, pero en algunas ocasiones los administradores no hacen estas configuraciones tan radicales, por lo que probaremos con ICMP Echo Ping Scan a través de la ejecución de:
nmap –sP –PE [dirección IP] –disable-arp-ping
El resultado, como he comentado sería negativo. Por otro lado, para ejecutar ICMP Timestamp Ping se lanza el comando:
nmap –sP –PP [dirección IP] –disable-arp-ping
Mismo resultado. Si modifico o elimino la regla del DROP a todo el protocolo ICMP y personalizo, entran las ventanas de posibilidades. En Wireshark podemos ver algo así, cuando se recibe la petición y la respuesta, es decir, cuando se evita el firewall.

Figura 12: Reflejo en tráfico capturado por Wireshark

¿Y ahora? Podemos empezar a probar con UDP. La técnica llamada bypass ICMP Ping Scan utilizando UDP Ping. Para ello ejecutamos el comando: nmap –sP –PU [dirección IP]

Figura 13: Escaneo UDP Ping

El resultado, como puede verse es una petición UDP a un puerto y una respuesta de la máquina por ICMP indicando que el puerto no es alcanzable. ¿Tocará bloquear UDP?

Figura 14: Host respondiendo en Wireshark

En efecto, ahora toca bloquear UDP junto a todo el Ping Sweep. Optamos por añadir a nuestro iptables la siguiente regla:
iptables -I INPUT -p UDP -j DROP
¿Cómo se bypassea? Ahora utilizaremos Protocol Scan, es decir, lanzaremos una serie de paquetes, y uno de ellos será un IPv4 que proporcionará que nos contesten con un ICMP.

Figura 15: En el libro de Pentesting con Kali de 0xWord
 se explican las técnicas de escaneo de redes y puertos

Este tipo de ping o Protocol Scan se utiliza cuando ICMP, TCP y UDP están bloqueados. El parámetro utilizado será –PO. El orden es el siguiente:
1. Enviamos un ICMP Echo Request. El cual estará bloqueado en nuestro firewall. 
2. Enviamos un IGMP query. 
3. Enviamos un IPv4. 
4. Esperamos recibir un ICMP de destino inalcanzable.
El comando a ejecutar es:
nmap –sP –PO [dirección IP] –disable-arp-ping
El resultado se puede ver ahí, tal y como nos decía la teoría. Ahora sabemos que la máquina está “up”.

Figura 16: Se descubre que la máquina está up

¿Nos pueden bloquear más? Siempre. Tenemos que tener en cuenta que el objetivo es poder decir que la máquina X está “up” y no “down” porque el firewall nos engañe. Con la regla:
iptables –I INPUT –p ip –j DROP
nos bloquean todo el tráfico IP. Ahora solo nos queda la opción No Ping Scan. Esto se ejecuta con el parámetro –PN. En esta imagen siguiente podemos ver cómo lanzamos el Protocol Scan y no conseguimos detectar que la máquina está arriba. Esto es porque ya aplicamos la regla de iptables que indicábamos. Por otro lado, con la opción –PN lanzamos la última opción No Ping Scan.

Figura 17: No Ping Scan

En otras palabras, cuando nada parece funcionar para saber si el host está arriba o abajo. Lo que se realiza con este tipo de escaneos es un análisis de puertos para los 1000 puertos más importantes. Es una técnica que a mitad de la lectura del artículo seguro que se te ocurrió, pero que se deja para el final. Es una técnica que generará más ruido en la red, eso seguro.

Hasta aquí el artículo. Iré añadiendo más escenarios dentro de la fase de reconocimiento y fingerprint, ya que es una parte fundamental y siempre interesante de conocer a bajo nivel. El conocimiento del comportamiento de las implementaciones de la pila TCP/IP es fundamental.

Saludos,

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

1 comentario:

Entrada destacada

Programa de Especialización "Inteligencia Artificial para Expertos en Ciberseguridad" 2ª Edición.

Hoy, en medio del verano, os traigo información de la 2ª Edición del   Programa de Especialización  de "Inteligencia Artificial para Ex...

Entradas populares