Manual de Nmap – Auditoría de Seguridad

Como les comente en el post anterior, en esta oportunidad vamos a hablar un poco de nmap como auditoría de seguridad.

¿Que es nmap?

Es una Herramienta de código abierto diseñada para analizar grandes redes como así también equipos individuales. Con sus diferentes parámetros identifica Equipos, Sistemas Operativos, Servicios, etc.

Los resultados de los análisis los muestra como Puertos Interesantes, haciendo una descripción del número de puerto, el estado del mismo, tipo de servicio y versión de la aplicación. El estado para los puertos pueden ser 4:

  • Open(Abierto): Esto indica que la aplicación de la máquina remota se encuentra esperando conexiones en el puerto indicado.
  • Closed(Cerrado): Esto indica que no hay ninguna aplicación escuchando en dicho puerto.
  • Filtered(Filtrado): Indica que un cortafuegos, filtro u otro obstáculo en la red está bloqueando el acceso a ese puerto, por lo que nmap no puede ver si dicho puerto se encuentra abierto o cerrado.
  • Unfiltered(Sin Filtrado): Responden a los sondeos de nmap, pero no puede determinar si se encuentran abiertos o cerrados.

Ya sabiendo esto podemos empesar a ver de que forma hacer los análisis para sacar información sobre el rango de IP que elijamos trabajar. En mi caso el rango será algo bien genérico “192.168.1.0/24”.

Si lanzamos solamente el parámetro nmap <Dirección_IP>, nos va a arrojar un resultado parecido a esto:

