Un tutorial rápido de escaneo de puertos
Uno de mis objetivos en el desarrollo de Nmap es mantener el uso más común simple, manteniendo la flexibilidad para los escaneos personalizados y avanzados. Esto se logra con la interfaz de línea de comandos ofreciendo docenas de opciones, pero eligiendo valores por defecto cuando no se especifican. Un novato puede comenzar con un comando tan simple comonmap <target>
.Mientras tanto, los usuarios avanzados a veces especifican tantas opciones que su línea de terminal se envuelve.
Un equilibrio similar debe ser alcanzado con la salida del comando. Los resultados más importantes deben destacarse incluso para el usuario ocasional que ni siquiera ha leído la página del manual. Sin embargo, la salida debe ser lo suficientemente completa y concisa para satisfacer a los probadores de penetración profesionales que ejecutan Nmap contra miles de máquinas diariamente. Los usuarios lo suficientemente inteligentes como para leer este libro o el código fuente de Nmap se benefician de un mayor control del escáner y de la comprensión de lo que realmente significa la salida de Nmap.
Este tutorial demuestra algunos escenarios comunes de escaneo de puertos de Nmap y explica la salida. En lugar de intentar ser exhaustivo, el objetivo es simplemente familiarizar a los nuevos usuarios lo suficiente como para entender el resto de este capítulo.
El comando más simple de Nmap es simplemente nmap. Un comando más interesante es nmap<target>
, que hace lo siguiente:
-
Convierte
<target>
de un nombre de host a una dirección IPv4 usando DNS. Si se especifica una dirección IP en lugar de un nombre de host se omite esta búsqueda. -
Pincha el host, por defecto con un paquete ICMP echo request y un paquete TCP ACK al puerto 80, para determinar si está funcionando. Si no lo está, Nmap informa de ello y sale. Podría haber especificado
-Pn
para saltarse esta prueba. Consulte el Capítulo 3, Descubrimiento de hosts («Escaneo Ping»). -
Convierte la dirección IP de destino de nuevo en el nombre utilizando una consulta DNS inversa. Debido a la forma en que funciona el DNS, el nombre inverso puede no ser el mismo que el
<target>
especificado en la línea de comandos. Esta consulta se puede omitir con la opción-n
para mejorar la velocidad y el sigilo. -
Lanza un escaneo de puertos TCP de los 1.000 puertos más populares listados en
nmap-services
. Generalmente se utiliza un escaneo SYN sigiloso, pero el escaneo de conexión es sustituido en su lugar por usuarios de Unix que no son root y que carecen de los privilegios necesarios para enviar paquetes sin procesar. -
Imprime los resultados en la salida estándar en un formato normal legible para el ser humano, y sale. Se pueden especificar otros formatos y ubicaciones de salida (archivos), como se describe en el Capítulo 13, Formatos de salida de Nmap. El ejemplo 4.2 muestra los resultados cuando se utiliza scanme.nmap.org como
<target>
.
Ejemplo 4.2. Escaneo simple: nmap scanme.nmap.org
# Starting Nmap ( http://nmap.org )Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 994 filtered portsPORT STATE SERVICE22/tcp open ssh25/tcp closed smtp53/tcp open domain70/tcp closed gopher80/tcp open http113/tcp closed authNmap done: 1 IP address (1 host up) scanned in 4.99 seconds
La primera línea de salida en el Ejemplo 4.2 simplemente da la URL para descargar Nmap. La hora de inicio de Nmap y el número de versión también se proporcionan normalmente, aunque generalmente se han eliminado de este libro por coherencia y para evitar el encadenamiento de líneas.
La siguiente línea proporciona la dirección IP de destino (IPv4 en este caso), y el nombre DNS inverso (también conocido como registro PTR) si está disponible. Nmap promete mostrar los «puertos interesantes», aunque todos los puertos escaneados se tienen en cuenta. Los puertos que se consideran más interesantes porque están abiertos o en un estado poco frecuente para ese host se detallan individualmente. Cuando muchos puertos están en un solo estado no abierto, se consideran un estado por defecto, y se agregan en una sola línea para evitar diluir los resultados con miles de entradas no interesantes. En este caso, Nmap observa que 994 puertos están filtrados.
La tabla de puertos interesantes viene a continuación, y proporciona los resultados del escaneo de claves. Las columnas varían dependiendo de las opciones utilizadas, pero en este caso proporcionan el número de puerto y el protocolo, el estado y el protocolo de servicio para cada puerto. El servicio aquí es sólo una suposición hecha al buscar el puerto en nmap-services
. El servicio aparecería como unknown
si alguno de los puertos no tuviera un nombre registrado en ese archivo. Tres de estos puertos están abiertos y tres están cerrados.
Por último, Nmap informa de algunas estadísticas básicas de tiempo antes de salir. Estas estadísticas son el número de objetivos especificados, el número de los que el escaneo ping encontró para estar arriba, y el tiempo total tomado.
Aunque este simple comando es a menudo todo lo que se necesita, los usuarios avanzados a menudo van mucho más allá. En el ejemplo 4.3, el escaneo se modifica con cuatro opciones. -p0-
le pide a Nmap que analice todos los puertos TCP posibles, -v
le pide a Nmap que sea verboso al respecto, -A
habilita pruebas agresivas como la detección de SO remoto, detección de servicio/versión y el motor de scripting de Nmap (NSE). Finalmente, -T4
habilita una política de tiempo más agresiva para acelerar el escaneo.
Ejemplo 4.3. Más complejo: nmap -p0- -v -A -T4 scanme.nmap.org
# Starting Nmap ( http://nmap.org )Completed Ping Scan at 00:03, 0.01s elapsed (1 total hosts)Scanning scanme.nmap.org (64.13.134.52) Discovered open port 22/tcp on 64.13.134.52Discovered open port 53/tcp on 64.13.134.52Discovered open port 80/tcp on 64.13.134.52SYN Stealth Scan Timing: About 6.20% done; ETC: 00:11 (0:07:33 remaining)Completed SYN Stealth Scan at 00:10, 463.55s elapsed (65536 total ports)Completed Service scan at 00:10, 6.03s elapsed (3 services on 1 host)Initiating OS detection (try #1) against scanme.nmap.org (64.13.134.52)Initiating Traceroute at 00:1064.13.134.52: guessing hop distance at 9Completed SCRIPT ENGINE at 00:10, 4.04s elapsedHost scanme.nmap.org (64.13.134.52) appears to be up ... good.Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 65530 filtered portsPORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 4.3 (protocol 2.0)25/tcp closed smtp53/tcp open domain ISC BIND 9.3.470/tcp closed gopher80/tcp open http Apache httpd 2.2.2 ((Fedora))|_HTML title: Go ahead and ScanMe!113/tcp closed authDevice type: general purposeRunning: Linux 2.6.XOS details: Linux 2.6.20-1 (Fedora Core 5)Uptime guess: 2.457 days (since Thu Sep 18 13:13:24 2008)TCP Sequence Prediction: Difficulty=204 (Good luck!)IP ID Sequence Generation: All zerosTRACEROUTE (using port 80/tcp)HOP RTT ADDRESS9 10.36 metro0.sv.svcolo.com (208.185.168.173)10 10.29 scanme.nmap.org (64.13.134.52)Nmap done: 1 IP address (1 host up) scanned in 477.23 seconds Raw packets sent: 131432 (5.783MB) | Rcvd: 359 (14.964KB)
¡Nmap ciertamente proporcionó la verbosidad solicitada en el Ejemplo 4.3! Afortunadamente, la salida adicional es fácil de entender. Las primeras 13 líneas nuevas son información en tiempo de ejecución que permite al usuario saber lo que está ocurriendo mientras mira fijamente al terminal, esperando buenas noticias. Lo que constituye una buena noticia depende de si se trata de un administrador de sistemas que tiene que arreglar los problemas, de un probador de plumas que necesita algunos problemas para informar, o de un cracker de sombrero negro que intenta explotarlos. Se han eliminado una docena de líneas similares por razones de brevedad. Las líneas de «puerto abierto descubierto» proporcionan una notificación de los puertos abiertos para que ella pueda empezar a golpearlos antes de que el escaneo termine. La línea «scan timing» proporciona una estimación del tiempo de finalización, para que sepa si debe seguir mirando la pantalla o almorzar. Dado que las condiciones de la red (latencia, congestión, ancho de banda, etc.) y las reglas de filtrado de paquetes varían mucho, las mismas opciones de escaneo pueden tardar 30 segundos en completarse contra un host y 45 minutos contra otro. Si desea la estimación del tiempo actual durante el escaneo, simplemente presioneenter.
La tabla de puertos no muestra nuevos puertos. Todos los puertos extra escaneados están en estado filtrado, aumentando el total de puertos filtrados de 994 a 65.530. Aunque no hay nuevos puertos detallados, las entradas han cambiado. Una nueva columna VERSION
proporciona el nombre de la aplicación y los detalles de la versión del servicio de escucha. Esto proviene de la detección de servicios, una de las características habilitadas por la opción -A
.Otra característica de la detección de servicios es que todos los protocolos de servicio en la columna SERVICE
han sido verificados. En el escaneo anterior, se basaron en la heurística relativamente débil de una búsqueda de números de puerto nmap-services
. Esa búsqueda en la tabla resultó ser correcta esta vez, pero no lo será siempre.
Otra característica añadida por -A
es el motor de scripting de Nmap, que se discute en profundidad en el capítulo 9, Motor de scripting de Nmap. El único script que se muestra aquí es HTMLtitle
. Existen docenas de otros scripts, pero ninguno encontró resultados útiles para esta máquina. Los resultados del trazador de rutas también fueron agregados por -A
. Esta opción es más eficiente y más potente que la mayoría de los programas de traceroute, ya que los sondeos se realizan en paralelo y Nmap utiliza los resultados del escaneo para determinar un tipo de prueba favorable (paquetes TCP al puerto 80 en este caso).
La mayoría de las líneas nuevas restantes provienen de la detección del SO (también activada por -A
), que se discute en profundidad en el Capítulo 8, Detección del SO remoto. La última línea muestra que toda esta información adicional tuvo un precio: el análisis tardó casi 100 veces más que el ejemplo 4.2, «Análisis simple: nmap scanme.nmap.org» en completarse (477 segundos en comparación con 5).