Nmap - I de IV, Introducción y descubrimiento de sistemas.

Iniciado por Bael, Agosto 27, 2017, 09:55:23 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.


Nmap es una de las herramientas más conocidas dentro del mundo de la seguridad informática, y no sin razón, ya que se trata de una herramienta muy potente y versátil. Mi intención es crear en dos o tres post una guía para ser capaces de sacarle un rendimiento mínimo a la herramienta. En este primer post hablaré brevemente sobre la historia y características de Nmap, especificación de objetivos, y descubrimiento de host. En el segundo trataríamos técnicas de escaneo, especificación de puertos y detección de versiones. Para el tercero trataríamos detección del sistema operativo, tiempo y rendimiento, evasión de Firewall/IDS y salida de datos. En cuarto y último lugar, trataremos sobre NSE. Cómo podéis comprobar son las mismas categorías que aparecen con nmap -h. Me basaré fundamentalmente en la documentación oficial, que podéis encontrar en la web de nmap.
Para mi este tipo de saberes tienen un componente eminentemente practico, y creo que una de las mejores formas de estudiar es combinando la teoría con ejercicios prácticos. Al final de cada post realizaré una serie de preguntas que servirán para guiar un poco las practicas que todos deberíamos realizar. Espero que os guste.

Historia y características



Nmap fue publicado primera vez el 1 de septiembre de 1997 por Gordon Lyon bajo el alias de Fyodor en el número 51 la revista No tienes permitido ver los links. Registrarse o Entrar a mi cuenta Como podéis imaginar, por aquel entonces contaba con muchísimas menos características que las que tiene ahora. Una de las inclusiones más importantes fue la de detección de sistema operativo, en la que No tienes permitido ver los links. Registrarse o Entrar a mi cuenta fue una gran influencia, reconocida por el propio FyodorNo tienes permitido ver los links. Registrarse o Entrar a mi cuenta. QueSO fue programado por No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, mienbro de Apóstols, un grupo bastante interesante.

La última versión de Nmap es la 7.60, se publica con licencia GNU, y es multiplataforma, podemos encontrar versiones para GNU/Linux, Windows, HP-UX, BSD, Solaris...  Se puede utilizar tanto con IPv4 como con IPv6. Cuenta con mucha información, bastante de ella en castellano. Sus principales funciones son descubrimiento de equipos, escaneo de puertos, detección de servicios y versión, y detección del sistema operativo. Además cuenta con NSE, un sistema de scripts con muchas posibilidades, desde intentar autenticarse en un sistema hasta análisis de vulnerabilidades. Tenemos a nuestra disposición diversas interfaces gráficas, de las que la más conocida es Zenmap.

Lo que se conoce como Nmap Proyect cuenta con otras herramientas, como pueden ser:


  • Nping: permite gnerar paquetes de un gran número de protocolos y manipular cualquier campo de las cabeceras
  • Ncat: reimplementación de Netcat
  • Ndiff: realiza comparaciones entre distintos análisis de Nmap. Puede utilizarse para ver los cambios que se producen en determinada red.


Especificando objetivos

Voy a tratar brevemente especificación y descubrimiento de sistemas. Aunque no lo parezca, es una parte bastante importante, como recomendación es mejor primero conocer que sistemas están "vivos" y después lanzarnos a un análisis de puertos. Podemos escanear una única dirección, un rango o una lista. Soporta CIDR, esto quiere decir que le podemos especificar la mascara de red, para escanear subredes o bloques de redes. Además de direcciones IP también podemos especificar nombres de equipo, incluso ambas cosas a la vez:
Código: php
nmap scanme.nmap.org 192.168.1.150


Podemos también pasarle una lista separada por comas:
Código: php
nmap 192.168.1,3,5,7.0


Para rangos podemos utilizar el guión, por ejemplo, si quisiéramos escanear el rango de la 25 a la 75 de la red 192.168.1.0:
Código: php
nmap 192.168.1.25-75