Starting Nmap 5.51 ( http://nmap.org ) at 2011-05-03 21:30 Hora estßndar de Argentina
Nmap scan report for 192.168.1.10
Host is up (0.0063s latency).
Not shown: 992 filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
554/tcp open rtsp
2869/tcp open icslap
3389/tcp open ms-term-serv
5357/tcp open wsdapi
10243/tcp open unknown
MAC Address: **:**:**:**:**:** (Asustek Computer)

Nmap done: 1 IP address (1 host up) scanned in 4.48 seconds

Podemos ver que nos lista una serie de puertos que se encuentran abiertos en dicha pc y 992 filtrados. Vamos a ver ahoria que sucede cuando le agregamos dós argumentos:

C:\Windows\system32>nmap -sS -sV 192.168.1.10

Starting Nmap 5.51 ( http://nmap.org ) at 2011-05-03 21:50 Hora estßndar de Argentina
Nmap scan report for 192.168.1.10
Host is up (0.0015s latency).
Not shown: 992 filtered ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
445/tcp open netbios-ssn
554/tcp open rtsp?
2869/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
3389/tcp open microsoft-rdp Microsoft Terminal Service
5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
10243/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
MAC Address: **:**:**:**:**:** (Asustek Computer)
Service Info: OS: Windows

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 87.35 seconds

Podemos ver que esta secuencia de argumentos nos facilitan más información.

-sS: Este argumento no llega a completar las conexiones TCP. Esta técnica es conosida como sondeo abierto por no completar dicha conexión. Envía un paquete SYN como si fuera a establecer una conexión, si recibe un paquete SYN/ACK indica que el puerto esta escuchando y si recibe un paquete RST indica que no hay nada escuchando el puerto, también puede figurar cerrado si no recibe respuesta luego de varios intentos o si recibe un error del tipo ICMP no alcanzable.

-sV: También puede utilizarse el argumento -A, ya que -sV sirve solo para detectar las versiones de los programas que estan escuchando sobre dichos puertos, en cambio -A además de detectar dichas versiones lista la versión del Sistema Operativo. Esta información puede obtenerla gracias a una base de datos que posee nmap llamada nmap-services-probes quien se encarga de ahcer las consultas a los distintos servicios

Podemos también seleccionar un rango de IP’s a analizar utilizando los bits de la mascara de red para indicar el rango a analizar de la siguiente manera:

nmap 192.168.1.0/24: Esto analizará todas las IP que los coinsidan con los primeros 24 bits de la mascara de red. La más pequeña permitida es /1 y la más grande /32. Además de esto se pueden omitir rangos de IP por cada uno de los cuatro octetos. Por ejemplo si marcamos nmap 192.168.1.1-254, de esta forma estaría obiandome, basandome en el hecho de que el rango sea /24, la dirección de red y la de broadcast. Como les dije se puede aplicar a los cuatro octetos, por ejemplo si ponemos 0-255.0-255.1.1, se van a analizar todas las direcciones de internet que terminen en .1.1.

En algunos casos podemos toparnos con un cortafuegos y tenemos la necesidad de intentar evadirlos, para ello nmap nos facilita algunos argumentos los cuales pueden ayudarnos a lograrlo y son los siguientes:

-f o –mtu: -f lo que hace es fragmentar paquetes en paquetes más pequeños. La idea de dividir la cabecera en varios paquetes, es dificultar, sistemas de detección de instrusos y otros sistemas detecten lo que estamos haciendo. Tengan en cuenta que algunos programas tienen probnblemas para manejar estos paquetes tan pequeños. Nmap dividira el paquete en 8 bytes o menos despúes de la cabecera si lo utilizamos una sola vez, pero si volvemos a utilizarla los dividira en 16 bytes. También se puede establecer el tamaño a mano con el comando mtu, no utilicen -f si utilizan mtu. El tamaño de mtu debe ser multiplo de 8.

También se pueden utilizar señuelos para que el IDS no sepa de cual proviene el verdadero ataque. El comando a utilizar es nmap -D señuelo1,señielo2,señuelo3,etc <IP>, señuelo debe ser la ip ficticia.

Muchos cortafuegos están configurados para permitir el tráfico de los puertos conosidos en lugar de utilizar pasarelas a nivel aplicación o los modulos del cortafuegos que realizan un análisis del protocolo. Las configuraciones más comunes son que si la comunicación viene hacia el puerto “X” se permite el tráfico entrante desde estos puertos. Nmap ofrese las opciones –source-port o -g (son lo mismo) para aprovechar estos descuidos. Colo cando los puertos nmap enviará los paquetes a través de los puertos indicados. Ejemplo: nmap –source-port 21 192.168.1.10.

Para generar un log podemos utilizar además la opción -oX y guardarlo en formato .xml. El parámetro para este comando es nmap -oX <ruta\nombre.xml> 192.168.1.10 y nos genera un fichero bastante interesante para agregar a un informe.

Por último la opción -v aumenta el detalle que se muestra en pantalla mientras se efectúa el scan.

Por esta ocación creoq ue ya se dió un parámetro bastante amplio para que todos lean un poco más y vayan probando en sus propias casas con máquinas virtuales. Obviamente el programa en si posee muchos más argumentos pero eso tendrán que indagar un poco e ir viéndolo. Les dejo un resumen:

Descubrimiento:

nmap -PN 192.168.1.10 # no hagas ping
nmap -PS 192.168.1.10 # ping tcp syn
nmap -PA 192.168.1.10 # ping tcp ack
nmap -PU 192.168.1.10 # ping udp
nmap -PY 192.168.1.10 # ping sctp init
nmap -PE 192.168.1.10 # ping icmp echo
nmap -PP 192.168.1.10 # ping icmp timestamp
nmap -PM 192.168.1.10 # ping icmp address mask
nmap -PO 192.168.1.10 # ping protocolo ip
nmap -PP 192.168.1.10 # ping arp
nmap —traceroute 192.168.1.10 # traceroute

Escaneo:

nmap -sP 192.168.1.10 # solo ping
nmap -sS 192.168.1.10 # tcp syn
nmap -sT 192.168.1.10 # tcp connect (three-way-handshake)
nmap -sU 192.168.1.10 # udp
nmap -sN 192.168.1.10 # tcp null
nmap -sF 192.168.1.10 # tcp fin
nmap -sA 192.168.1.10 # tcp ack
nmap -sX 192.168.1.10 # tcp christmas tree (fin + push + urg)
nmap –scanflags URGACKPSHRSTSYNFIN 192.168.1.10 # tcp a medida
nmap -F 192.168.1.10 # escaneo rápido (los 100 puertos más conocidos)
nmap –top-ports 192.168.1.10 # los 10 puertos más conocidos
nmap -p http,https 192.168.1.10 # nombre de puertos
nmap -p 1-80 192.168.1.10 # rango de puertos
nmap -p U:1-50,T:51-100 192.168.1.10 # rango de puertos por protocolo
nmap -p “*” -r 192.168.1.10 # todos los puertos secuencialmente

Detección:

nmap -O 192.168.1.10 # sistema operativo
nmap -sV 192.168.1.10 # versión de los servicios

Evasión:

nmap -f 192.168.1.10 # fragmentar en paquetes ip de 8 bytes
nmap –mtu 16 192.168.1.10 # fragmentar en paquetes ip de 16 bytes
nmap -D RND:5 192.168.1.10 # genera 5 @ip aleatorias (señuelos)
nmap -sI 192.168.1.20 192.168.1.10 # escaneo utilizando un zombie
nmap –source-port 80 192.168.1.10 # puerto de origen 80
nmap –data-length 40 bytes 192.168.1.10 # añade 40 bytes
nmap –spoof-mac 0 192.168.1.10 # utiliza una @mac de origen aleatoria

Logs:

nmap -oN ft.txt 192.168.1.10 # fichero de texto
nmap -oX fx.xml 192.168.1.10 # fichero xml

Nos vemos en el próximo post y espero les haya sido de utilidad.