En la fase del reconocimiento activo (al momento de realizar un pentest) empezamos a realizar procedimientos que interactuen directamente con el sistema que estamos analizando. Nuestro objetivo principal debería ser el de identificar todo lo que se encuentre a nuestro alcance, recolectar la mayor cantidad de información, para posteriormente, iniciar algún tipo de ataque.
Deberíamos:
-Identificar sistemas activos
-Identificar puertos abiertos
-Identificar servicios y versiones en esos puertos abiertos
-Identificar sistemas operativos
Para esto, usaremos NMAP, creo que debo explicar que es una grandiosa herramienta de codigo abierto, para realizar auditorías de red, escanear puertos y en algunos casos, explotar vulnerabilidades utilizando scripts. Nmap no requiere privilegios de root para ejecutarse, esto es algo que debe quedar claro. La herramienta se va a adaptar a los privilegios actuales en la cuenta que se ejecute, la cuestión es que, en algunos casos, el output del comando puede ser diferente al usarlo como root o como un usuario normal. Además te avisará cuando requiera privilegios de root para ejecutar alguna acción en específico. Un ejemplo de esto, es que NMAP, por defecto en una cuenta sin privilegios, usa el escaneo (-sT) y con root (-sS). Ahora, ¿Que es eso de -sT y -sS?
Primero veremos el uso básico de Nmap…
Por defecto, escanea los 1000 puertos más “comunes” o “frecuentes” para la mayoría de servicios.$ nmap [ip]
Cómo vemos, nmap nos devuelve la lista de puertos abiertos que ha encontrado, y el servicio que corre en esos puertos. Nmap define 6 estados para los puertos, estos son:
-Abierto
-Cerrado
-Filtrado
-No filtrado
-Abierto|filtrado
-Cerrado|filtrado
Pues bien, ahora empezamos con la primera técnica de escaneo.
TCP Connect Scan (-sT)
Esta técnica, tiene el comportamiento normal que ocurre al momento de establecer una conexión TCP, es decir, utiliza el saludo de 3 vias
(SYN - SYN/ACK - ACK)
Esto tiene ventajas y desventajas, pues el hecho de establecer el saludo de 3 vias no es nada sigiloso además de ser un poco más lento y esto hace que sea más facil la detección del ataque, pero tambien tiene una muy baja probabilidad de arrojarnos un falso positivo. Para Nmap es el escaneo (-sT), el cual se ejecuta por defecto en una cuenta sin privilegios.
b4rt@server$ nmap -sT 192.168.1.165
TCP Syn Scan (-sS)
Este tipo de análisis, no llega a establecer el saludo de tres vías. Se envía un paquete SYN, como en una conexión normal, pero todo cambia al recibir una respuesta. Si se recibe un paquete SYN/ACK esto indica que el puerto está abierto, pero si se recibe un RST, significa que el puerto está cerrado y termina la conexión. Si no se recibe ninguna respuesta, o un error de ICMP, el puerto se encuentra filtrado. Es un tipo de escaneo muy confiable, y además muy sigiloso.
Es escaneo que se ejecuta por defecto en una cuenta con privilegios de administrador. De hecho, si tratamos de utilizarla en una cuenta sin privilegios, nos dará…
b4rt@server$ nmap -sS 192.168.1.165
You requested a scan type which requires root privileges.
QUITTING!
TCP Idle Scan(-sI)
El Idle Scan, es uno de los tipos de escaneo más complejos que existen y en realidad va a depender muchísimo de la máquina que elijamos para hacer el papel de zombie.
El ataque, es muy dificil de ser detectado pues ningún paquete es enviado directamente a la dirección de origen, además de que puede saltarse distintos controles que filtran paquetes para evitar la conexión con equipos fuera de la red, pues se “suplanta” la identidad de un equipo que sí tiene permisos en esa red.
Necesitamos un escenario de al menos 3 máquinas, una el atacante, una víctima y otra que usaremos como Zombie. Primero debemos identificar que la máquina que elegiremos como zombie utilice un algoritmo predecible, con el cual marque e identifique los paquetes IP. Para esto, se envian una cadena de paquetes SYN+ACK, el objetivo es obtener un RST y revisar los IDs de la respuesta. Despues verificar si estos IDs son sucesivos o predecibles, en muchos casos, los paquetes son consecutivos. También es necesario que la máquina Zombie, no esté teniendo tráfico, pues de otra forma, el escaneo sería inviable.
Una vez que la máquina zombie sea identificada, procedemos a realizar IP Spoofing enviando multiples paquetes SYN hacia la máquina víctima con la IP de la máquina Zombie. Estos paquetes son un escaneo normal, la diferencia es que, en nuestro caso, los paquete de respuesta provenientes de la víctima, no vienen hacia nosotros, sinó que se dirigen hacia la máquina zombie. Ahora, para que nosotros podamos obtener el estado de los puertos de la máquina víctima, preguntamos por el ID de los paquetes a la máquina zombie, y aquí ocurren 2 cosas. Si el ID se ha incrementado, en un número que previamente hayamos identificado, el puerto en la máquina víctima se encuentra abierto. Si por el contraio, el ID es el mismo, el puerto se encuentra cerrado.
Es muy complejo, entender esto, al menos la primera vez que lo leemos. En la página de Nmap, también se explica muy bien este proceso, y encontramos esta imágen.
root@b4rt$ nmap -sI [IP ZOMBIE][IP VICTIMA]
Este ejemplo es muy básico, en otro post profundizaré sobre el Idle Scan, pues realmente es uno de los más peligrosos y complejos que existen.
TCP Ack Scan (-sA)
Esta técnica no es usada específicamente para detectar el estado de un puerto, más bien se usa para verificar el estado del firewall. Si se envía un paquete ACK en una conexión normal, esto no haría nada.
Si el firewall no guardase el estado de las conexiones, dejaría pasar el paquete sin problemas, y ocurrirán dos cosas, en caso de que el puerto se encuentre abierto, normalmente el sistema no respondería nada, pero si se encuentra cerrado, se responderá un RST. De esta forma se puede saber si el puerto está abierto o cerrado, y además, si el firewall guarda o no el estado de las conexiones.
root@b4rt$ nmap -sA [IP]
TCP X-Mas Scan (-sX)
Esta tecnica se basa en el envio de un paquete con los flags FIN, URG y PSH activos. Actualmente Windows no responde a esta técnica, aunque antiguamente TCP/IP respondía con un RST+ACK cuando el puerto se encontraba cerrado y si el puerto estaba abierto, simplemente no había respuesta.
root@b4rt$ nmap -sX [IP]
TCP Null Scan (-sN)
Este tipo de escaneo envía un paquete que no contiene ningún bit, si el puerto se encuentra abierto, no se recibe respuesta, pero por el contrario, si el puerto se encuentra cerrado, el sistema responderá con un RST + ACK.
root@b4rt$ nmap -sN [IP]
Te recomendaría leer sobre TCP/IP, los puertos comunes y sus servicios, de esta forma te será más fácil comprender la segunda parte.