Como podéis comprobar, la la especificación se realiza por octetos, por lo que podemos combinar distintos métodos:an
Código: php
nmap 192.168.1,3,5.25-83


Además, contamos con diversas opciones para la selección de objetivos:

Código: php
-iL <archivo_entrada>
Para seleccionar los objetivos de un archivo. Cada elemento tiene que estar separado por espacio, tabulación o líneas. Podríamos usarlo para pasarle a nmap la lista de direcciones de una empresa que nos encontremos auditando, por ejemplo.

Código: php
-iR <cant. sistemas>
Para analizar objetivos al azar. El valor 0 corresponde a ilimitado, y las direcciones privada, multicast, etc, se omiten por defecto.

Código: php
--exclude <equipo1[,equipo2][,equipo3],..
Para excluir equipos o redes. Si por ejemplo existen determinados servidores criticos que ni queremos ni podemos tocar dentro de la red a anlizar.

Código: php
--excludefile <archivo_entrada>
Excluye los objetivos desde un archivo. Al igual que con -iL, tienen que estar separados por espacio, tabulación o lineas.

Descubriendo sistemas


Una de las potencias de Nmap es que cuenta con muchas opciones, por eso es una herramienta usada en ámbitos muy distintos. Nuestro objetivo, en este primer momento, es conocer que equipos están actualmente activos.  Si no especificamos nada, nmap enviará un paquete
No tienes permitido ver los links. Registrarse o Entrar a mi cuentaal puerto 80 y un No tienes permitido ver los links. Registrarse o Entrar a mi cuenta a cada máquina objetivo. Si no contamos con los privilegios necesarios, en lugar de un ACK enviaremos un SYN. Una excepción a esto se produce en las redes locales, en las que se utiliza el protoclo No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código: php
-sL: List Scan
: Lista los equipos de las redes seleccionadas sin enviar paquetes a los objetivos. Esto lo realiza mediante la resolución inversa No tienes permitido ver los links. Registrarse o Entrar a mi cuenta Las opciones de análisis de puertos, detección de sistema operativo o ping no pueden combinarse con esta.

Código: php
-sn: Ping Scan
Sirve para indicarle a Nmap, que no realice análsis de puertos, por lo que únicamente realiza la fase de descubrimiento mediante ping. Es una opción menos sigilosa que -sL, ya que si envía paquetes. Por defecto envía un eco ICMP y un TCP al 80.

Código: php
-Pn: No ping
Nmap no realiza la fase de descubrimiento de equipos si especificamos esta opción. Tenemos que tener en cuenta que si no realiza esa fase, tratará todo los equipos que le indiquemos como si estuvieran vivos, por lo que les pasará a realizar la fase de escaneo de puertos a cada uno de ellos. Puede ser útil para redes que bloqueen el trafico ICMP, pero los tiempos aumentan mucho.

Código: php
-PS [lista de puertos]
Ping SYN. Si no especificamos ningún puerto, envía un paquete vacío con la bandera SYN activada al puerto 80. Para especificar puertos, podemos utilizar listas o rango, como por ejemplo -PS22,25,53,80-121. Si el puerto está cerrado recibiremos un paquete RST, mientras que si está abierto responderá con un SYN/ACK. Con una u otra respuesta, Nmap sabrá que el objetivo está activo.

Código: php
-PA [lista de puertos]
Ping ACK. Por defecto, envía un paquete vacío con la bandera ACK activada al puerto 80. El funcionamiento es el mismo que con -PS, la diferencia es que -PS envía con la bandera SYN mientras que -PA envía con ACK. Suele usarse para aumentar las posibilidades de descubrir si el objetivo está activo, podría darse el caso que que nos encontremos ante un cortafuegos que bloquea los paquetes SYN y no los ACK.

