Esta serie de post los he creado para impartir conocimiento acerca de las pruebas de penetración o Pentesting.
Parte IV: Identificando Vulnerabilidades
Sinceramente esta parte es la más densa de todas, incluso las tres primeras partes de esta serie de post vendrían siendo una introducción y este post sería el principio de una auditoría.
No les voy a mentir, me sentía decepcionado cuando encontraba documentación de ataques a máquinas remotas (o más bien no tanto por que están en la misma LAN" y más desilucionado aún cuando veía que éstas tenían un Windows XP SP 2 ¿Quien tiene Windows XP SP2 hoy?. De lo que no caía en cuenta era de que estos ejemplos me estaban gritando que no importaba si el sistema era XP o Win7 u 8. Lo que importaba (e importa) era que supiera cómo identificar las vulnerabilidades para luego buscar un exploit por ahí en la red y atacar.
La base de todo Pentesting es el análisis previo. Antes de tener el control de una máquina remota debemos pasar horas, quizás días recopilando información. Pero ¿qué información?
Información a recopilar
La información a recopilar depende mucho del sistema en el que nos encontremos, si estamos en una red de anillo, estrella, etc. Cuántos PC están en la red LAN, si el equipo que hemos elegido es Windows, Linux, o Mac, si este SO tiene un puerto abierto con un programa escuchando sobre éste con una vulnerabilidad conocida a bordo etc.
Para saber qué información recopilar, debemos saber qué tipo de ataques lanzaremos. Existen varios tipos de ataques como el DoS (Denegación de Servicios) que no me interesa en este momento, está el que se hace dentro de una red LAN, y está el ataque remoto. Si. Ese que se le hace a la persona que está en otra ciudad, otro País etc.
No seamos tan pretenciosos, iniciemos con algo muy sencillo y luego vamos subiendo el nivel, no por acabar de aprender a montar bicicleta nos llamaremos "bikers". Iniciemos con un análisis dentro de una red LAN.
Para ello usaremos el archi conocido Nmap
Vamos a empezar definiendo diferentes tipos de escaneos que podemos realizar:
1*- Escaneos de redes: Este tipo de exploración nos va permitir conocer los dispositivos conectados en la red a estudiar.
2*- Escaneos de puertos: Una vez identificadas las máquinas, nos va a permitan descubrir puertos abiertos en las mismas. A partir de ese momento intentaremos descubrir los servicios que se están ejecutando y obtener datos que nos ayudarán a identificar el tipo de Sistema Operativo, las aplicaciones, versiones de las mismas…
3*- Escaneos de vulnerabilidades: Encontrar servicios vulnerables que sirvan como punto de entrada en los sistemas.
No debemos fiarnos de la información a primera vista, hay que ser muy inteligentes y prudentes al momento de dejar por sentados los datos, es decir debemos estar muy seguros de que los resultados que tenemos son los que usaremos o si debemos desecharlos para iniciar nuevas pruebas y obtener la información real. Realizar varios chequeos y estudiar la información devuelta con lupa. Es aquí cuando empezamos a hablar de lo que se conoce como Fingerprinting. Algo así como determinar la versión y tipo de sistema operativo que se encuentra corriendo en el Host.
Nmap es una herramienta que a día de hoy nos va permitir realizar todo esto, pero donde verdaderamente ha venido centrando su potencial, es el escaneo de redes y puertos, aunque con las nuevas funcionalidades de Scripting (NSE) vamos a ver como sacarle todo su potencial. NSE vendría siendo como un Metasploit muy rudimentario.
Para entender el funcionamiento de Nmap es necesario conocer un poquito sobre los diferentes protocolos TCP, UDP, IP… y ser capaces de interpretar los resultados. Tenemos que reconocer términos tales como direcciones IP, Puertos, Flags….
Resumiendo un poco lo que nos dice la Wikipedia, TCP (Transmission Control Protocol-RFC 793) es un protocolo de comunicación orientado a conexión y a nivel de transporte ( capa 4 según el modelo OSI), que da soporte a protocolos de aplicación tales como HTTP, FTP, SMTP…, permitiendo crear conexiones en las que se garantiza el flujo de información sin errores.
Para establecer la conexión se estable un procedimiento que se viene a denominar 3-way handshake, que viene reflejado en la siguiente figura:
Lo que nos viene a decir es que el cliente envía un TCP SYN (con un numero de secuencia asignado para evitar Spoofing), si el puerto está abierto el servidor responde con un SYN/ACK, en caso contrario el servidor envía un paquete con el Flag RST activado, y el cliente responde al servidor con un ACK, completando así la negociación.
En el nivel de transporte, los paquetes de bits que constituyen las unidades de datos de protocolo TCP se llaman “segmentos” que vemos definidos en la siguiente figura:
Es necesario también comentar el concepto de puerto, que como vemos en el dibujo tiene un tamaño de 16 bits, por lo que existen 65.536 puertos posibles. Del 0 al 1023 se vienen a denominar puertos conocidos que son en los que generalmente van a estar escuchando aplicaciones tales como HTTP(80), HTTPS(443), SNMP(25) …, luego están los puertos registrados 1024-49151 utilizados por las aplicaciones de usuario de forma temporal, y luego están los dinámicos que van del 49152-65535.
Será necesario conocer algo sobre los bits de control (Flags) que como vemos son 8bits que se activan cuando están a 1 y se encuentran inactivos cuando se encuentran a 0. Serian CWR, ECE, URG, ACK, PSH, RST, SYN y FIN. Muy importantes y que veremos a continuación para que sirven.
[color=#000000][color=#000000][color=#000000]
CWR (Congestion Window Reduced): Notificación explicita de congestión. rfc3168
ECN (Explicit Congestion Notification): Informar de que se ha recibido un notificación ECN. rfc3168
URG (Urgent): Identificar los datos de entrada como urgentes.
ACK (Acknowledgement): Para confirmar que el paquete se ha recibido correctamente.
PSH (Push):- Prioridad para procesar el bloque de datos.
RST (Reset): Reiniciar una conexión.
SYN (Synchronize): Iniciar una conexión TCP.
FIN (Finalize): Finalizar una conexion iniciada con un SYN.
[/color][/color][/color]
Para saber más de estas flags, por favor leer este documento:
http://www.um.es/docencia/barzana/DIVULGACION/INFORMATICA/Introduccion_a_TCPIP.pdf
Vamos a saltarnos la instalación de Nmap por que Kali ya viene con todos los juguetes
TIPOS DE ESCANEO EN NMAP
Voy a usar opciones aleatorias en este escaneo pero si quieren ver todas las opciones, están aquí
http://nmap.org/man/es/man-briefoptions.html
-sP (Ping Scanning):
No se trata de de un escaneo de puertos, sino que nos va a servir para determinar los Host levantados, envia un ICMP ECHO REQUEST retornando la máquina objetivo un ECHO REPLY, o paquetes TCP SYN para comprobar si el host está levantado.
Hagamos el siguiente escaneo
[color=#000000][color=#000000][color=#000000]nmap -sP 192.168.1.1-254[/color][/color][/color]
Me da como resultado un buen numero de PC, puesto que dije a Nmap que escaneara de la IP X1 a la IP X254.
Tal y como muestra la enterior imagen el rango de PC que están encendidos no supera los 72 así que ya tengo un varios datos entre ellos, que tenemos múltiples posibles victimas, elegiré una aleatoriamente pero recomiendo que usen todas las opciones de Nmap que sean necesarias para determinar cual de ellas tiene un sistema operativo obsoleto para determinar a cual de ellas atacar. No obstante puede que algunos casos encontremos a una máquina con Win7 que use una aplicación vulnerable, y eso es lo importante, que encontremos la debilidad.
Acto seguido de elegir un determinado host victima, será identificar sus aplicaciones vulnerables.
[color=#000000][color=#000000][color=#000000]nmap -sV 192.168.1.40[/color][/color][/color]
En este caso nos encontramos una cantidas de datos importantes que son dignas de análisis.
Al parecer estamos frente a una máquina XP, pero es mejor asegurarnos
[color=#000000][color=#000000][color=#000000]nmap -O 192.168.0.1.40[/color][/color][/color]
Estamos frente a un servidor.
Lo peor de todo es que el puerto 3389 está abierto y es vulnerable.
Existe un exploit llamado Microsoft RDP Vulnerability Exploit (CVE-2012-0002 / MS12-020) que afecta precisamente este puerto, lo acabo de intentar con la máquina en cuestión pero quiero que vean este video donde muestra el reseteo abrupto y el volcado de memoria tan hermoso que se genera en el minuto 3:4
Por supuesto yo mismo intenté hacer esta brutalidad al computador vulnerable y ahora no inicia por que se vuelca la memoria a cada reinicio.
La solución que encontré para esto es descargar la memoria RAM del Servidor, esto se hace poniendo sus pines sobre una superficie metálica o desconectando por un tiempo prudencial la fuente de poder para que se vacíe, como sabemos es una memoria volátil así perderá todos los datos guardados en ella luego de perder su voltaje de pila. Luego parcheé esta vulnerabilidad y pasé una propuesta para que el server sea cambiado por uno más robusto pues este no soportaría un MB más en RAM.
Como les había comentado, no me interesan las denegaciones de servicio sino la intrusión.
Continuando con nuestro análisis, debemos identificar más vulnerabilidades en las máquinas, este procedimiento lo podríamos lograr con Nessus en un abrir y cerrar de ojos, pero definitivamente aún no hemos terminado con Nmap.
Creo que es sano aprender el trasfondo de lo que hacemos, para que luego, podamos sacarle todo el provecho a programas tan poderosos como Nessus, Zenmap, Wireshark y por el estilo (gráfico). Como ya estuvimos mirando los comandos, asumo que probaron todas las opciones que les dí en el link, e infiero que ya tenemos una vaga idea de lo que hacemos con cada una de estas opciones, entonces podemos avanzar un poco más. Apoyemonos en las interfaces gráficas para poder ordenar los datos mucho mejor.
Para ello tecleamos
[color=#000000][color=#000000]zenmap &[/color][/color]
lo que nos encontraremos es con una GUI parecida a esto:
Con esta configuración pediré un buen resumen de toda la red:
Sabremos la topología de la red
Veremos el resumen de máquinas disponibles y sus puertos
Con el detalle de los servicios corriendo sobre ellos
Vamos avanzando. Un Taringuero me preguntó el cómo elegiría un exploit porque había intentado usar uno y otro sin lograr nada. El error está en el siguiente: No podemos decidir qué exploit lanzar sin analizar un poco más, estamos en la fase de recolección de datos y, por si no lo han notato, estamos hasta ahora estableciendo los sistemas operativos más vulnerables. Aún nos falta por establecer más datos sobre cada puerto y hacer algunas pruebas sobre la misma máquina, no sea que estemos frente a un falso positivo. Ahí está el error. Aveces los exploits no funcionan por que estamos lanzando el ataque a una máquina
Si eligen una sola máquina que sea prometedora, y analizan muy bien su fingerprinters (si no están familiarizados con el término, suspendan aquí y lean eso). Podrán tener una muy bonita sorpresa.
Esta no es la única forma de conseguir un exploit válido. Tambien estamos frente a la información caliente que puedan tener, para eso están unos buenos sitios de los que se pueden valer para estar informados.
Hago una mención a @neo___ quien suministra un post formidable y que vale la pena hacer incapié en él, ya entrados en gastos.
Ir al post de Neo___
Para finalizar este sencillo post, quería hacer un inside a Nessus pero en la comunidad Hack The Game hay un aporte que cae como anillo al dedo.
Ir al Tutorial:
Con eso sería todo por ahora, hasta el próximo post