Salida

La utilidad de una herramienta de seguridad está limitada por la salida que genera. De poco sirven pruebas y algoritmos complejos si luego no se presentan de una forma organizada y comprensible. Dada la cantidad de formas en las que puede utilizarse Nmap, tanto por personas como por otros programas, no es posible complacer a todos con un único formato. Por ello Nmap ofrece varios formatos, incluyendo el modo interactivo para que los humanos lo lean directamente y un formato XML para que sea interpretado por otros programas.

Además de ofrecer distintos formatos de salida, Nmap ofrece opciones adicionales para controlar cuanta información de más se muestra en la salida, así como opciones para controlar los mensajes de depuración que se muestran. Los tipos de salida pueden enviarse a la salida estándar o a algún archivo especificando su nombre. Nmap puede añadir información al archivo o sobreescribirlo. Los formatos de salida pueden utilizarse también para retomar un sondeo que se haya interrumpido.

Nmap puede generar la salida en cinco formatos distintos. El formato por omisión es el llamado salida interactiva, y se envía a la salida estándar («stdout»). También está la salida normal, que es similar a la salida interactiva salvo que muestra menos información de ejecución y menos advertencias, ya que se espera que se analice una vez que el sondeo haya terminado en lugar de ser analizada interactivamente.

La salida XML es uno de los formatos de salida más importantes, ya que puede convertirse a HTML, los programas (como la interfaz de usuario de Nmap) pueden interpretarla fácilmente o puede importarse a una base de datos.

Los dos tipos de salida restantes son la sencilla salida para grep (o «grepeable») que incluye la mayoría de la información de un sistema analizado en una sola línea, y la s4L1d4 sCRiPt KiDDi3 para usuarios que se consideran a sí mismos |<-r4d.

Aunque se utiliza la salida interactiva por omisión y no tiene ninguna opción de la línea de órdenes, los demás formatos utilizan la misma sintaxis. Toman un solo argumento, que es el archivo donde se guardarán los resultados. Pueden especificarse múltiples formatos al mismo tiempo, pero sólo puede especificar el mismo formato una vez. Por ejemplo, puede querer guardar la salida normal para su propia visualización mientras se guarda la información del mismo sondeo en formato XML para realizar un análisis posterior con un programa. Para hacer ésto debe utilizar las opciones -oX misondeo.xml -oN misondeo.nmap. Se recomienda utilizar nombres más descriptivos, si bien este capítulo utiliza nombres sencillos como misondeo.xml por razones de brevedad. Los nombres elegidos son una cuestión de preferencia personal. Yo utilizo nombres largos que incluyen la fecha del análisis y una palabra o dos describiendo el sondeo, dentro de un directorio con el nombre de la empresa que estoy analizando.

Nmap seguirá imprimiendo la salida interactiva en «stdout» como lo hace habitualmente aunque se guarden en archivos la salida con estas opciones. Por ejemplo, la orden nmap -oX misondeo.xml destino imprime XML en misondeo.xml y llena la salida estándar con los mismos resultados interactivos que habría impreso si no se hubiese especificado la opción -oX. Puedes cambiar este comportamiento dando un guión como argumento a una de las opciones de salida. Esto hace que Nmap desactive la salida interactiva y que imprima en su lugar los resultados en el formato especificado en la salida estándar. Con lo que la orden nmap -oX - destino enviará únicamente la salida XML a la salida estándar («stdout»). Los errores graves seguirán presentándose, posiblemente, en la salida normal de error, «stderr».

A diferencia de algunos argumentos de Nmap, es obligatorio separar con un espacio la opción de salida (como -oX) y el nombre del archivo o el guión. Si los omite y pone el argumento como -oG- o -oXsondeo.xml, una funcionalidad de compatibilidad con versiones anteriores hará que se cree una salida normal en los ficheros llamados G- y Xscan.xml respectivamente.

Nmap también ofrece opciones para controlar la información extra que se ofrece sobre el sondeo y añadirlo a los archivos de salida en lugar de sobreescribirlos. Todas estas opciones se describen a continuación.

