Fase de escaneo (Fingerprinting)
La fase de escaneo se realiza después de realizar la fase de reconocimiento.
En ella tratamos de obtener más información sobre el propósito de los activos incluidos en el alcance de las pruebas.
Se averigua los distintos componentes de la infraestructura, el rol que desempeña cada activo, el número de servicios y versiones de los mismos que se encuentran prestando servicio en cada activo.
Además, también se realiza un análisis de las posibles vulnerabilidades existentes en el sistema tomando como referencia las versiones de los servicios que el activo sustenta así como la versión del Sistema Operativo.
De esta manera podremos localizar “Vulnerabilidades públicas” que afecten a las versiones localizadas en los activos de la auditoría.
Tipos de escaneo
Los distintos tipos de escaneo se pueden englobar en tres grandes bloques dependiendo del objetivo de los mismos.
- Escaneo de red: Este tipo de escaneos están destinados a obtener mayor información sobre la red objetivo, direccionamiento IP y la arquitectura utilizada para sustentar toda la infraestructura objetivo.
En este tipo de escaneos, el objetivo principal es tener una visión de la infraestructura de red incluida en el alcance de las pruebas (Redes al alcance, subredes de la infraestructura, red de servidores, etc.), así como identificar dispositivos conectados y sus sistemas operativos (Elementos de red como switches y routers, o sistemas como servidores, impresoras, equipos informáticos). Las técnicas a utilizar en el escaneo y los resultados obtenidos dependen de manera directa si el escaneo se está realizando sobre la infraestructura interna (red privada de la organización) o si se está realizando sobre el perímetro externo (segmento de red que la organización tiene publicado en internet).
A continuación, se introducen varias herramientas de escaneo de red así como su uso básico y que tipo de información son capaces de obtener.
- Wireshark / tcpdump
Son dos motores de análisis de los datos transmitidos en una comunicación que circulan por la red. Aunque no son herramientas que realicen labores de escaneo, se utilizan para poder capturar y analizar los paquetes que circulan por la
red.
Aunque la mayor parte de la comunicación que veremos con estas herramientas será con origen o destino el equipo del auditor, también veremos numeroso tráfico broadcast (dirigido a todos los equipos de la red) que nos puede brindar información interesante como si existen otras subredes, si existen distintas VLAN dentro de la infraestructura, etc.
En ningún caso se realiza ningún tipo de comunicación por parte del auditor. Simplemente se limita a observar el tráfico que se transmite por la red. De esta manera se suele considerar esta técnica como una técnica “pasiva”.
- netdiscover
La herramienta net discover permite el descubrimiento de equipos remotos mediante mensajes broadcast de tipo ARP Discovery (como los vistos en wireshark). Esta herramienta recopila información de las direcciones IP observadas mediante la monitorización del tráfico ARP de tipo broadcast y te indica las direcciones IP observadas.
Dado el funcionamiento del protocolo, es una técnica que únicamente suele funcionar desde una perspectiva de escaneo interna.
$ netdiscover -i eth0
- arp-scan
Permite el descubrimiento de equipos remotos mediante mensajes broadcast de tipo ARP discovery, permite indicar la interfaz de red desde dónde se quiere realizar el escaneo.
Las consultas de tipo “ARP Discovery”, consiste realizar una petición de consulta ARP, en todo el dominio de broadcast, si alguien tiene asignada una dirección IP en concreto. Si alguno de los equipos tiene asignada la dirección IP solicitada, le responde al equipo que realizó la consulta.
Dado el funcionamiento del protocolo, es una técnica que únicamente suele funcionar desde una perspectiva de escaneo interna.
$ arp-scan red_a_escanear
- nmap como escáner de red
La herramienta nmap puede ser utilizada en los tres tipos de categorías de escaneo (Escaneo de red, escaneo de servicios y escaneo de vulnerabilidades), en este caso particular veremos su uso como escáner de red.
Podemos utilizar nmap para poder realizar escaneos de una red objetivo, con la finalidad de comprobar los equipos activos en la red y la dirección IP que tienen asignada.
De esta manera, es necesario conocer el direccionamiento de red sobre el que queremos realizar la consulta (netdiscover o wireshark pueden ayudarnos a obtener esta información).
Además, nmap soporta el uso de dos protocolos para realizar las tareas de escaneo y descubrimiento, el protocolo ARP y el protocolo ICMP.
Para indicar que nmap realice un escaneo de red haciendo uso del protocolo ARP se ha de utilizar el operador -PR.
$ nmap -PR 192.168.0.*
Por otro lado, también es posible realizar un escaneo utilizando el protocolo ICMP con el operador -sP de nmap.
$ nmap -sP 192.168.0.*
- Reconocer el Sistema Operativo objetivo mediante el TTL
$ ping IP-Objetivo
- Linux/Unix: 64
- Windows: 128
- MacOS: 64
- Solaris/AIX: 254
- FreeBSD: 64
- Escaneo de servicios: Esta otra tipología de escaneo, tiene como objetivo obtener información sobre los servicios específicos, versiones y tecnología de los mismos que se encuentran habilitados en cada activo
que se encuentre dentro del alcance de las pruebas.
Una vez tenemos recopiladas las direcciones IP de los host que se encuentran en el alcance de las pruebas, el siguiente paso es poder comprobar los servicios que se encuentra prestando cada equipo, el puerto TCP o UDP en el que se encuentra activo cada servicio así como la versión de los mismos.
Como veremos más adelante, existen distintas técnicas para realizar enumeración de puertos TCP, esto es debido a que pueden existir protecciones de seguridad en la red, como firewalls, que limiten el acceso a los servicios según el origen de las peticiones.
La herramienta principal para realizar la enumeración de puertos y servicios es nmap, aunque también se puede utilizar su versión gráfica Zenmap o incluso nc. Aunque nc no ofrece la versatilidad y la potencia de nmap hay que conocer su uso dado que en ocasiones puede suceder que hayamos accedido a un sistema en la organización que no disponga de nmap y deseamos realizar un escaneo de puertos a otras redes a las que no tenemos acceso.
A continuación, se introducen varias herramientas de escaneo de servicios así como su uso básico y que tipo de información son capaces de obtener.
- nc (netcat)
También conocido como netcat, nc es una herramienta de red que permite, a través de intérprete de comandos y con una sintaxis sencilla, abrir puertos TCP/UDP en un HOST (quedando netcat a la escucha), asociar una shell a un puerto en concreto (para conectarse por ejemplo a MS-DOS o al intérprete bash de Linux remotamente) y forzar conexiones UDP/TCP (útil por ejemplo para realizar rastreos de puertos o realizar transferencias de archivos bit a bit entre dos equipos). Posteriormente fue portada a Windows y Mac OS X entre otras plataformas.
Para poder realizar la conexión simplemente habrá que indicar la dirección IP y el puerto al que se ha de conectar.
$ nc dirección_ip puerto
Una vez realizada la conexión, si queremos que el servidor devuelva el banner del servicio habrá que transmitir datos con la conexión establecida.
En caso de no especificar ninguna opción la comunicación se establecerá mediante el protocolo de transporte TCP. En caso de querer realizar la comunicación sobre un puerto UDP, habrá que especificar el operador -u.
$ nc -u dirección_ip puerto
También se puede indicar un rango de puertos sobre los que realizar la conexión y nc intentará la conexión a cada puerto mostrando los puertos que se encuentran accesibles.
$ nc -zv dirección_ip pto_inicial – pto_final
- nmap
En este caso se introducirá su uso para el escaneo de servicios. El objetivo es localizar los puertos que se encuentren abiertos en el sistema remoto, ya sea mediante el protocolo TCP o el protocolo UDP, y averiguar el servicio que se encuentra publicado en cada puerto, el software utilizado para proporcionar dicho servicio y su versión.
Para realizar esta tarea se consulta a cada puerto (TCP o UDP) de un determinado rango para comprobar si el puerto se encuentra cerrado, o por el contrario está abierto y con un determinado servicio publicado.
Dado que en la red auditada pueden existir protecciones a nivel de red (como los firewalls) que protegen dichos servicios, se pueden utilizar varias técnicas de escaneo distintas que localizan si un puerto se encuentra abierto. Por ejemplo, en el protocolo TCP se puede abusar del mecanismo “three way handshake” necesario para establecer la comunicación.
$ nmap -Pn [IP/rango] –p [puerto/rango] -sT
Además de averiguar si un puerto determinado se encuentra abierto en el sistema remoto, también es necesario conocer el servicio concreto que se encuentra activo en ese puerto, así como el software utilizado y la versión del mismo (Por ejemplo Microsoft IIS como servidor web). De esta manera podremos tener una visión más exhaustiva de los servicios que operan en cada sistema remoto y hacernos una idea de la función de dicho equipo en la infraestructura. Por otro lado, conocer el tipo y versión del software nos ayuda a localizar vulnerabilidades en el sistema remoto que se produzcan en la versión concreta del software utilizado.
Para poder localizar el tipo y versión del software de un determinado servicio se utiliza la técnica de “banner grabbing”. Esta técnica se basa en observar la información devuelta por cada aplicación remota al establecer una comunicación activa. La mayoría de servicios en su configuración predeterminada muestran, como mínimo, el tipo y la versión del software en ejecución. Para poder ejecutar esta técnica a través de la herramienta nmap se ha de realizar un escaneo TCP (Full scan o Stealth scan) o UDP y añadir el operador -sV (Service Version) para que nmap solicite el banner del servicio, lo compruebe en su base de datos y nos diga el software utilizado y su versión exacta (en ocasiones versión aproximada)
El comando de nmap utilizado para realizar la técnica es el siguiente:
$ nmap [IP/rango] –p [puerto/rango] -sV
Por otro lado, nmap dispone de una serie de scripts para poder realizar otro tipo de consultas sobre el objetivo. Estos scripts se encuentran separados por categorías, existe una categoría llamada “version” que realiza ciertas tareas adicionales de descubrimiento, limitados a ciertos servicios.
El comando de nmap utilizado para invocar todos los scripts englobados en la categoría versión es el siguiente:
$ nmap [IP/rango] –p [puerto/rango] --script “version”
Otro operador alternativo a –sV y más completo, es el operador -A, que además de realizar un descubrimiento de las versiones del servicio, también realiza detección del Sistema Operativo realiza un traceroute a la máquina y lanza scripts de recopilación de información más específicos por cada puerto abierto.
El comando de nmap utilizado para realizar la técnica es el siguiente:
$ nmap [IP/rango] –p [puerto/rango] -A
Dado que en la red auditada pueden existir protecciones a nivel de red (como los firewalls) que protejan dichos servicios, se pueden utilizar varias técnicas de escaneo distintas que localizan si un puerto se encuentra abierto. Por ejemplo, en el protocolo TCP se puede abusar del mecanismo “three way handshake” necesario para establecer la comunicación.
A continuación, se enumeran las distintas técnicas disponibles para el escaneo de puertos utilizando la herramienta nmap.
TCP Connect (Full open scan)
Es la técnica de escaneo de puertos por defecto en nmap. Intenta realizar una conexión completa mediante el establecimiento del “three way handshake”. Dependiendo de la respuesta recibida por el puerto remoto determinamos si se encuentra abierto o cerrado:
- Se recibe SYN/ACK: El puerto se encuentra abierto.
- Se recibe RST: El puerto se encuentra cerrado.
El comando de nmap utilizado para realizar la técnica es el siguiente:
$ nmap –sT [IP/rango] –p [puerto/rango]
Stealth scan (Half open scan)
Esta técnica intenta realizar una conexión TCP mediante el establecimiento del “three way handshake”, pero no llega a completarla, enviando un “reset” al puerto consultado en caso de que responda. La única ventaja con respecto a la técnica anterior es que al no completar el “three way handshake” el escaneo es más rápido. Dependiendo de la respuesta recibida por el puerto remoto determinamos si se encuentra abierto o cerrado:
- Se recibe SYN/ACK: El puerto se encuentra abierto.
- Se recibe RST: El puerto se encuentra cerrado.
- Sin respuesta o error ICMP no alcanzable: El puerto se encuentra filtrado.
El comando de nmap utilizado para realizar la técnica es el siguiente:
$ nmap –sS [IP/rango] –p [puerto/rango]
FIN scan (Inverse TCP flag scan)
Esta técnica sólo envía un segmento TCP con el flag FIN. La ventaja principal de este tipo de escaneo es que es que puedes conocer si un determinado puerto se encuentra abierto aunque exista un firewall que esté protegiendo las conexiones contra el activo auditado. Dependiendo de la respuesta recibida por el puerto remoto determinamos si se encuentra abierto o cerrado:
- Se recibe RST: El puerto se encuentra abierto.
- Sin respuesta: El puerto se encuentra cerrado.
El comando de nmap utilizado para realizar la técnica es el siguiente:
$ nmap –sF [IP/rango] –p [puerto/rango]
XMAS scan (All TCP flag scan)
Esta técnica sólo envía un segmento TCP con los siguientes flags activos ACK, RST, SYN, URG y PSH. La ventaja principal de este tipo de escaneo es que es que puedes conocer si un determinado puerto se encuentra abierto aunque exista un firewall que esté protegiendo las conexiones contra el activo auditado.
Por contrapartida, esta técnica sólo funciona en sistemas remotos UNIX. Dependiendo de la respuesta recibida por el puerto remoto determinamos si se encuentra abierto o cerrado:
- Se recibe RST: El puerto se encuentra cerrado.
- Sin respuesta: El puerto se encuentra abierto.
El comando de nmap utilizado para realizar la técnica es el siguiente:
$ nmap –sX [IP/rango] –p [puerto/rango]
NULL scan (null TCP flag scan)
Esta técnica envía un segmento TCP sin ningún flag activado. La ventaja principal de este tipo de escaneo es que es que puedes conocer si un determinado puerto se encuentra abierto aunque exista un firewall que esté protegiendo las conexiones contra el activo auditado. Dependiendo de la respuesta recibida por el puerto remoto determinamos si se encuentra abierto o cerrado:
- Se recibe RST: El puerto se encuentra abierto.
- Sin respuesta: El puerto se encuentra cerrado.
El comando de nmap utilizado para realizar la técnica es el siguiente:
$ nmap –sN [IP/rango] –p [puerto/rango]
UDP scan
Esta técnica se utiliza para comprobar si un determinado puerto UDP se encuentra abierto en el sistema remoto. Para ello, se envía un datagrama UDP. Dado que el protocolo UDP no está orientado a la conexión lo normal es que si un puerto se encuentra abierto no envíe ningún tipo de respuesta al origen de la consulta. Dependiendo de la respuesta recibida por el puerto remoto determinamos si se encuentra abierto o cerrado.
- Se recibe Error ICMP no alcanzable (tipo 3 código 3): El puerto se encuentra cerrado.
- Se recibe Error ICMP (tipo 3 código 1, 2, 9, 10 o 13): El puerto se encuentra filtrado.
- Sin respuesta: El puerto se encuentra abierto o filtrado.
$ nmap –sU [IP/rango] –p [puerto/rango]
- Escaneo de vulnerabilidades: Una vez se han realizado los otros dos tipos de escaneos, y se tiene más información de sobre la infraestructura y los servicios que sustenta, se comprueba si existe algún tipo de vulnerabilidad en base al tipo de servicio y la versión del mismo. También se buscan posibles vulnerabilidades que pudieran estar presentes debido a defectos en el diseño o en la configuración aplicada.
Después de haber localizado los servicios expuestos en los sistemas remotos, el software y la versión exacta de los mismos, es posible hacer una búsqueda para localizar posibles vulnerabilidades que se encontrasen presentes en esas versiones concretas.
Además del uso de otras técnicas y herramientas, se puede utilizar la herramienta nmap para realizar un escaneo de vulnerabilidades. Para realizar esta tarea, nmap se apoya en los scripts de la categoría "vuln" que disponga.
Scripts de detección de vulnerabilidades
Existen ciertos scripts en nmap que buscan ciertas vulnerabilidades muy concretas de las versiones de algunos servicios. Dado que todos estos scripts se engloban bajo la categoría “vuln” podemos indicar a nmap que utilice todos los scripts que se encuentren catalogados en este grupo. Cabe destacar que el script comprueba las posibles vulnerabilidades existentes en base a la versión del software utilizado para ejecutar el servicio, de esta manera, siempre hay que forzar la enumeración de los servicios de nmap con el operador -sV. En caso contrario, el script no tendrá información del software utilizado en el servicio y no podrá mapear las posibles vulnerabilidades.
$ nmap 192.168.1.1 –sV --script vuln
Proyecto vulscan
Proyecto que utiliza nmap para realizar una búsqueda de posibles vulnerabilidades existentes en los sistemas basándonos en la versión de los servicios localizados en el sistema remoto. Se apoya en un script nse y una base de datos de vulnerabilidades locales para detectar los servicios vulnerables. Se puede acceder al proyecto vulscan desde su repositorio de github vulscan (https://github.com/scipag/vulscan). Al igual que en el caso anterior, el script comprueba las posibles vulnerabilidades existentes en base a la versión del software utilizado para ejecutar el servicio, de esta manera, siempre hay que forzar la enumeración de los servicios de nmap con el operador -sV. En caso contrario, el script no tendrá información del software utilizado en el servicio y no podrá mapear las posibles vulnerabilidades.
Una vez instalado se invoca como un script de nmap
$ nmap 192.168.1.1 –sV --script vulscan/vulscan.nse
Enfoque de los escaneos
Atendiendo al enfoque utilizado para realizar estos escaneos, podemos distinguir dos grandes enfoques bien diferenciados. Uno en el que nos apoyamos en ciertas herramientas para facilitar la tarea de escaneo y otro en el que el auditor delega la práctica totalidad de la tarea de escaneo a herramientas automáticas.
- Escaneo manual: El auditor se apoya en ciertas herramientas que le facilitan la tarea de escaneo, puede utilizar herramientas específicas para cada tipo de escaneo, e incluso combinar varias para obtener resultados más precisos.
- Escaneo automático: El auditor delega las labores de escaneo a herramientas automáticas que serán las encargadas de adaptar sus pruebas al tipo de escaneo a realizar y a la infraestructura objetivo. Son muy utilizados en alcances muy extensos en los que prima tener una “foto rápida” de la infraestructura, pero se recomienda complementarlos con escaneos manuales para tener unos resultados más elaborados y acordes con la realidad.
Además de las opciones anteriormente descritas de nmap existen otros muchos operadores especiales que nos permiten utilizar esta herramienta para personalizar los escaneos. A continuación se muestran las opciones más comúnmente utilizadas:
nmap tiene varias opciones que nos permiten seleccionar el objetivo del escaneo. Por ejemplo, se puede indicar una notación CIDR para identificar la red objetivo del escaneo:
También es posible identificar el rango de puertos que queremos escanear en los sistemas remotos. Por ejemplo, se pueden escanear rangos de puertos consecutivos haciendo uso del operador -p:
$ nmap 192.168.1.1 –p 80,443,135-139
nmap dispone de varias formatos de exportación de los resultados obtenidos:
$ nmap 192.168.1.1 -oG resultado –> Formato grep
$ nmap 192.168.1.1 -oX resultado –> Formato XML
$ nmap 192.168.1.1 -oA resultado –> Exportar todos los formatos
Debido a que existen ciertos dispositivos de protección de red, como los IPS (Infraestructura Protection System), que detectan y bloquean intentos de escaneo, una opción interesante de la herramienta nmap es la de ajustar la velocidad del escaneo con el parámetro -T. Existen de 0 a 5 niveles de velocidad de escaneo, siendo 0 la más lenta y 5 la más rápida.
El uso de scripts es una característica que incorpora nmap y permite realizar pruebas adicionales en los servicios localizados por nmap en el objetivo. Se puede invocar el uso de uno o varios scripts con el operador --script y el nombre del script o haciendo uso de expresiones regulares.
$ nmap 192.168.15.205 --script "smb-*"
Aunque en las secciones anteriores hemos visto cómo se puede utilizar nmap a modo de escáner de vulnerabilidades, también existen otros métodos y herramientas adicionales para llevar a cabo este proceso.
En internet se pueden consultar distintos portales especializados que recopilan información de vulnerabilidades conocidas. Dependiendo del portal consultado, obtendremos más o menos información a cerca de la vulnerabilidad, si existe algún tipo de prueba de concepto asociada, parches que mitigan la vulnerabilidad, riesgo de la misma, etc.
- Common Vulnerabilities and Exposures (CVE)
- vulners
- exploit-db
Existen ciertas herramientas que nos ayudan a localizar vulnerabilidades conocidas en ciertos protocolos o en frameworks muy específicos.
- testssl
- CMSMap
- JoomScan
- Wpscan