Nmap es una herramienta de código abierto de explotación de redes y escáner de seguridad, posiblemente el mejor escáner de puerto, escrito originalmente por Gordo Lyon. con esta maravillosa herramienta se puede evaluar la seguridad de un sistema informático, así como descubrir servicios o servidores en una red informática
SINTAXIS:
nmap [Tipo(s) de Análisis] [Opciones] {especificación de objetivos}
ESPECIFICACIÓN DE OBJETIVO:
Se pueden indicar nombres de sistema, direcciones IP, redes, etc.
Ej: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <archivo_entrada>: Lee una lista de sistemas/redes del archivo.
-iR <número de sistemas>: Selecciona objetivos al azar
–exclude <sist1[,sist2][,sist3],…>: Excluye ciertos sistemas o redes
–excludefile <fichero_exclusión>: Excluye los sistemas indicados en el fichero
DESCUBRIMIENTO DE HOSTS:
-sL: Sondeo de lista – Simplemente lista los objetivos a analizar
-sP: Sondeo Ping – Sólo determina si el objetivo está vivo
-P0: Asume que todos los objetivos están vivos
-PS/PA/PU [listadepuertos]: Análisis TCP SYN, ACK o UDP de los puertos indicados
-PE/PP/PM: Solicita un análisis ICMP del tipo echo, marca de fecha y máscara de red
-n/-R: No hacer resolución DNS / Siempre resolver [por omisión: a veces]
–dns-servers <serv1[,serv2],…>: Especificar servidores DNS específicos
–system-dns: Utilizar la resolución del sistema operativo
TÉCNICAS DE ANÁLISIS:
-sS/sT/sA/sW/sM: Análisis TCP SYN/Connect()/ACK/Window/Maimon
-sN/sF/sX: Análisis TCP Null, FIN, y Xmas
–scanflags <indicador>: Personalizar los indicadores TCP a utilizar
-sI <sistema zombi[:puerto_sonda]>: Análisis pasivo («Idle», N. del T.)
-sO: Análisis de protocolo IP
-b <servidor ftp rebote>: Análisis por rebote FTP
ESPECIFICACIÓN DE PUERTOS Y ORDEN DE ANÁLISIS:
-p <rango de puertos>: Sólo sondear los puertos indicados
Ej: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080
-F: Rápido – Analizar sólo los puertos listados en el archivo nmap-services
-r: Analizar los puertos secuencialmente, no al azar.
DETECCIÓN DE SERVICIO/VERSIÓN:
-sV: Sondear puertos abiertos, para obtener información de servicio/versión
–version-intensity <nivel>: Fijar de 0 (ligero) a 9 (probar todas las sondas)
–version-light: Limitar a las sondas más probables (intensidad 2)
–version-all: Utilizar todas las sondas (intensidad 9)
–version-trace: Presentar actividad detallada del análisis (para depurar)
DETECCIÓN DE SISTEMA OPERATIVO
-O: Activar la detección de sistema operativo (SO)
–osscan-limit: Limitar la detección de SO a objetivos prometedores
–osscan-guess: Adivinar el SO de la forma más agresiva
TEMPORIZADO Y RENDIMIENTO:
-T[0-5]: Seleccionar plantilla de temporizado (los números altos son más rápidos)
–min-hostgroup/max-hostgroup <tamaño>: Paralelizar los sondeos
–min-parallelism/max-parallelism <msegs>: Paralelización de sondeos
–min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <msegs>: Indica
el tiempo de ida y vuelta de la sonda
–max-retries <reintentos>: Limita el número máximo de retransmisiones de las
Sondas de análisis de puertos
–host-timeout <msegs>: Abandonar un objetivo pasado este tiempo
–scan-delay/–max-scan-delay <msegs>: Ajusta el retraso entre sondas
EVASIÓN Y FALSIFICACIÓN PARA CORTAFUEGOS/IDS:
-f; –mtu <valor>: fragmentar paquetes (opc. con el MTU indicado)
-D <señuelo1,señuelo2[,ME],…>: Disimular el análisis con señuelos
N. del T.: «ME» es «YO» mismo.
-S <Dirección_IP>: Falsificar la dirección IP origen
-e <interfaz>: Utilizar la interfaz indicada
-g/–source-port <numpuerto>: Utilizar el número de puerto dado
–data-length <num>: Agregar datos al azar a los paquetes enviados
–ttl <val>: Fijar el valor del campo time-to-live (TTL) de IP
–spoof-mac <dirección mac/prefijo/nombre de fabricante>: Falsificar la dirección MAC
–badsum: Enviar paquetes con una suma de comprobación TCP/UDP falsa
SALIDA:
-oN/-oX/-oS/-oG <file>: Guardar el sondeo en formato normal, XML,
s|<rIpt kIddi3 (n3n3b4n4n4), y Grepeable (para usar con grep(1), N. del T.),
respectivamente, al archivo indicado.
-oA <nombre_base>: Guardar en los tres formatos principales al mismo tiempo
-v: Aumentar el nivel de mensajes detallados (-vv para aumentar el efecto)
-d[nivel]: Fijar o incrementar el nivel de depuración (Tiene sentido hasta 9)
–packet-trace: Mostrar todos los paquetes enviados y recibidos
–iflist: Mostrar interfaces y rutas (para depurar)
–append-output: Agregar, en vez de sobreescribir, a los archivos indicados con -o.
–resume <archivo>: Retomar un análisis abortado/detenido
–stylesheet <ruta/URL>: Convertir la salida XML a HTML según la hoja de estilo
XSL indicada
–webxml: Referenciar a la hoja de estilo de Insecure.Org para tener un XML más portable
–no_stylesheet: No asociar la salida XML con ninguna hoja de estilos XSL
MISCELÁNEO:
-6: Habilitar análisis IPv6
-A: Habilita la detección de SO y de versión
–datadir <nombreDir>: Indicar la ubicación de los archivos de datos Nmap
personalizados.
–send-eth/–send-ip: Enviar paquetes utilizando tramas Ethernet o paquetes IP
«crudos»
–privileged: Asumir que el usuario tiene todos los privilegios
-V: Muestra el número de versión
-h: Muestra esta página resumen de la ayuda.
Evasión de cortafuegos/IDS y falsificación
-f (fragmentar los paquetes); –mtu (utilizar el MTU especificado)
La opción -f hace que el sondeo solicitado (incluyendo los sondeos ping) utilicen paquetes IP fragmentados pequeños. La idea es dividir la cabecera del paquete TCP entre varios paquetes para hacer más difícil que los filtros de paquetes, sistemas de detección de intrusos y otras molestias detecten lo que se está haciendo. ¡Tenga cuidado con esta opción! Algunos programas tienen problemas para manejar estos paquetes tan pequeños. El viejo sniffer llamado Sniffit da un fallo de segmentación inmediatamente después de recibir el primero de estos pequeños fragmentos. Especifica esta opción una sola vez y Nmap dividirá los paquetes en ocho bytes o menos después de la cabecera de IP. De esta forma, una cabecera TCP de veinte bytes se dividiría en 3 paquetes. Dos con ocho bytes de cabecera TCP y uno con los últimos ocho. Obviamente, cada fragmento tiene su propia cabecera IP. Especifica la opción -f otra vez para utilizar fragmentos de dieciséis bytes (reduciendo la cantidad de fragmentos). O puedes especificar tu propio tamaño con la opción –mtu. No utilice la opción -f si utiliza –mtu. El tamaño debe ser múltiplo de ocho. Aunque la utilización de paquetes fragmentados no le ayudará a saltar los filtros de paquetes y cortafuegos que encolen todos los fragmentos IP (como cuando se utiliza la opción CONFIG_IP_ALWAYS_DEFRAG del núcleo de Linux), algunas redes no pueden tolerar la pérdida de rendimiento que esto produce y deshabilitan esa opción. Otros no pueden habilitar esta opción porque los fragmentos pueden tomar distintas rutas para entrar en su red. Algunos sistemas defragmentan los paquetes salientes en el núcleo. Un ejemplo de ésto es Linux con el módulo de seguimiento de conexiones de iptables. Realice un sondeo con un programa de captura de tráfico, como Ethereal, para asegurar que los paquetes que se envían están fragmentándose. Intente utilizar la opción –send-eth, si su sistema operativo le está causando problemas, para saltarse la capa IP y enviar tramas directamente a la capa Ethernet en crudo.
-D <señuelo1 [,señuelo2][,ME],…> (Esconde un sondeo con señuelos)
Realiza un sondeo con señuelos. Esto hace creer que el/los equipo/s que utilice como señuelos están también haciendo un sondeo de la red. De esta manera sus IDS pueden llegar a informar de que se están realizando de 5 a 10 sondeos de puertos desde distintas direcciones IP, pero no sabrán qué dirección IP está realizando el análisis y cuáles son señuelos inocentes. Aunque esta técnica puede vencerse mediante el seguimiento del camino de los encaminadores, descarte de respuesta («response-dropping», N. del T.), y otros mecanismos activos, generalmente es una técnica efectiva para esconder su dirección IP.
Se debe separar cada equipo de distracción mediante comas, y puede utilizar ME («YO», N. del T.) como uno de los señuelos para representar la posición de su verdadera dirección IP. Si pone ME en la sexta posición o superior es probable que algunos detectores de sondeos de puertos habituales (como el excelente scanlogd de Solar Designer) ni siquiera muestren su dirección IP. Si no utiliza ME, Nmap le pondrá en una posición aleatoria.
Tenga en cuenta que los equipos que utilice como distracción deberían estar conectados o puede que accidentalmente causes un ataque de inundación SYN a sus objetivos. Además, sería bastante sencillo determinar qué equipo está realmente haciendo el sondeo si sólo uno está disponible en la red. Puede que quiera utilizar direcciones IP en lugar de nombres (de manera que no aparezca en los registros del servidor de nombres de los sistemas utilizados como señuelo).
Se utilizan los señuelos tanto para el sondeo de ping inicial (si se utiliza ICMP, SYN, ACK, o cualquier otro) como durante la fase de sondeo. También se utilizan los señuelos durante la detección de sistema operativo (-O). Los señuelos no funcionarán con la detección de versión o el sondeo TCP connect().
Vale la pena tener en cuenta que utilizar demasiados señuelos puede ralentizar el sondeo y potencialmente hacerlo menos exacto. Además, algunos proveedores de acceso a Internet filtrarán los paquetes falsificados, aunque hay muchos que no lo hacen.
-S <Dirección_IP> (Falsifica la dirección de origen)
Nmap puede que no sea capaz de determinar tu dirección IP en algunas ocasiones (Nmap se lo dirá si pasa). En esta situación, puede utilizar la opción -S con la dirección IP de la interfaz a través de la cual quieres enviar los paquetes.
Otro uso alternativo de esta opción es la de falsificar la dirección para que los objetivos del análisis piensen que algún otro los está sondeando. ¡Imagine una compañía a los que les sondea repetidamente la competencia! Generalmente es necesaria la opción -e si lo quiere utilizar así, y también sería recomendable la opción -P0.
-e <interfaz> (Utilizar la interfaz especificada)
Indica a Nmap a través de qué interfaz debe enviar y recibir los paquetes. Nmap debería detectar esto automáticamente, pero se lo dirá si no.
–source-port <número_de_puerto>; -g <número_de_puerto> (Falsificar el puerto de origen)
Un error de configuración sorprendentemente común es confiar en el tráfico basándose únicamente en el número de puerto origen. Es fácil entender por qué pasa esto. Un administrador que está configurando su nuevo y flamante cortafuegos, recibe de repente quejas de todos sus usuarios desagradecidos que le dicen que sus aplicaciones han dejado de funcionar. En particular, puede romperse el DNS porque las respuestas UDP de DNS de servidores externos ya no pueden entrar en la red. Otro ejemplo habitual es el caso del FTP. En una transferencia activa de FTP, el servidor remoto intenta establecer una conexión de vuelta con el cliente para transferir el archivo solicitado.
Existen soluciones seguras para estos problemas, como las pasarelas en el nivel de aplicación o los módulos de cortafuegos que realizan un análisis del protocolo. Desgraciadamente, también hay soluciones más fáciles y menos seguras. Al darse cuenta que las respuestas de DNS vienen del puerto 53 y que las conexiones activas de FTP vienen del puerto 20, muchos administradores caen en la trampa de configurar su sistema de filtrado para permitir el tráfico entrante desde estos puertos. Generalmente asumen que ningún atacante se dará cuenta de estos agujeros en el cortafuegos ni los aprovechará. En otros casos, los administradores consideran esto una solución a corto plazo hasta que puedan implementar una solución más segura. Y después se olvidan de hacer la mejora de la seguridad.
Los administradores de red con mucho trabajo no son los únicos que caen en esta trampa. Muchos productos se lanzan al mercado con estas reglas inseguras. Hasta Microsoft lo ha hecho. Los filtros de IPsec que se preinstalan con Windows 2000 y Windows XP contienen una regla implícita que permite todo el tráfico TCP o UDP desde el puerto 88 (Kerberos). Otro caso conocido es el de las versiones de Zone Alarm Firewall Personal que, hasta la versión 2.1.25, permitían cualquier paquete entrante UDP desde el puerto 53 (DNS) o 67 (DHCP).
Nmap ofrece las opciones -g y –source-port (son equivalentes) para aprovecharse de estas debilidades. Simplemente indique el número de puerto y Nmap enviará los paquetes desde ese puerto cuando sea posible. Nmap debe utilizar distintos números de puerto para ciertos tipos de prueba en la detección de sistema operativo para que funcionen correctamente, y las solicitudes de DNS ignoran la opción –source-port porque Nmap depende de las librerías del sistema para hacerlas. Esta opción se soporta completamente en muchos sondeos TCP, incluyendo el sondeo SYN, al igual que los sondeos UDP.
–data-length <número> (Añadir datos aleatorios a los paquetes enviados)
Normalmente Nmap envía paquetes mínimos que contienen sólo la cabecera. Así, los paquetes TCP que envía son generalmente de 40 bytes y las solicitudes echo de ICMP son de tan sólo 28. Esta opción le dice a Nmap que añada el número indicado de bytes aleatorios a la mayoría de los paquetes que envía. Esta opción no afecta a los paquetes enviados para la detección de sistema operativo (-O), pero sí a la mayoría de los paquetes de ping y de sondeo de puertos. Esta opción hace que el sondeo sea un poco más lento, pero también que el sondeo sea un poco más difícil de detectar.
–ttl <valor> (Indica el valor del campo tiempo-de-vida de la cabecera IP)
Establece el campo tiempo-de-vida («time-to-live», N. del T.) en la cabecera de los paquetes IPv4 al valor especificado.
–randomize-hosts (Mezclar aleatoriamente la lista de equipos a sondear)
Indica a Nmap que debe mezclar aleatoriamente cada grupo de hasta 8096 equipos antes de hacer un sondeo. Esto puede hacer que el sondeo sea menos obvio para algunos sistemas de monitorización de la red, especialmente cuando se combina con las opciones que ralentizan el sondeo. Si quiere mezclar aleatoriamente listas más grandes, incremente el valor de la constante PING_GROUP_SZ en nmap.h y recompile el programa. Una solución alternativa es generar la lista de sistemas a sondear con un sondeo de lista (-sL -n -oN <fichero>), ordenarlo aleatoriamente con un script de Perl, y luego darle a Nmap la lista entera con la opción -iL.
–spoof-mac <dirección MAC, prefijo o nombre del fabricante> (Falsifica la dirección MAC)
Solicita a Nmap que utilice la MAC dada para todas las tramas de Ethernet enviadas. Esta opción activa implícitamente la opción –send-eth para asegurar que Nmap envía los paquetes del nivel Ethernet. La MAC dada puede tener varios formatos. Nmap elegirá una MAC completamente aleatoria para la sesión si se utiliza el valor “0”. Nmap utilizará la MAC indicada si el parámetro es un número par de dígitos hexadecimales (separando opcionalmente cada dos dígitos con dos puntos). Nmap rellenará los 6 bytes restantes con valores aleatorios si se dan menos de 12 dígitos hexadecimales. Si el argumento no es ni 0 ni un conjunto de dígitos hexadecimales, Nmap mirará en nmap-mac-prefixes para encontrar un fabricante cuyo nombre coincida con el parámetro utilizado (en esta búsqueda no diferenciará entre mayúsculas y minúsculas). Si se encuentra algún fabricante, Nmap utilizará el OUI del fabricante (prefijo de 3 bytes) y rellenará los otros 3 bytes aleatoriamente. Ejemplos de argumentos –spoof-mac son: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, y Cisco.
–badsum (Envía paquetes con sumas de comprobación TCP/UDP erróneas)
Esta opción le indica a Nmap que debe generar sumas de comprobación inválidas para los paquetes que se envíen a los equipos objetivos. Cualquier respuesta que se reciba vendrá de un cortafuegos o un IDS que no comprobó la suma, dado que la mayoría de las pilas IP descartan estos paquetes. Para obtener más información de esta técnica puede consultar http://www.phrack.org/phrack/60/p60-0x0c.txt
EJEMPLOS:
nmap -v scanme.nmap.org
Esta opción sondea todos los puertos TCP reservados en el servidor scanme.nmap.org. La opción -v activa el modo detallado (también llamado verboso).
nmap -sS -O scanme.nmap.org/24
Lanza un sondeo de tipo SYN sigiloso contra cada una de las 255 máquinas en la “clase C” de la red donde está el sistema «analizame». También intenta determinar cual es el sistema operativo que se ejecuta en cada máquina que esté encendida. Esto requiere permisos de root por la opción de sondeo SYN y por la de detección de sistema operativo.
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
Lanza una enumeración de equipos y un sondeo TCP a cada uno de la primera mitad de las 255 posibles subredes de 8 bit en la red de clase B 198.116. Esto probará si los sistemas están ejecutando sshd, DNS, pop3d, imapd o tienen un servidor en el puerto 4564. Para cualquier puerto que se encuentre abierto, se realizará una detección de versión para determinar qué aplicación se está ejecutando.
nmap -v -iR 100000 -P0 -p 80
Solicita a Nmap que elija 100.000 sistemas aleatoriamente y los sondee buscando servidores web (puerto 80). La enumeración de sistemas se deshabilita con -P0 ya que es un desperdicio enviar un par de pruebas para determinar si el sistema debe ser analizado cuando de todas maneras sólo se va a analizar un puerto.
nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20
Esto sondea 4096 IPs para buscar cualquier servidor web (sin enviar sondas ICMP) y guarda la salida en formato para grep y en XML.
Para mucha mas información visiten la pagina oficial: http://nmap.org/man/es/