Formatos de salida de Nmap
-oN <filespec> (Salida normal)

Solicita que la salida normal sea redirigida al archivo especificado. Como se ha dicho anteriormente, esto difiere un poco de la salida interactiva.

-oX <filespec> (salida XML)

Solicita que la salida en XML se redirigida al archivo especificado. Nmap incluye un DTD que pueden utilizar los intérpretes de XML para validar la salida XML. Aunque está dirigida a que la utilicen programas, también puede ayudar a que una persona interprete la salida de Nmap. El DTD define los elementos legales del formato, y generalmente enumera los atributos y valores que pueden tener. La última versión está siempre disponible en https://nmap.org/data/nmap.dtd.

XML ofrece un formato estable que es fácilmente interpretado por cualquier programa. Hay intérpretes libres de XML para los lenguajes de ordenador más importantes, incluyendo C/C++, Perl, Python, y Java. La gente ha escrito librerías para la mayoría de estos lenguajes que manejan específicamente la salida de Nmap. Por ejemplo Nmap::Scanner y Nmap::Parser en el CPAN de Perl. XML es el formato preferente en la mayoría de los casos en que una aplicación no trivial quiere utilizar Nmap.

La salida de XML hace referencia a la hoja de estilo XSL que puede utilizarse para formatear los resultados en HTML. La forma más fácil de utilizarla es simplemente cargar la salida XML en un navegador web como Firefox o IE. Por omisión, ésto solo funcionará en el equipo en el que ejecutó Nmap (o uno configurado igual que dicho equipo) ya que la ruta de nmap.xsl se incluye directamente dentro del archivo. Puede utilizar la opción --webxml o --stylesheet para crear un XML portable que pueda mostrarse como HTML en cualquier ordenador conectado a la web.

-oS <filespec> (SaLiDa ScRipT KIdd|3)

La salida «script kiddie» es como la salida interactiva, excepto que se post-procesa para que la vean mejor los «l33t HaXXorZ» a los que antes no les gustaba Nmap por su uso consistente de mayúsculas y minúsculas. Aquellos que no tengan sentido del humor deberían tomar nota de que esta opción es una broma sobre los «script kiddies» antes de criticarme por ayudarlos.

-oG <filespec> (Salida «grepeable»)

Este formato de salida se trata el último porque está obsoleto. La salida en formato XML es mucho más poderosa, y es igual de conveniente para los usuarios experimentados. XML es un estándar para el que se dispone de docenas de intérpretes, mientras que la salida para grep es un «hack» propio. XML puede extenderse para soportar nuevas funcionalidades de Nmap tan pronto como se liberen, mientras que en general tengo que omitir estas funcionalidades de la salida para grep por no tener un lugar donde ponerlas.

Sin embargo, la salida para grep es todavía bastante popular. Es simplemente un formato que lista cada sistema en una línea y que puede ser fácilmente tratado con herramientas estándar de UNIX como grep, awk, cut, sed, diff y Perl. Incluso yo la utilizo para pruebas rápidas que hago desde la línea de órdenes. Sólo hace falta un grep para identificar todos los sistemas con el puerto de ssh abierto o que ejecuten Solaris, enviando la salida a través de un conector a awk o cut para mostrar los campos deseados.