Código: php
-PU [lista de puertos]
Ping UDP. Envía un paquete UDP a los puertos indicados. Podemos indicar los puertos con el formato que hemos visto anteriormente, y si no indicamos ninguno se utiliza por defecto el 31338. SI el puerto está cerrado, devuelve un paquete ICMP de tipo Puerto Inalcanzable, por lo que podremos saber que el equipo está activo. Al ser UDP puede saltarse Firewalls que sólo están configurados para TCP.

Código: php
-PE; -PP; -PM
Pings ICMP. Con -PE imitamos al ping del sistema, y enviamos un paquete ICMP Echo Request. Existe la posibilidad de evitar que nuestro equipo responda cuando recibe un Echo Request, y es algo extendido, por lo que en ocasiones esta opción puede resultar inútil. Con -PP enviamos un paquete ICMP Timestamp, y con -PM un ICMP Addressmask, que si suelen estar activos en los equipos.

Código: php
-PR
Ping ARP. Esta técnica se utiliza por defecto cuando Nmap detecta que nos encontramos en una red local. Utiliza un algoritmo optimizado para que sea mucho más rápido, ya que ignora los paquetes IP, con No tienes permitido ver los links. Registrarse o Entrar a mi cuenta ya sabemos si está vivo o no. Si no queremos que Nmap utilice este sondeo ARP, tenemos que utilizar la opción --sen-ip

Código: php
-PY [listado de puertos]
Ping SCTP. No tienes permitido ver los links. Registrarse o Entrar a mi cuenta es un protocolo utilizado en la capa de transporte. Tiene algunas características muy interesantes, como el multihoming. Utiliza un Handshake en cuatro fases, como se puede ver en la imagen. Por defecto envía un paquete al puerto 80, si el equipo responde con un INIT-ACK o un ABORT, es señal de que el equipo está activo.


Código: php
-PO [listado de protocolos]
IP Protocol Ping. Envía paquetes de distintos tipo de protocolos. Por defecto se envía de los protocolos 1 (ICMP), 2 (IGMP) y 4 (IP).

Código: php
-n / -R
Con -n no realiza resolución DNS inversa, lo que aumenta ligeramente la velocidad. Con -R fuerza la resolución inversa.

Código: php
--system-dns
Utilizar la resolución DNS del sistema, una IP por vez, en lugar de utilizar la de nmap, que envía múltiples solicitudes en paralelo.

Código: php
--dns-servers <servidor1[,servidor2],...>
Se utiliza para especificar que servidores DNS queremos utilizar, en lugar de usar los que nmap encuentra en /etc/resolv.conf.

Actividades


- Buscar que otros proyecto desarrolla Nmap proyect.
- Buscar la lista de cambios de la versión 7.60.
- Alternativas a Nmap, características y en que situación puede ser más indicado utilizar uno u otro
- Buscar información sobre Shodan, No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y Censys
- Crear un script que nos diga que posibles host están vivos. Puede ser útil si comprometemos un ordenador dentro de una red y queremos saber que equipos tiene sin instalar nada.
- Wireshark! Otros de nuestros grandes amigos. Es muy instructivo ejecutar algunos de los comandos del post con Wireshark puesto y ver por nosotros mismos como funcionan. Recordar que tiene filtros que nos facilitan mucho la vida.
- Comando a introducir si queremos que:

  • Escanear las 50 últimas redes de la red 192.168.1.0
  • Todas las direcciones terminadas en .1.15
  • Escanear direcciones aleatorias con el puerto de FTP abierto
  • Las direcciones de un archivo de texto, menos las que terminen en .100
  • Saltarnos un Firewall que bloquea TCP y UDP
  • Saber si un equipo que no responde a los ping está activo, utilizando el protocolo ICMP
  • Especificarle a Nmap que utilice los servidores DNS de Google

Estas son sólo algunas sugerencias, lo fundamental es investigar y realizar vuestras propias pruebas. Cualquier duda o sugerencia es bien recibida, pero por favor, no preguntéis ni solucionéis las actividades aquí, se trata de que cada uno busque, y si no sois capaces de resolver algo, podéis enviarme un MP o contactar por Twitter o mail.

Saludos!
@Bael_x42