Nmap: una» Herramienta de Hackers » para Profesionales de la seguridad
por Justin Hutchens
La noción de «hacker ético» siempre ha sido irónica. Las tendencias en desarrollo de la piratería ética y la seguridad ofensiva han transformado la industria de la seguridad de la información en una de las industrias que más se perpetúan en el mundo.
El software y las herramientas que se utilizan para proteger los activos de información vulnerables son las mismas herramientas que se pueden utilizar para explotarlos. Tal vez sea al revés. Tal vez las herramientas que se crearon con el único propósito de explotar los activos de información se estén utilizando ahora para protegerlos. Supongo que este es un debate que podría durar para siempre y en realidad es solo otro ejemplo de «¿qué vino primero the la gallina o el huevo?»
El propósito de este ensayo no es discutir la cuestión filosófica de la intención. Mis intenciones son más modestas. Simplemente busco justificar la importancia de una herramienta que ha sido etiquetada consistentemente como software de hacking malicioso. La herramienta a la que me refiero es Network Mapper, o nmap para abreviar. Ya sea que usted sea un agente loco que está empeñado en incitar a la revolución global o un profesional de la seguridad de la red (esperemos que este último, en lugar del primero), nmap debe tener un lugar permanente en su kit de herramientas. Tal vez, en lugar de lanzar críticas a una herramienta de redes extremadamente funcional, deberíamos responsabilizar a las personas por sus acciones y reflexionar sobre la conocida advertencia de Benjamin Parker:»un gran poder conlleva una gran responsabilidad.»A pesar de algunas afirmaciones en sentido contrario, nmap no es software malicioso. Y creo que la única razón por la que a menudo se etiqueta como tal es debido a su impresionante lista de capacidades. A pesar de su potencial para hacer daño, nmap puede desempeñar un papel importante en la seguridad de una infraestructura de red dentro de un entorno profesional.
Nmap ha evolucionado constantemente a lo largo de los años de una simple utilidad de escaneo a una plataforma de pruebas de penetración completa. Se puede utilizar en cada paso del proceso de auditoría de seguridad, para incluir detección de redes, exploración de puertos, enumeración de servicios, mapeo de vulnerabilidades e incluso explotación. A lo largo de este artículo, analizaré las capacidades de nmap en lo que respecta a cada paso en el proceso de pruebas de penetración.
Instalación y Preparación
Obviamente, antes de usar nmap, es importante tener una versión funcional instalado en el sistema que está utilizando. De forma predeterminada, nmap ya está instalado en la mayoría de los sistemas operativos de pruebas de penetración y seguridad de red, como Kali-Linux, Backtrack, DEFT, Node-Zero, Security Onion y NST. Sin embargo, también se puede cargar en casi cualquier plataforma de su elección. Nmap se puede instalar fácilmente en todos los sistemas operativos de uso común para incluir Windows, Linux y OSX. También hay documentación disponible para instalarlo en plataformas más oscuras como BSD, Solaris, AIX y AmigaOS. Los paquetes de instalación y las instrucciones sobre cómo realizar la instalación en cualquiera de estos sistemas se pueden encontrar en http://nmap.org/book/install.html.
Zenmap – Interfaz gráfica
Además de la interfaz de línea de comandos tradicional para nmap, también hay una interfaz gráfica de front-end llamada Zenmap. Zenmap también está integrado en muchas de las diferentes plataformas de pruebas de penetración discutidas anteriormente. Sin embargo, no está instalado de forma predeterminada en Kali-Linux (la plataforma que usaré para este tutorial). Afortunadamente, está en el repositorio de instalación y se puede instalar fácilmente con un solo comando:
apt-get install zenmap
La interfaz de apuntar y hacer clic de Zenmap no solo agiliza de manera efectiva lo que de otro modo requeriría comandos complicados, sino que también puede ser una herramienta extremadamente útil para aprender a usar nmap. Utiliza ‘perfiles’ para guardar configuraciones de escaneo de uso común para su posterior modificación y/o uso. Eche un vistazo a la imagen de la interfaz de Zenmap que se proporciona en la Figura 1 y abordaremos brevemente cada uno de los componentes.
Figura 1. Interfaz gráfica Zenmap
El primer componente es el campo de destino (Figura 1. Un). Este campo es donde puede especificar los sistemas remotos en los que desea ejecutar un análisis. Puede introducir una sola dirección IP (por ejemplo, 192.168.1.1), puede introducir un rango secuencial de direcciones IP (por ejemplo, 192.168.1).0-255) o puede usar la notación CIDR para especificar una subred deseada (por ejemplo, 192.168.1.0/24). El segundo componente es el campo de perfil (Figura 1. B). Puede hacer clic en la flecha desplegable a la derecha de este campo para ver varios perfiles preconfigurados para escanear. Los perfiles le permiten guardar configuraciones de escaneo de uso común para uso futuro. También puedes crear tus propios perfiles y luego aparecerán en esta lista (discutiremos cómo hacerlo más adelante en este artículo). El tercer componente es el campo de comando (Figura 1. C). Este campo indicará el comando que se va a enviar al motor. Para iniciar el comando que aparece en este campo, simplemente haga clic en el botón Escanear. Puede modificar el valor en este campo directamente; sin embargo, se rellenará automáticamente en función de los valores del campo de destino y del perfil seleccionado. Si es nuevo en nmap, debe prestar mucha atención a este campo, ya que le proporcionará una mejor comprensión de la sintaxis adecuada y el uso de diferentes comandos de nmap. El cuarto componente es la lista de Host/Servicio (Figura 1. D). Una vez que haya realizado escaneos, la información se completará en esta lista. Si tiene seleccionado el botón Hosts, se mostrarán todas las direcciones IP de host descubiertas. Y si tiene seleccionado el botón servicios, se mostrarán todos los servicios de red descubiertos. El componente final (Figura 1. E) es donde puede ordenar toda la información que ha sido producida por todos los escaneos que ha realizado. La pestaña Salida de Nmap mostrará la salida exacta que se proporcionaría si el comando se hubiera introducido desde la interfaz de línea de comandos. El contenido de la pestaña Puertos/Hosts variará dependiendo de si tiene el botón Hosts o Servicios seleccionado para su lista. Si se selecciona el botón Hosts, la información de la pestaña Puertos/Hosts reflejará los servicios que se identificaron en la dirección IP resaltada activamente en la lista. De lo contrario, si se selecciona el botón Servicios, la información en la pestaña Puertos/Hosts identificará todos los hosts que se encontró que tenían el servicio en particular que está resaltado en la lista. La pestaña topología proporcionará una representación gráfica de la topología lógica de la red, para incluir todos los hosts que se hayan descubierto al escanear. Utilizará valores TTL (Time-To-Live) devueltos para mostrar la orientación lógica de los hosts, en relación unos con otros. La pestaña Detalles del host es donde encontrará la mayor parte de la información que se ha descubierto sobre un host seleccionado. Esta información incluye direcciones MAC, direcciones IP, puertos abiertos, servicios identificados, información del sistema operativo y cualquier información adicional que se haya recopilado. Por último, la pestaña escaneos proporcionará un historial de escaneos realizados durante la sesión.
En la parte superior de la pantalla verá varios menús desplegables diferentes para incluir Escaneo, Herramientas, Perfil y Ayuda. El menú Ayuda se explica por sí mismo. El menú Exploración contiene opciones para crear nuevas exploraciones, guardar exploraciones o abrir exploraciones guardadas previamente. El menú Herramientas proporciona algunas funciones adicionales que se pueden usar para ordenar y organizar la información recopilada durante los escaneos. Y el menú Perfil ofrece opciones para crear nuevos perfiles de exploración o editar perfiles existentes.
Ahora discutiremos brevemente cómo crear un nuevo perfil y luego iniciar un escaneo con ese perfil. Para comenzar, seleccione el menú desplegable Perfil y, a continuación, seleccione «Nuevo perfil o Comando».»Esto abrirá una interfaz de configuración de perfil que se puede ver en la Figura 2.
Figura 2. Editor de perfiles Zenmap
La primera pestaña (Pestaña Perfil) le permite crear un nombre y una descripción únicos para el perfil. Todas las demás pestañas son donde especificará las diferentes configuraciones que se utilizarán en el análisis. Como puede ver en la ficha Exploración que se muestra en la Figura 2, crear un perfil de exploración es tan sencillo como marcar las casillas de las opciones que desea habilitar, introducir valores para que esas opciones se puedan emplear de manera efectiva o seleccionar opciones predefinidas en el menú desplegable. Si no está seguro sobre la función o el uso apropiado de cualquier opción aquí, puede pasar el ratón sobre ella y la columna de ayuda en el lado derecho de la pantalla se rellenará automáticamente con información sobre lo que hace la opción específica y los valores y la sintaxis apropiados para cualquier campo de entrada solicitado. Con cada ajuste menor que realice en la configuración de escaneo, el campo de comandos en la parte superior se ajusta en consecuencia. Esta característica hace de Zenmap una herramienta extremadamente efectiva para aprender a usar correctamente los comandos nmap. Una vez que haya configurado las opciones de escaneo a su gusto, puede seleccionar el botón Escanear en la parte superior derecha de la pantalla para un solo uso, o puede seleccionar Guardar cambios en la parte inferior derecha. El botón Guardar cambios guardará el perfil con el nombre proporcionado en la primera pestaña configuraciones y luego se puede usar inmediatamente o en un momento posterior seleccionándolo por nombre en el menú desplegable Perfil en la interfaz principal de Zenmap. Aunque Zenmap es muy potente, no debe permitir que se convierta en una muleta que le impida aprender las funciones de línea de comandos de nmap. Aunque Zenmap puede realizar muchas de las mismas funciones, todavía tiene sus limitaciones y no es tan potente como nmap. Para utilizar nmap de manera efectiva y a todo su potencial, es importante familiarizarse igualmente con la interfaz de línea de comandos.
Descubrimiento de red
El primer paso en el proceso de pruebas de penetración que vamos a discutir es el descubrimiento de red. Antes de evaluar la seguridad de los sistemas de información en una red, primero debe identificar lo que está evaluando. Hay varias formas diferentes de descubrir hosts en una red mediante el uso de nmap. En esta sección, discutiremos cómo usar nmap para realizar el descubrimiento de host en las capas 2, 3 y 4 del modelo OSI y también discutiremos las ventajas y desventajas de cada uno. Un ejemplo de un comando para realizar la detección de capa 2 se puede ver aquí:
nmap-PR-sn 192.168.1.0-255
El conmutador -PR
especifica un ping ARP. Utiliza paquetes ARP (Protocolo de Resolución de direcciones) de capa 2 para identificar hosts activos dentro del rango especificado. Para ello, envía una solicitud de difusión ARP para cada una de las direcciones IP identificadas. Si hay un host en vivo en la red con una de esas direcciones IP, ese host enviará una respuesta ARP al sistema de escaneo con su dirección IP y su dirección MAC de capa 2 correspondiente. Nmap recopilará respuestas de todos los hosts en vivo y luego devolverá una lista de hosts que se descubrieron. El conmutador -sn
se utiliza para solicitar que nmap no realice ningún escaneo de puertos. Esto evita la transmisión de cualquier tráfico adicional, más allá de lo necesario para realizar el barrido de detección de host de capa 2. El descubrimiento de la capa 2 es efectivo porque es la más rápida de las tres opciones. Sin embargo, está limitado por el hecho de que solo se puede realizar contra hosts que estén en la misma red de área local que el sistema que está realizando la exploración.
Para hosts remotos, tendrá que usar la detección de capa 3 o de capa 4. Un ejemplo de un comando que podría usarse para realizar la detección de capa 3 es:
nmap-PE-sn 109.74.11.0-255
Este comando enviará una serie de solicitudes de eco ICMP a cada dirección IP de capa 3 de la lista. Nmap recopilará todas las respuestas de eco ICMP que se reciban y devolverá una lista de todos los anfitriones en vivo. Este análisis de detección es más lento que realizar un ping ARP, pero devolverá resultados para hosts en redes remotas.
Finalmente, supongamos que está intentando descubrir sistemas remotos (por lo que no puede usar la capa 2) que están detrás de un firewall que elimina todo el tráfico ICMP entrante (por lo que no puede usar la capa 3). Para resolver este problema, deberá realizar la detección en la capa de transporte (capa 4). Existen varias formas diferentes de utilizar los análisis de capa 4 para realizar la detección. Un método efectivo es usar un ping UDP. Un ejemplo de un comando ping UDP es:
nmap-PU53-sn 109.74.11.0-255
Este comando genera una serie de solicitudes de estado del servidor DNS para cada una de las direcciones IP de destino. Se recibirán una serie de respuestas de consulta DNS de los hosts en vivo y nmap devolverá estos resultados. Debido a que DNS es un servicio de uso común en el puerto UDP 53, es posible identificar hosts activos adicionales mediante esta técnica que pueden haber sido configurados para no responder al tráfico ICMP. Otra alternativa efectiva de capa 4 a los barridos de ping ICMP es usar un ping ACK TCP. Un ejemplo de esto se puede ver a continuación:
nmap-PA80-sn 109.74.11.0-255
Este comando enviará una serie de respuestas ACK no solicitadas al puerto especificado para todos los hosts en el rango de IP. Debido a que estos paquetes ACK estaban fuera de contexto de cualquier línea de comunicación establecida, los hosts en vivo responderán con un paquete TCP RST para indicar que la comunicación debe interrumpirse. Nmap recopilará estas respuestas como indicación de anfitriones en vivo y luego devolverá una lista de ellos.
Escaneo de puertos y Enumeración de servicios
Ahora que hemos descubierto las direcciones IP activas en la red contra las que estamos realizando una prueba de penetración, a continuación necesitamos identificar los puertos abiertos en cada sistema y los servicios que se ejecutan en esos puertos. Escanear puertos TCP en sistemas remotos es la función más básica de nmap. Para realizar una exploración TCP de un sistema de destino, use el comando básico:
nmap 109.74.11.34
Al igual que otros comandos nmap, también se puede usar para realizar exploraciones en varios hosts mediante una serie secuencial (192.168.1-255) o notación CIDR (192.168.1.0 / 24). Este comando nmap estándar realiza una exploración en 1000 puertos TCP de uso común. Alternativamente, puede especificar un solo puerto para escanear utilizando el conmutador-p seguido del número de puerto que desea escanear.
nmap 109.74.11.34-p 21
Este comando anterior escaneará el puerto TCP 21 en el sistema especificado. También puede escanear una serie de puertos utilizando el conmutador-p y, a continuación, enumerar los puertos deseados, separándolos con comas.
nmap 109.74.11.34-p 80,443
Este comando escaneará los puertos 80 y 443 del sistema de destino. Puede escanear un rango secuencial de puertos utilizando el conmutador -p
seguido del primer valor del rango, un guión y, a continuación, el último valor del rango.
nmap 109.74.11.34-p 0-100
El comando anterior escanea los primeros 100 puertos. Para escanear los 65.536 puertos TCP de un destino, utilice el siguiente comando:
nmap 109.74.11.34-p 0-65535
Puede utilizar un análisis ACK TCP para identificar los puertos que están filtrados. Para ello, utilice el interruptor-sA. A continuación, puede especificar un puerto o una serie de puertos. Ninguna especificación de puerto escaneará los 1000 puertos estándar. Esto devolverá una lista de puertos filtrados. Un ejemplo de este comando se puede ver a continuación:
nmap 109.74.11.34-sA
Los probadores de penetración y los profesionales de seguridad a veces solo buscan puertos TCP abiertos en los sistemas de destino. Pasar por alto los servicios UDP puede hacer que uno pase por alto vulnerabilidades evidentes que podrían llevar fácilmente a un compromiso. Para buscar servicios UDP en un sistema de destino, utilice el siguiente comando:
nmap 109.74.11.34-sU
Debido a que los servicios UDP no están orientados a la conexión de la misma manera que los servicios TCP, esto tomará más tiempo que un escaneo TCP típico. El tiempo necesario para completar los escaneos UDP se puede reducir escaneando puertos específicos. Puede especificar puertos de la misma manera que lo hizo con los escaneos TCP.
nmap 109.74.11.34-sU-p 69
El comando anterior realiza un escaneo del puerto UDP 69, un puerto comúnmente utilizado para TFTP (Protocolo de Transporte de Archivos Triviales). También es posible identificar la versión y el número de versión para cada servicio en particular. Para ello, utilice el interruptor-sV.
nmap 109.74.11.34-SV
Este comando utilizará una combinación de captura de banners y análisis de respuesta de sondeo para intentar identificar el servicio y el número de versión de ese servicio para cada puerto escaneado. Usando técnicas similares, también es posible que nmap intente determinar el sistema operativo que se está ejecutando en el objetivo. Para ello, utilice el conmutador -O
.
nmap 109.74.11.34-O
Una vez completado, devolverá una identificación positiva del sistema operativo o dará una mejor estimación y luego una lista de otros sistemas operativos posibles.
Técnicas avanzadas de escaneo
Hay un problema común que encontrará con frecuencia al realizar una prueba de penetración en redes empresariales de tamaño mediano a grande. La mayoría de las empresas y organizaciones en estos días se han vuelto más orientadas a la seguridad y es probable que tengan cortafuegos o sistemas de detección de intrusos entre usted y los sistemas que está tratando de escanear. Para escanear tales sistemas, necesitaremos emplear algunas técnicas de escaneo más avanzadas. Una forma de evitar potencialmente los cortafuegos y / o los sistemas de detección de intrusos es usar algunas técnicas de escaneo oculto tradicionales que están integradas en nmap. Un método que se puede emplear es utilizar una plantilla de temporización más lenta. Las plantillas de temporización van desde -T0
(escaneo paranoico) hasta -T5
(escaneo loco). Cuanto menor sea el valor de la plantilla de temporización, más lento será el escaneo. Los escaneos más lentos son menos propensos a ser marcados por los sistemas de detección de intrusos. Un ejemplo de escaneo paranoico sería:
nmap 109.74.11.0 – 255-T0
Otra técnica que se puede usar para enmascarar su escaneo es inundar la red con tráfico señuelo adicional utilizando el conmutador -D
. Esta función le permitirá especificar varias direcciones para falsificar tráfico o puede usar la opción RND para falsificar tráfico de direcciones aleatorias.
nmap 109.74.11.0-255-D RND:5
Además de realizar el escaneo tradicional de puertos TCP de los sistemas de destino, el comando anterior también falsificará el tráfico de 5 direcciones aleatorias para ofuscar el tráfico de escaneo real. Otra técnica que se puede utilizar es variar la longitud del paquete de sus solicitudes transmitidas. Algunos sistemas de detección de intrusos y firewalls soltarán paquetes en función de la longitud de los paquetes de firma. Para evitar esto, puede especificar la longitud de los datos utilizando el conmutador --data-length
seguido del tamaño del paquete en número de bytes.
nmap 109.74.11.0-255 length data-length 15
Este comando enviará todo el tráfico de escaneo en paquetes de 15 bytes de longitud. Si bien esto podría ser útil para evitar algunos sistemas de detección de intrusiones basados en firmas, el envío constante de paquetes de una longitud de paquete especificada inusual podría marcar un sistema de detección de intrusiones basado en anomalías. Los sistemas de detección de intrusiones de red también marcarán el tráfico si comienza a conectarse secuencialmente a sistemas dentro de un rango de red especificado. Para evitar realizar los escaneos en secuencia, puede utilizar el conmutador --randomize-hosts
.
nmap 109.74.11.0-255 random randomize-hosts
Este comando escaneará aleatoriamente cada host en el rango en lugar de ejecutarlo en secuencia (109.74.11.0, luego 109.74.11.1, luego 109.74.11.2, etc)). Si bien no puede falsificar su dirección IP (porque no recibiría las respuestas necesarias para determinar los puertos abiertos), puede falsificar su dirección MAC. Para hacer esto, puede usar el conmutador spoo spoof-mac, seguido de un ID de proveedor, una dirección MAC específica o 0.
nmap 109.74.11.0 – 255 spoo spoof-mac 0
Usar 0 como argumento aplicará una dirección MAC aleatoria a su tráfico de exploración. Una técnica final que vale la pena mencionar es usar el interruptor-f para fragmentar paquetes.
nmap 109.74.11.0-255-f
La fragmentación de paquetes separará las cargas útiles de datos de su tráfico de escaneo en varios paquetes, lo que le permitirá eludir con mayor facilidad los sistemas de detección de intrusiones de inspección de contenido o los firewalls. Si bien todas estas técnicas pueden ser efectivas para escanear servidores de acceso público detrás de un firewall, generalmente no son suficientes para escanear hosts en una red interna. Si bien algunos servidores de acceso público estarán disponibles para escanear, gran parte de la infraestructura interna será más profunda dentro de la red y no tan fácilmente accesible. Considere el diagrama de la Figura 3. Este es un ejemplo sencillo de una configuración común en redes empresariales.
Figura 3. Configuración de red común
El problema que encontramos aquí es que la red interna se encuentra detrás de un firewall interno, que tiene reglas más estrictas sobre el tráfico de entrada, en comparación con el firewall externo. Es probable que este firewall interno bloquee el tráfico entrante de direcciones remotas en la web; sin embargo, es posible que los sistemas de la zona desmilitarizada puedan comunicarse con los sistemas internos. Para poder escanear estos sistemas internos, debemos hacer que los sistemas de la zona desmilitarizada funcionen en nuestro nombre. Discutiremos varias formas diferentes de hacer esto, para incluir el escaneo de proxy, el escaneo de zombis y el escaneo de rebote FTP.
Probablemente la forma más fácil de escanear los sistemas internos es mediante el uso de una cadena proxy. Supongamos que hemos adquirido acceso a un servicio proxy dentro de la zona desmilitarizada localizando un servicio proxy de acceso abierto, forzando brutalmente un servicio proxy con hydra o instalando un servicio proxy en una máquina ya comprometida. Una vez que haya configurado su sistema para enrutar el tráfico a través de ese proxy, puede realizar exploraciones de nmap mediante un análisis de conexión completo (-sT
).
nmap 10.1.1.0 – 255-sT
Si no hay un servicio proxy disponible, hay algunas formas inteligentes de aprovechar las máquinas dentro de la zona desmilitarizada para obtener resultados de análisis en sistemas internos. Una forma de hacer esto es usar el escaneo zombi, también conocido como escaneo inactivo. Para realizar un escaneo zombi contra los sistemas de la LAN interna, tenemos que encontrar un huésped zombi viable dentro de la zona desmilitarizada. Un host zombi es cualquier sistema relativamente inactivo que utiliza secuenciación incremental de IPID. Para localizar un host zombi, podemos usar un script nmap para escanear la zona desmilitarizada en busca de un sistema que se ajuste a esta descripción.
nmap script script ipidseq 109.74.11.0-255
Este script enviará una serie de paquetes a cada host y rastreará los números IPID de todas las respuestas recibidas. A continuación, analizará estos números IPID para clasificar cada sistema como secuencia aleatoria, todos los ceros o incremental. Consulte la Figura 4 para ver un ejemplo de la salida de un sistema incremental.
Figura 4. Host zombi ubicado con secuencia de comandos IPID
Una vez que hayamos adquirido una dirección IP para nuestro sistema zombi, estaremos listos para intentar nuestro escaneo zombi. Antes de abordar cómo realizar el escaneo, explicaré brevemente cómo funciona el escaneo. Consulte la Figura 5 para ver un diagrama de lo que ocurre cuando se realiza un escaneo zombi contra un puerto abierto.
Figura 5. Escaneo zombi contra puerto abierto
Primero, nuestro escáner nmap determina el valor IPID actual del sistema zombi enviando un paquete SYN / ACK no solicitado. Debido a que el sistema zombi no envió originalmente ningún paquete SYN para establecer una conexión, el zombi responde a nuestro escáner con un paquete RST. Nuestro sistema de escaneo utilizará el IPID del paquete RST como punto de referencia. Luego, nuestro sistema de escaneo inmediatamente seguirá esto con un paquete SYN falsificado enviado al sistema de destino utilizando una dirección IP de origen del sistema zombi. Debido a que la dirección IP de origen es una dentro de la zona desmilitarizada, es más probable que esta solicitud de conexión pueda pasar a través del firewall. Si el destino recibe el paquete y el puerto de destino está abierto, el destino devolverá un paquete SYN/ACK al sistema zombie (que cree que envió el paquete SYN original). Debido a que este paquete SYN / ACK se recibe fuera de contexto, el sistema zombi responderá al sistema de destino con un paquete RST, incrementando así su valor IPID en uno. Finalmente, nuestro escáner enviará un último paquete SYN / ACK al sistema zombie. La primera respuesta posterior del zombi incrementará el IPID una vez más. Por lo tanto, si el puerto de destino en el sistema remoto está abierto, el valor IPID final devuelto será dos números más alto que el valor original. Alternativamente, la Figura 6 ilustra lo que ocurre cuando se cierra el puerto del sistema de destino.
Figura 6. Exploración zombi contra puerto cerrado
Si el puerto en el sistema objetivo está cerrado, el sistema zombi no recibe respuesta no solicitada del objetivo y, por lo tanto, no se le instiga a enviar un paquete RST al objetivo. Por lo tanto, si el valor IPID de la respuesta RST final solo se ha incrementado en uno, podemos deducir que el puerto está cerrado porque no se envió ninguna respuesta SYN/ACK al sistema zombie para instigar una respuesta RST. De lo contrario, si el valor IPID final se ha incrementado en dos desde el valor original, entonces podemos deducir que el puerto en el sistema objetivo debe abrirse porque debe haber respondido al zombi que instigó la respuesta que incrementó el valor IPID del sistema zombi.
Mientras que esto puede sonar extremadamente complicado; no se deje intimidar por la descripción, ya que nmap hace casi todo el trabajo por usted. Para realizar un escaneo zombi, solo tienes que ingresar un comando simple.
nmap-si 192.168.199.132-Pn 192.168.199.130
El conmutador -sI
le dice a nmap que realice un análisis zombi utilizando la siguiente dirección IP como host zombi (192.168.199.132). El conmutador -Pn
impide que nmap realice un ping ICMP inicial en el sistema de destino antes de intentar el análisis. Por lo tanto, la dirección IP final en el comando identifica el sistema de destino. La salida de este comando se puede ver en la Figura 7.
Figura 7. Escaneo zombi contra puerto cerrado
Debe tenerse en cuenta que el rango de IP que utilicé para demostrar este escaneo zombi es un rango privado en mi red interna. Para que esto funcione eficazmente contra una red remota, como se describe en el escenario original, los sistemas tanto en la DMZ como en la red interna deben estar en rangos IP enrutables públicamente. Si la red interna está configurada en un rango privado detrás de un servidor NAT (Traducción de direcciones de red), el escáner nmap no podrá enviar el paquete SYN falsificado a la dirección interna desde su ubicación remota.
Otra forma de usar sistemas dentro de la zona desmilitarizada para intentar escanear hosts en la red interna es usar el rebote FTP. Algunos servidores FTP heredados admiten la capacidad de transmitir archivos a un sistema de terceros. Si ha descubierto un servidor FTP en la zona desmilitarizada que permite el inicio de sesión anónimo o que ha forzado brutalmente con hydra, puede probar el servidor FTP para determinar si admite el rebote FTP. Para ello, utilice el script ftp-bounce.
nmap script script ftp-bounce
ftp-bounce.username = anonymous,
Este comando utiliza el script nmap con argumentos de nombre de usuario y contraseña contra el servidor FTP. Una vez completado, este análisis indicará si el rebote de FTP es posible o no. Si el script indica que FTP bounce está funcionando, puede usar el servidor FTP para realizar un análisis de puertos en otros sistemas de la red. La Figura 8 ilustra cómo funciona esto.
Figura 8. Escaneo de rebote FTP
El escáner intentará enviar datos binarios, a través de la función de rebote FTP, al sistema de destino en un puerto designado. Si se transmiten los datos, el servidor FTP informará de ello al escáner, indicando que el puerto del sistema de destino está abierto. Para realizar un escaneo de rebote FTP, utilice el conmutador -b
.
nmap-b ftpuser:: 21 10.1.1.128-255
En este comando, la función -b
se utiliza para realizar un escaneo de rebote ftp utilizando el nombre de usuario «ftpuser» y la contraseña PassW0rd
, contra el servidor FTP en 192.168.11.201 alojado en el puerto TCP 21. Las acciones descritas en el diagrama anterior se realizarán entonces contra cada uno de los puertos 1000s comunes en cada uno de los hosts de destino de 10.1.1.128 a 10.1.1.255.
Asignación y explotación de vulnerabilidades con NSE
Una vez que haya descubierto hosts activos en la red de destino y haya logrado enumerar puertos abiertos y/o servicios en ejecución en esos hosts, puede comenzar a probar y explotar vulnerabilidades. Con el nuevo NSE (Motor de scripting Nmap) integrado, hay una serie de scripts precargados que vienen con la instalación estándar de nmap. Estos scripts tienen una amplia gama de funciones diferentes, desde la recopilación de información básica (como las dos que ya hemos discutido), el mapeo de vulnerabilidades, el forzamiento bruto, la denegación de servicio e incluso la explotación remota. Todos estos scripts se encuentran en el directorio de instalación de nmap. En Kali-Linux, se pueden encontrar en /usr/share/nmap/scripts/
. Para navegar a estos scripts y comenzar a trabajar con ellos, utilice los siguientes comandos:
cd / usr / share/nmap/scripts /
ls
El comando cd
cambiará el directorio a la ubicación de los scripts NSE, y el comando ls
mostrará el contenido del directorio. A continuación, puede ver cualquiera de los scripts mediante el comando cat
, seguido del nombre del script que desea ver. Para el propósito de esta demostración, usaremos ftp-vuln-cve2010-4221.nse
. Para ver el contenido de este script, utilice el siguiente comando:
cat ftp-vuln-cve2010-4221.nse
Figura 9. Contenido del script NSE
La figura 9 muestra el contenido de este script. Si navega hasta la parte superior del contenido del script, verá varias piezas de información útil para incluir una descripción del script, una lista de recursos adicionales para referencia, y el uso y la sintaxis apropiados del script. Sin embargo, ordenar estos scripts en el directorio y localizar un script que realice una función específica puede ser muy tedioso. En mi opinión, aquí es donde realmente brilla Zenmap (la interfaz gráfica que habíamos discutido anteriormente). Para demostrar lo útil que puede ser la interfaz de Zenmap cuando se trabaja con scripts NSE, ábrala de nuevo desde la línea de comandos con el comando:
zenmap
A continuación, seleccione el menú desplegable Perfil y haga clic en «Nuevo perfil o Comando».»Después de que se abra el Editor de perfiles, elija la pestaña Scripting en la parte superior de la pantalla. La Figura 10 muestra una imagen de la interfaz de scripting de Zenmap.
Figura 10. Interfaz de scripting Zenmap
En el lado izquierdo de la pantalla se encuentra una lista de todos los scripts nmap disponibles. Puede seleccionar cualquiera de estos para incluirlo en su comando nmap. Algunos scripts requerirán argumentos para poder ejecutarse correctamente. Los scripts de autenticación posterior a menudo requerirán un nombre de usuario y una contraseña para servicios de red específicos. En el ejemplo de la Figura 10, se pueden proporcionar argumentos para configurar el ataque de fuerza bruta que se realizará contra el servicio MySQL. También puede pasar fácilmente los argumentos del script introduciendo los valores en la ventana Argumentos. Estos argumentos se rellenarán automáticamente en el comando nmap generado. La ventana en la parte superior central proporciona una descripción del script seleccionado, el uso y la sintaxis apropiados, e incluso categorías para describir las funciones del script. Estas categorías pueden ser especialmente útiles si está intentando realizar un tipo específico de tarea, como el análisis de vulnerabilidades. Después de lanzar un script NSE con un comando nmap, verá los resultados en la salida estándar de nmap. En el caso de scripts de fuerza bruta, la salida mostrará si el ataque de fuerza bruta tuvo éxito y, si es así, mostrará el nombre de usuario y la contraseña descubiertos. En el caso de scripts de vulnerabilidad, la salida indicará si la vulnerabilidad está presente en los sistemas de destino. Y en el caso de scripts de explotación, la salida proporcionará información sobre la carga útil que se entregó posteriormente al sistema de destino.
Scripting con Nmap
Además de su propio motor de scripting integrado, nmap también admite varias opciones de salida que facilitan el uso de lenguajes de scripting tradicionales para realizar análisis de salida. Dos formatos de salida que pueden ser útiles para la creación de scripts incluyen salida greppable (-oG
) y salida XML (-oX
). XML puede ser efectivo para lenguajes de scripting de alto nivel que tienen módulos que se pueden importar para el análisis XML y la salida grepable se puede usar junto con el script de shell de bash para agilizar el análisis de los resultados de nmap. Para demostrar cómo se podría usar esta función de salida junto con el scripting, revisaremos un simple script de shell bash de 4 líneas, que se muestra en la Figura 11 para analizar los resultados de un escaneo nmap.
Figura 11. Script Bash de Análisis de resultados de Nmap
Considere un escenario en el que ya se realizó un escaneo de nmap contra una red muy grande y la salida del escaneo se guardó en formato grepable en un networkscan.archivo txt. Y supongamos que queremos usar hydra para realizar un ataque de fuerza bruta contra todos los servicios FTP de la red, pero no queremos perder el tiempo que se necesitaría para escanear el puerto 21 en toda la red de nuevo. Este sencillo script extraerá todos los sistemas que tengan un puerto especificado abierto. La primera línea solicita al usuario un número de puerto. La segunda línea asigna el valor de la entrada del usuario a la variable’ port’. La tercera línea indica al usuario que se listarán todos los sistemas con ese puerto abierto. Y finalmente, el último comando es donde grep los resultados de la salida grepable de nmap. El script utiliza el comando grep para extraer todas las líneas del archivo de salida que hacen referencia al puerto especificado. Esto incluirá líneas que enumeran cada instancia de dónde está abierto, cerrado o filtrado el puerto. Luego, canaliza esa salida a otra función grep que extrae solo instancias en las que el puerto especificado está abierto. Esta salida se canaliza a la función cut, que especifica un carácter de espacio como delimitador y, a continuación, genera el segundo campo. Al hacer esto, nuestro script muestra la dirección IP de cada sistema que tiene abierto el puerto especificado. La Figura 12 muestra la salida del script.
Figura 12. Salida del script de análisis de resultados Nmap
Aunque este es un script muy simple, demuestra lo fácil que puede ser extraer información del formato de salida grepable. Una vez adquirida, esta información recopilada podría usarse fácilmente para crear scripts adicionales. Podría usarse como punto de partida para realizar alguna otra tarea posterior contra cada sistema que se identificó que tenía un puerto específico abierto.
Una herramienta de prueba de penetración todo en Uno
Al combinar sus diferentes capacidades, se puede realizar fácilmente una prueba de penetración completa utilizando solo nmap. No se puede negar que nmap, con su impresionante lista de funciones y capacidades, es una herramienta verdaderamente poderosa. Y a medida que avancen los años, es probable que se vuelva aún más poderoso a medida que más personas sigan contribuyendo a este proyecto. Como un niño con el arma de su padre, nmap puede ser una herramienta peligrosa en las manos equivocadas. Pero si se utiliza correctamente, puede ser un activo invaluable para garantizar la seguridad de su infraestructura de red. Así que siempre recuerda usarlo sabiamente y usarlo bien.
Sobre el autor
Justin Hutchens actualmente realiza análisis de vulnerabilidades de red, detección de intrusiones y análisis forense digital para una gran red empresarial con más de 33,000 sistemas en red. Ha ocupado numerosos puestos diferentes en el campo de la Tecnología de la Información para incluir el diseño de redes, el desarrollo de sistemas, la administración de bases de datos y la seguridad de redes. Actualmente también imparte cursos sobre pruebas de penetración con los sistemas operativos Backtrack y Kali-Linux. Actualmente tiene una licenciatura en Tecnología de la Información y múltiples certificaciones profesionales que incluyen CISSP (Profesional de Seguridad de Sistemas de Información Certificado), CEH (Hacker Ético Certificado), ECSA (Analista de Seguridad Certificado por el Consejo de la CE) y CHFI (Investigador Forense de Piratería Informática).