La salida para grep consiste en comentarios (líneas que empiezan por una almohadilla, «#») y líneas de objetivo. Una línea de objetivo incluye una combinación de seis campos marcados, separados por tabulaciones y seguidos de dos puntos. Los campos (en inglés) son Host (Sistema), Ports (Puertos), Protocols (Protocolos), Ignored State (Estado omitido), OS (Sistema operativo), Seq Index (índice de secuencia), IPID, y Status (Estado).

El campo más importante de todos habitualmente es Ports, que es el que da los detalles de cada puerto interesante encontrado. Consiste en una lista separada por comas de entradas de puerto. Cada entrada de puerto representa uno de los puertos de interés y se muestra con siete subcampos separados por una barra («/»). Los subcampos son: Port number (Número de puerto), State (Estado), Protocol (Protocolo), Owner (Propietario), Service (Servicio), SunRPC info (Información SunRPC), y Version info (Información de versión).

Esta página de manual, al igual que en el caso de la salida XML, no puede incluir la documentación completa de este formato. Puede encontrar más información detallada de la salida de Nmap para grep en http://www.unspecific.com/nmap-oG-output.

-oA <nombre_base> (Salida en todos los formatos)

Por comodidad, puede especificar la opción -oA <nombre_base> para guardar los resultados de los sondeos en <nombre_base>.nmap, <nombre_base>.xml, y <nombre_base>.gnmap, respectivamente. Al igual que la mayoría de los programas puede poner un prefijo con la ruta del directorio como pudiera ser ~/registros_nmap/empresa_foo/ en UNIX o c:\hacking\sco en Windows.

Opciones de depuración y de detalle
-v (Incrementa el nivel de detalle)

Hace que Nmap imprima más información sobre el sondeo que está realizando incrementando el nivel de detalle. Los puertos abiertos se muestran en cuanto se encuentran y se muestra una estimación del tiempo que Nmap espera que dure la tarea de sondeo si piensa que va a durar más de un par de minutos. Puede utilizarlo dos veces para obtener aún más detalle. No tiene ningún efecto el utilizarlo más de dos veces.

La mayoría de los cambios sólo afectan a la salida interactiva, y algunos también afectan a la salida «script kiddie». Dado que los demás formatos van a ser tratados por programas, Nmap da información detallada en estos formatos por omisión sin fatigar a un usuario humano. Sin embargo, hay algunos cambios en los otros modos que hacen que el tamaño de la salida resultante se reduzca sustancialmente al omitir información detallada. Por ejemplo, sólo se imprime una línea de comentario con todos los puertos sondeados en el formato de salida para grep si se activa el modo de detalle, porque puede ser demasiada información.

-d [level] (Incrementar o fijar el nivel de depuración)

Cuando no obtiene suficientes datos ni siquiera con el modo de detalle, ¡puede utilizar el modo de depuración para inundarse de detalles! Al igual que con la opción de detalle (-v), puede activar la depuración con una opción en la línea de órdenes (-d). Puede incrementar el nivel de depuración si la especifica múltiples veces. También puede fijar directamente el nivel de depuración si da un argumento a la opción -d. Por ejemplo, si utiliza -d9 se fijaría el nivel de depuración en el nueve. Ese es el nivel más alto de depuración y provocará que se impriman miles de líneas a no ser que haga sondeos muy sencillos con pocos puertos y objetivos.

La salida de depuración es útil cuando sospecha que hay un fallo en Nmap o simplemente si está confundido y quiere saber qué hace Nmap y por qué. Las líneas de depuración no son auto-explicativas, dado que esta función está dirigida a los desarrolladores. Puede obtener algo como esto: Timeout vals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. Su único recurso si no entiende una línea es ignorarla, buscarla en el código fuente, o solicitar ayuda en la lista de desarrolladores (nmap-dev). Algunas líneas sí son auto-explicativas, pero los mensajes se vuelven más y más extraños a medida que se incrementa el nivel de depuración.

--packet-trace (Trazar paquetes y datos enviados y recibidos)

Esta opción hace que Nmap imprima un resumen de cada paquete que envía o recibe. Esto se utiliza muchas veces para poder depurar el programa, pero también es útil para los usuarios nuevos que quieren entender exactamente que es lo que hace Nmap bajo el capó. Puede especificar un número reducido de puertos para evitar que se impriman miles de líneas, como por ejemplo -p20-30. Si sólo está interesado en el funcionamiento del subsistema de detección de versiones debe utilizar la opción --version-trace.

--iflist (Listar interfaces y rutas)

Imprime la lista de interfaces y las rutas del sistema tal y como las detecta Nmap. Esta opción es útil para depurar problemas de enrutamiento o caracterizaciones equivocadas del tipo de interfaz (como por ejemplo, cuando Nmap trata una conexión PPP como una interfaz Ethernet).

Opciones misceláneas de salida
--append-output (Añadir en lugar de borrar los archivos de salida)

El fichero especificado como salida de un formato como pueda ser -oX or -oN se sobreescribe por omisión. Si prefiere mantener el contenido existente y añadir los nuevos resultados tendrá que especificar la opción --append-output. La información obtenida se añadirá a los ficheros especificados en esa ejecución de Nmap en lugar de sobreescribirlos. Esto no funciona bien para los ficheros de salida XML (-oX) ya que el fichero resultante no se podrá leer correctamente, por regla general, hasta que lo arregle manualmente.

--resume <nombre_archivo> (Continuar un sondeo detenido)

Algunas ejecuciones de Nmap tardan mucho tiempo, del orden de días. Esos sondeos no siempre se ejecutan hasta el final. Es posible que haya restricciones que impidan los sondeos de Nmap durante la jornada laboral, se puede caer la red o el sistema donde se está ejecutando Nmap puede sufrir un reinicio esperado o uno no planificado, o incluso es posible que Nmap aborte. El administrador que está ejecutando Nmap podría cancelarlo también por cualquier otra razón, simplemente pulsando ctrl-C. En estos casos puede no desearse empezar el sondeo completo desde el principio. Afortunadamente, si se ha guardado una salida normal (-oN) o para tratarla con grep (-oG), el usuarios puede pedir a Nmap que continúe el sondeo con el objetivo en el que estaba trabajando cuando se detuvo la ejecución. Simplemente se tiene que especificar la opción --resume y dar un archivo de salida normal o «grepeable» como argumento. No se puede dar ningún otro argumento, ya que Nmap trata el archivo para utilizar las mismas opciones que se especificaron entonces. Sólo se debe llamar a Nmap con nmap --resume <archivo_de_registro>. Nmap añadirá cualquier resultado nuevo a los ficheros de datos especificados en la ejecución previa. No se soporta la capacidad de reanudar un sondeo con el formato de salida XML porque combinar dos salidas en un sólo fichero XML válido sería difícil.

--stylesheet <ruta o URL> (Fija la hoja de estilo XSL para transformar la salida XML)

Nmap se distribuye conjuntamente con una hoja de estilo XSL llamada nmap.xsl para poder ver o traducir la salida XML a HTML. La Salida XML incluye una directiva xml-stylesheet que apunta al punto donde está instalado nmap.xml (o al directorio de trabajo actual en Windows). Para mostrar los resultados basta cargar la salida XML en un navegador de web moderno y éste recogerá y utilizará el archivo nmap.xsl del sistema de ficheros. Si quiere especificar una hoja de estilo diferente, tiene que especificarla como argumento a la opción --stylesheet. Puede dar una ruta completa o un URL. Una forma habitual de llamar a esta opción es la siguiente: --stylesheet https://nmap.org/data/nmap.xsl. Esto le dice al navegador que descargue la última versión de la hoja de estilo de Insecure.Org. La opción --webxml hace lo mismo pero con menos teclas y es más fácil de recordar. Esto facilita la visualización de resultados en un sistema que no tiene Nmap instalado (y que por tanto carece de un archivo nmap.xsl). Así, la URL es lo más útil, pero se utiliza el sistema de ficheros local para el archivo nmap.xsl por omisión por razones de privacidad.

--webxml (Carga la hoja de estilo de Insecure.Org)

Esta opción es simplemente un alias para --stylesheet https://nmap.org/data/nmap.xsl.

--no-stylesheet (Omite la declaración de hoja de estilo XSL del XML)

Puede utilizar esta opción para evitar que Nmap asocie una hoja de estilo XSL a su salida XML. En este caso, se omite la directiva xml-stylesheet de la salida.