.\"Traducido al español por .\"Antonio Aneiros .\"el 04-08-1999 .de Sp .if n .sp .if t .sp 0.4 .. .TH NMAP 1 .SH NOMBRE nmap \- Herramienta de exploración de red y escáner de seguridad. .SH SINOPSIS .B nmap [Tipos(s)de escaneo] [Opciones] .SH DESCRIPCIÓN .I Nmap ha sido diseñado para permitir a administradores de sistemas y gente curiosa en general el escaneo de grandes redes para determinar qué servidores se encuentran activos y qué servicios ofrecen. .I nmap es compatible con un gran número de técnicas de escaneo como: UDP, TCP connect(), TCP SYN (half open), ftp proxy (bounce attack), Reverse-ident, ICMP (ping sweep), FIN, ACK sweep, Xmas Tree, SYN sweep, and Null scan. Véase la sección .I Tipos de Escaneo para más detalles. .I nmap proporciona también características avanzadas como la detección remota del sistema operativo por medio de huellas TCP/IP , escaneo tipo stealth (oculto), retraso dinámico y cálculos de retransmisión, escaneo paralelo, detección de servidores inactivos por medio de pings paralelos, escaneo con señuelos, detección de filtrado de puertos, escaneo por fragmentación y especificación flexible de destino y puerto. .PP Se han hecho grandes esfuerzos encaminados a proporcionar un rendimiento decente para usuarios normales (no root). Por desgracia, muchos de los interfaces críticos del kernel ( tales como los raw sockets) requieren privilegios de root. Debería ejecutarse .I nmap como root siempre que sea posible. .SH OPCIONES En general, pueden combinarse aquellas opciones que tengan sentido en conjunto. Algunas de ellas son específicas para ciertos modos de escaneo. .I nmap trata de detectar y advertir al usuario sobre el uso de combinaciones de opciones sicóticas o no permitidas. .Sp Si usted es una persona impaciente, puede pasar directamente a la sección .I ejemplos al final de este documento, donde encontrará ejemplos de los usos más corrientes. También puede ejecutar el comando .B nmap -h para una página de referencia rápida con un listado de todas las opciones. .TP .B Tipos de Escaneo .TP .B \-sT Escaneo TCP connect(): Es la forma más básica de escaneo TCP. La llamada de sistema connect() proporcionada por nuestro sistema operativo se usa para establecer una conexión con todos los puertos interesantes de la máquina. Si el puerto está a la escucha, connect() tendrá éxito, de otro modo, el puerto resulta inalcanzable. Una ventaja importante de esta técnica es que no resulta necesario tener privilegios especiales. Cualquier usuario en la mayoría de los sistemas UNIX tiene permiso para usar esta llamada. .Sp Este tipo de escaneo resulta fácilmente detectable dado que los registros del servidor de destino muestran un montón de conexiones y mensajes de error para aquellos servicios que accept() (aceptan) la conexión para luego cerrarla inmediatamente. .TP .B \-sS Escaneo TCP SYN: A menudo se denomina a esta técnica escaneo "half open" (medio abierto), porque no se abre una conexión TCP completa. Se envía un paquete SYN, como si se fuese a abrir una conexión real y se espera que llegue una respuesta. Un SYN|ACK indica que el puerto está a la escucha. Un RST es indicativo de que el puerto no está a la escucha. Si se recibe un SYN|ACK, se envía un RST inmediatamente para cortar la conexión (en realidad es el kernel de nuestro sistema operativo el que hace esto por nosotros). La ventaja principal de esta técnica de escaneo es que será registrada por muchos menos servidores que la anterior. Por desgracia se necesitan privilegios de root para construir estos paquetes SYN modificados. .TP .B \-sF \-sX \-sN Modos Stealth FIN, Xmas Tree o Nul scan: A veces ni siquiera el escaneo SYN resulta lo suficientemente clandestino. Algunas firewalls y filtros de paquetes vigilan el envío de paquetes SYN a puertos restringidos, y programas disponibles como Synlogger y Courtney detectan este tipo de escaneo. Estos tipos de escaneo avanzado, sin embargo, pueden cruzar estas barreras sin ser detectados. .Sp La idea es que se requiere que los puertos cerrados respondan a nuestro paquete de prueba con un RST, mientras que los puertos abiertos deben ignorar los paquetes en cuestión (véase RFC 794 pp 64). El escaneo FIN utiliza un paquete FIN vacío (sorpresa) como prueba, mientras que el escaneo Xmas tree activa las flags FIN, URG y PUSH. El escaneo NULL desactiva todas las flags. Por desgracia Microsoft (como de costumbre) decidió ignorar el estándar completamente y hacer las cosas a su manera. Debido a esto, este tipo de escaneo no funcionará con sistemas basados en Windows95/NT. En el lado positivo, esta es una buena manera de distinguir entre las dos plataformas. Si el escaneo encuentra puertos cerrados, probablemente se trate de una máquina UNIX, mientras que todos los puertos abiertos es indicativo de Windows. Excepcionalmente, Cisco, BSDI, HP/UX, MVS, y IRIX también envían RSTs en vez de desechar el paquete. .TP .B \-sP Escaneo ping: A veces únicamente se necesita saber qué servidores en una red se encuentran activos. Nmap puede hacer esto enviando peticiones de respuesta ICMP a cada dirección IP de la red que se especifica. Aquellos servidores que responden se encuentran activos. Desafortunadamente, algunos sitios web como microsoft.com bloquean este tipo de paquetes. Nmap puede enviar también un paquete TCP ack al puerto 80 (por defecto). Si se obtiene por respuesta un RST, esa máquina está activa. Una tercera técnica implica el envío de un paquete SYN y la espera de de un RST o un SYN/ACK. Para usuarios no root se usa un método connect(). .Sp Por defecto (para usuarios no root), nmap usa las técnicas ICMP y ACK en paralelo. Se puede cambiar la opción .B \-p descrita más adelante. .Sp Nótese que el envio de pings se realiza por defecto de todas maneras y que sólamente se escanean aquellos servidores de los que se obtiene respuesta. Use esta opción sólamente en el caso de que desee un ping sweep (barrido ping) .B sin hacer ningún tipo de escaneo de puertos. .TP .B \-sU Escaneo Udp: Este método se usa para saber qué puertos UDP (Protocolo de Datagrama de Usuario, RFC 768) están abiertos en un servidor. La técnica consiste en enviar paquetes UCP de 0 bytes a cada puerto de la máquina objetivo. Si se recibe un mensaje ICMP de puerto no alcanzable, entonces el puerto está cerrado. De lo contrario, asumimos que está abierto. .Sp Alguna gente piensa que el escaneo UDP no tiene sentido. Normalmente les recuerdo el reciente agujero Solaris rcpbind. Puede encontrarse a rcpbind escondido en un puerto UDP no documentado en algún lugar por encima del 32770. Por lo tanto, no importa que el 111 esté bloqueado por la firewall. Pero, ¿quién puede decir en cual de los más de 30000 puertos altos se encuentra a la escucha el programa? ¡Con un escáner UDP se puede! Tenemos también el programa de puerta trasera cDc Back Orifice que se oculta en un puerto UDP configurable en las máquinas Windows, por no mencionar los muchos servicios frecuentemente vulnerables que usan UDP como snmp, tftp, NFS, etc. .Sp Por desgracia, el escaneo UDP resulta a veces tremendamente lento debido a que la mayoría de los servidores implementan una sugerencia recogida en el RFC 1812 (sección 4.3.2.8) acerca de la limitación de la frecuencia de mensajes de error ICMP. Por ejemplo, el kernel de Linux (en /ipv4/icmp.h) limita la generación de mensajes de destino inalcanzable a 80 cada cuatro segundos, con una penalización de 1/4 de segundo si se rebasa dicha cantidad. Solaris tiene unos límites mucho más estrictos (más o menos 2 mensajes por segundo) y por lo tanto lleva más tiempo hacerle un escaneo. .I nmap detecta este límite de frecuencia y se ralentiza en consecuencia, en vez de desbordar la red con paquetes inútiles que la máquina destino ignorará. .Sp Como de costumbre, Microsoft ignoró esta sugerencia del RFC y no parece que haya previsto ningún tipo de límite de frecuencia para las máquinas Windows. Debido a esto resulta posible escanear los 65K puertos de una máquina Windows .B muy rápidamente. ¡Woop! .TP .B \-b Ataque de rebote FTP: Una característica "interesante" del protocolo FTP (FRC 959) es la posibilidad de realizar conexiones ftp tipo "proxy". En otras palabras, ¡me resultaría posible conectarme desde malvado.com al servidor ftp de destino.com y pedirle a ese servidor que enviase un archivo a CUALQUIER PARTE de Internet! Aun así, esto podría haber funcionado bien en 1985 cuando se escribió el RFC, pero en la Internet actual, no podemos permitir que la gente vaya por ahí asaltando servidores ftp y pidiéndoles que escupan sus datos a puntos arbitrarios de Internet. Tal y como escribió *Hobbit* en 1985, este defecto del protocolo "puede usarse para enviar mensajes de correo y noticias cuyo rastro será virtualmente imposible de seguir, machacar servidores en varios sitios web, llenar discos, tratar de saltarse firewalls y , en general, resultar molesto y difícil de detectar al mismo tiempo." Nosotros explotaremos este defecto para (sorpresa, sorpresa) escanear puertos TCP desde un servidor ftp "proxy". De este modo nos podríamos conectar a un servidor ftp tras una firewall, y luego escanear aquellos puertos que con más probabilidad se encuentren bloqueados (el 139 es uno bueno). Si el servidor ftp permite la lectura y escritura en algún directorio (como por ejemplo /incoming), se pueden enviar datos arbitrarios a puertos que se encuentren abiertos (aunque nmap no realiza esta función por sí mismo). .Sp El argumento que se pasa a la opción 'b' es el host que se pretende usar como proxy, en notación URL estándar. El formato es: .I nombre_de_usuario:password@servidor:puerto. Todo excepto .I servidor es opcional. Para determinar qué servidores son vulnerables a este ataque, véase mi artículo en .I Phrack 51. Se encuentra disponible una versión actualizada en la URL de .I nmap (http://www.insecure.org/nmap). .TP .B Opciones Generales No se requiere ninguna pero algunas de ellas pueden resultar de gran utilidad. .TP .B \-p0 No intenta hacer ping a un servidor antes de escanearlo. Esto permite el escaneo de redes que no permiten que pasen peticiones (o respuestas)de ecos ICMP a través de su firewall. microsoft.com es un ejemplo de una red de este tipo, y, por lo tanto, debería usarse siempre .B \-p0 o .B \-PT80 al escanear microsoft.com. .TP .B \-PT Usa el ping TCP para determinar qué servidores están activos. En vez de enviar paquetes de petición de ecos ICMP y esperar una respuesta, se lanzan paquetes TCP ACK a través de la red de destino (o a una sola máquina) y luego se espera a que lleguen las respuestas. Los servidores activos responden con un RST. Esta opción mantiene la eficiencia de escanear únicamente aquellos servidores que se encuentran activos y la combina con la posibilidad de escanear redes/servidores que bloquean los paquetes ping. Para los usuarios no root se usa connect(). Para establecer el puerto de destino de los paquetes de prueba use -PT Esta opción guarda los resultados de sus escaneos en forma .B humanamente inteligible en el archivo especificado como argumento. .TP .B \-m Esta opción guarda los resultados de sus escaneos en un formato .B comprensible para una máquina en el archivo especificado como argumento. .TP .B \-i Lee especificaciones de servidores o redes de destino a partir del archivo especificado en vez de hacerlo de la línea de comandos. El archivo debe contener una lista de expresiones de servidores o redes separadas por espacios, tabuladores o nuevas líneas. Use un guión (-) como .I nombre_de_archivo_de_entrada si desea que nmap tome las expresiones de servidores de stdin. Véase la sección .I Especificación de Objetivo para más información sobre expresiones con las que poder completar este archivo. .TP .B \-p Esta opción determina los puertos que se quieren especificar. Por ejemplo, '-p 23' probará solo el puerto 23 del servidor(es) objetivo. '-p 20-30,139,60000-' escanea los puertos del 20 al 30, el puerto 139 y todos los puertos por encima de 60000. Por defecto se escanean todos los puertos entre el 1 y el 1024 así como los que figuran en el archivo /etc/services. .TP .B \-F Modo de escaneo rápido. Implica que sólo se desean escanear aquellos puertos que figuran en /etc/services. Obviamente esto resulta mucho más rápido que escanear cada uno de los 65535 puertos de un servidor. .TP .B \-D Especifica que se desea efectuar un escaneo con señuelos, el cual hace que el servidor escaneado piense que la red destino del escaneo está siendo escaneada también por el servidor(es) especificados como señuelos. Así, sus IDs pueden informar de entre 5 y 10 escaneos procedentes de direcciónes IP únicas, pero no sabrán que dirección IP les estaba escaneando realmente y cúales eran señuelos inocentes. .Sp Separe cada servidor señuelo con comas, y puede usar opcionalmente 'ME' como señuelo que representa la posición que quiere que ocupe su dirección IP. Si coloca 'ME' en la sexta posición o superior, es muy poco probable que algunos escáneres de puertos comunes (como el excelente scanlogd de Solar Designer) lleguen incluso a mostrar su dirección IP. Si no se usa 'ME', nmap le colocará a usted en una posición aleatoria. .Sp Nótese que aquellos servidores usados como señuelos deben escontrarse activos, o, de lo contrario podría provocar un desbordamiento (flood) SYN en su objetivo. Por otra parte, resultará bastante fácil saber qué servidor está escaneando si únicamente hay uno activo en la red. .Sp Nótese también que algunos (estúpidos) "detectores de escáneres de puertos" opondrán una firewall o bien denegarán el rutaje a aquellos servidores que intenten escanear sus puertos. De este modo se podría provocar inadvertidamente que la máquina que se está intentando escanear perdiese contacto con los servidores usados como señuelos. Esto podría causarles a los servidores escaneados verdaderos problemas si los servidores señuelo fuesen, por ejemplo, su gateway a internet o incluso "localhost". Debería usarse esta opción con extremo cuidado. La verdadera moraleja de este asunto es que un detector de escaneos de puertos que aparenten tener intenciones poco amistosas no debería llevar a cabo acción alguna contra la máquina que aparentemente le está escaneando. ¡Podría no ser más que un señuelo! .Sp Los señuelos se usan tanto en el escaneo ping inicial (usando ICMP, SYN, ACK, o lo que sea) como en la fase de escaneo de puertos propiamente dicha. También se usan los señuelos en la fase de detección remota del sistema operativo ( .B \-O ). .Sp Vale la pena destacar que el uso de demasiados señuelos puede ralentizar el proceso de escaneo y, potencialmente, hacer que sea menos exacto. Por otra parte, algunos ISPs filtrarán los paquetes manipulados y los desecharán, aunque muchos (actualmente la mayoría) no ponen restricciones a este tipo de paquetes. .TP .B \-S En determinadas circunstancias, es posible que .I nmap no sea capaz de determinar su (de usted) dirección IP de origen ( .I nmap se lo hará saber si este es el caso). En este caso, use -S con su dirección IP (del interfaz a través del cual desea enviar los paquetes). .Sp Otro posible uso de esta opción es el de manipular el escaneo para hacer creer a los servidores de destino que .B alguien más les está escaneando. ¡Imagínese a una compañía escaneada repetidamente por una compañía rival! Esta no es la función para la que se ha diseñado esta opción (ni su propósito principal). Simplemente pienso que revela una posibilidad que la gente debería tener en cuenta antes de acusar a los demás de escanear sus puertos. La opción .B \-e será necesaria en general para este tipo de uso. .TP .B \-e Le dice a nmap qué interfaz ha de usar para enviar y recibir paquetes. El programa debería detectar esto por sí mismo, pero le informará si no es así. .TP .B \-g Establece el número de puerto de origen a usar en los escaneos. Muchas instalaciones de firewalls y filtros de paquetes inocentes hacen una excepción en sus reglas para permitir que las atraviesen y establezcan una conexión paquetes DNS (53) o FTP-DATA (20). Evidentemente esto contraviene completamente las ventajas en materia de seguridad que comporta una firewall dado que los intrusos pueden enmascararse como DNS o FTP con una simple modificación de su puerto de origen. Por supuesto, debería probarse primero con el puerto 53 para un escaneo UDP y los escaneos TCP deberían probar el 20 antes del 53. .Sp Nótese que el uso de esta opción penaliza levemente el rendimiento del escaneo, porque a veces se almacena información útil en el número de puerto de origen. .TP .B \-M Establece el número máximo de sockets que se usarán en paralelo para un escaneo TCP connect() (escaneo por defecto). Resulta útil a la hora de ralentizar ligeramente el proceso de escaneo con el fin de evitar que la máquina de destino se cuelgue. Otra manera de hacerlo es usar \-sS, que normalmente les resulta más fácil de asumir a las máquinas de destino. .TP .B Especificación de Objetivo Cualquier cosa que no es una opción (o el argumento de una opción) en namp se trata como una especificación de servidor de destino. El caso más simple consiste en especificar servidores aislados o direcciones IP en la línea de comandos. Si pretende escanear una subred de direcciones IP, entonces se puede añadir .B '/mask' a la dirección IP o al nombre del servidor. .B mask debe estar entre 0 (escanea toda Internet) y 32 (escanea únicamente el servidor especificado). Use /24 para escanear una dirección de clase 'C' y /16 para la clase 'B'. .Sp Nmap dispone también de una notación mucho más potente que permite la especificación de direcciones IP usando listas/rangos para cada elemento. De este modo, se puede escanear la red de clase 'B' completa 128.210.*.* especificando '128.210.*.*' o '128.210.0-255.0-255' o incluso '128.210.1-50,51-255.1,2,3,4,5-255'. Y, por supuesto, se puede usar la notación de máscara: '128.210.0.0/16'. Todas ellas son equivalentes. Si se usan asteriscos ('*'), ha de tenerse en cuenta que la mayoría de los shells requieren que se salga de ellos con caracteres / o que se les proteja con comillas. .Sp Otra posibilidad interesante consiste en dividir Internet en el otro sentido. En vez de escanear todos los servidores en una clase 'B', se puede escanear '*.*.5.6-7' para escanear todas las direcciones IP terminadas en .5.6 o .5.7 Escoja sus propios números. Para más información sobre la especificación de servidores a escanear, véase la sección .I ejemplos a continuación. .SH EJEMPLOS A continuación se muestran algunos ejemplos del uso de nmap que abarcan desde los usos más normales y frecuentes a los más complejos o incluso esotéricos. Nótese que se han incluido direciones IP y nombres de dominio reales para hacer las cosas más concretas. Usted debería sustituirlos por números y direcciones de su .B propia red. No creo que escanear otras redes sea ilegal; ni se deberían considerar los escaneos de puertos como ataques. He escaneado cientos de miles de máquinas y tan sólo he recibido una queja. Pero no soy abogado y es posible que los intentos de .I nmap lleguen a molestar a alguna gente. Obtenga primero el permiso para hacerlo o hágalo bajo su propia responsabilidad. .Sp .B nmap -v objetivo.ejemplo.com .Sp Esta opción escanea todos los puertos TCP reservados en la máquina objetivo.ejemplo.com. La \-v implica la activación del modo de información ampliada. .Sp .B nmap -sS -O objetivo.ejemplo.com/24 .Sp Lanza un escaneo SYN oculto contra cada una de las máquinas activas de las 255 máquinas de la classe 'C' donde se aloja objetivo.ejemplo.com. También trata de determinar el sistema operativo usado en cada una de las máquinas activas. Este escaneo requiere privilegios de roor a causa del escaneo SYN y la detección del sistema operativo. .Sp .B nmap -sX -p 22,53,110,143 "128.210.*.1-127" .Sp Envía un escaneo Xmas tree a la primera mitad de cada una de las 255 posibles subredes de 8 bits en el espacio de direcciones clase 'B' 128.210 . Se trata de comprobar si los sistemas ejecutan sshd, DNS, pop3d, imapd o el puerto 4564. Nótese que el escaneo Xmas no funciona contra servidores ejecutando cualquier sistema operativo de Microsoft debido a una pila TCP deficiente. Lo mismo se aplica a los sistemas CISCO, IRIX, HP/UX, y BSDI. .Sp .B nmap -v -p 80 '*.*.2.3-5' .Sp En vez de centrarse en un rango específico de direcciones IP, resulta a veces interesante dividir Internet en porciones y escanear una pequeña muestra de cada porción. Este comando encuentra todos los servidores web en máquinas cuyas direcciones IP terminen en .2.3, .2.4, o .2.5 . Si usted es root podría añadir también -sS. También encontrará máquinas mucho más interesantes si empieza en 127. así que es posible que desee usar '127-222' en vez de el primer asterisco dado que esa sección tiene una densidad mucho mayor de máquinas interesantes (IMHO). .Sp .B host -l compañía.com | cut '-d ' -f 4 | ./nmap -v -i - .Sp Hace una transferencia de DNS de zona para descubrir los servidores en compañía.com y luego pasar las direcciones IP a .I nmap. Los comandos arriba indicados son para mi sistema Linux. Es posible que se necesiten comandos/opciones diferentes para otros sistemas operativos. .SH BUGS ¿Bugs? ¿Qué bugs? Por favor, envíeme cualquier bug que descubra. Los parches tampoco estarían mal :) Recuerde enviar también nuevas huellas de sistemas operativos para que podamos ampliar nuestra base de datos. .SH AUTOR .Sp Fyodor .I Tipos de Escaneo .SH DISTRIBUCIÓN La última versión de .I nmap se puede obtener en .I http://www.insecure.org/nmap .Sp .I nmap es (C) 1997,1998 de Fyodor (fyodor@insecure.org, fyodor@insecure.org) .Sp Este programa es software libre; puede redistribuirse y/o modificarse bajo los términos de la Licencia Pública General GNU tal y como la publica la Fundación de Software Libre; Versión 2. .Sp Este programa se distribuye con la esperanza de que pueda resultar de utilidad, pero SIN NINGÚN TIPO DE GARANTÍA; sin tan siquiera la garantía e ser apto para su COMECIALIZACIÓN o ADECUADO PARA UN PROPÓSITO EN PARTICULAR. Véase la Licencia Pública General GNU para más detalles (está en el archivo COPYING de la distribución de .I nmap ).