lunes, octubre 14, 2019

(más) Técnicas de escaneo y evasión con Nmap usando el tiempo

La semana pasada hablé de técnicas de escaneo y evasión con Nmap. Hoy hablo de más técnicas de escaneo, como si fuera una segunda parte del artículo, y puede que vengan más en un futuro. El arte del fingerprinting, en muchas ocasiones es eso, un arte. Nos permite saber cosas sobre las máquinas cuando vamos a ciegas.

Figura 1: (más) Técnicas de escaneo y evasión con Nmap usando el tiempo

No sabemos si la máquina es Windows, un GNU/Linux, un macOS, no sabemos si tiene un puerto abierto o cerrado, si tiene un servicio u otro, si tiene una mecanismo de protección o no lo tiene. Ni siquiera tenemos por qué saber si estamos en la misma red que la máquina o las máquinas de las que queremos saber. Por eso, cuando hacemos un Ethical Hacking, cuanto más sepamos de la fortificación de Windows, de la fortificación de GNU/Linux y de la seguridad de MacOS, mejor entenderemos los resultados que obtenemos.

Fgiura 2: Libros de "Máxima Seguridad en Windows 4ª Edición"
"Hardening de servidores GNU/Linux 3ª Edición"
& "macOS Hacking" de 0xWord

Ligamos Nmap al fingerprinting en muchas ocasiones, pero no es la única herramienta, aunque sin duda es una herramienta con experiencia, con años de desarrollo y con extensibilidad a través de su motor NSE. La semana pasada la utilizamos para dar juego a ping sweep y todas las variantes de bypasses y evasiones que podemos imaginar en un entorno en el que queremos saber si la máquina está o no está.

Figura 3: Libro de técnicas de Ethical Hacking en 0xWord

Hoy vamos a jugar con los templates de tiempo y la forma de bypassear ciertas protecciones gracias al timing.

Nmap Timing: Jugando con el tiempo

La plantilla de tiempo en nmap viene dada por el parámetro –T. Cuando ponemos –T0 es la plantilla de tiempo más lenta, con diferencia, mientras que –T5 es la más rápida. Por defecto, ¿Qué utiliza nmap si no indicamos nada? Por defecto se utiliza la plantilla –T3. A continuación, os dejo un listado de los tipos de plantillas, sus nombres y las posibilidades de éstas:
• Insane –T5: Esta plantilla envía paquetes lo más rápido posible. Solo espera 0,3 segundos para obtener una respuesta ante el envío de un paquete. La diferencia de tiempo entre los dos paquetes enviados es de hasta 5 milisegundos. Escaneo muy rápido, pero el cual genera mucho ruido. La precisión aquí también es rebajada. Este escaneo puede ser utilizado en una red rápida, en un entorno local muy rápido.
• Aggresive –T4: Esta plantilla espera solo 1,25 segundos para obtener una respuesta. La diferencia entre el envío de paquetes es de 10 milisegundos.
• Normal –T3: Esta plantilla es la de por defecto.
• Polite –T2: Esta plantilla se utiliza para enviar paquetes rápidamente. La diferencia entre el envío de paquetes es de 0,4 segundos.
• Sneaky –T1: Esta plantilla se utiliza para enviar paquetes rápidamente pero más lento que un Normal o Polite Scan. La diferencia entre el envío de paquetes es de 15 segundos. 
• Paranoid –T0: Esta plantilla tiene una diferencia entre envío de paquetes de 5 minutos. Genera muy poco ruido, pero estamos metiendo una diferencia entre paquetes muy grande.
En la imagen se puede ver la ejecución de –T2, -T1 y –T0. Se pueden apreciar las diferencias en tiempo de cada escaneo.

Figura 4: Pruebas con -T2, -T1 y -T0

Empezamos a bloquear: Bloqueando –T5

En nuestra máquina GNU/Linux Ubuntu con iptables añadimos estas reglas:
iptables -I INPUT -p tcp -m state --state NEW -m recent --set 
iptables -I INPUT -p tcp -m state --state NEW -m recent --update --seconds 1 --hitcount 1 -j DROP
Como podemos ver en la siguiente imagen, la primera petición se responde, pero las siguientes no tienen margen, como indica la regla, por lo que como no ha pasado el tiempo de un segundo entre peticiones se filtra el paquete.

Figura 5: Resultado con un -T5. Se detectan los servicios.

Como la regla tiene 1 segundo entre peticiones, el bypass es realmente sencillo. Se puede hacer un bypass con el propio –T5 a través de los reintentos. Cada reintento consume tiempo por lo que si aplicamos reintentos podemos superar esos segundos de bypass. Con la opción –max-retries [número de reintentos].

Figura 6: Se salta igualmente

En este caso, también podíamos utilizar las otras plantillas de la –T4 a la –T0. Esto es debido al poco tiempo indicando en el parámetro –seconds de iptables.

Bloqueando –T4, -T3 (modo por defecto) y –T2

Ahora vamos a aplicar nuevas reglas para bloquear estas plantillas de tiempo. Si quisiéramos bloquear –T1 ampliaríamos en más segundos. Como se puede ver el juego es sencillo.
iptables -I INPUT -p tcp -m state --state NEW -m recent --set 
iptables -I INPUT -p tcp -m state --state NEW -m recent --update --seconds 3 --hitcount 1 -j DROP
En la imagen se puede ver cómo se bloquea o filtran las peticiones con –T4, mientras que si se utilizada un –T1 y se tardan 60 segundos para escanear 3 puertos, se obtiene respuesta del estado de los puertos.

Figura 7: Se tarda 60 segundos para escanear tres puertos

Si en las reglas anteriores metemos como valor 100 al parámetro –seconds, iptables hará DROP sobre los paquetes de la plantilla –T1, lo que dificultaría mucho el proceso de scanning. Este bypass, a estas alturas del artículo ya se puede hacer uno a la idea de que será usando la plantilla –T0.

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

No hay comentarios:

Entrada destacada

MyPublicInbox: Perfiles destacados por categorías #MyPublicInbox @mypublicinbox1

Cuando se conceptualizó la plataforma de MyPublicInbox se pensó en un entorno que permitiera que los perfiles públicos recibieran comunica...

Entradas populares