OS Fingerprinting con Nmap
Un paso fundamental en un análisis de vulnerabilidades es determinar qué sistema operativo y versión está instalado en la máquina objetivo. Conociendo algunos puertos abiertos podríamos hacer suposiciones, pero Nmap pone a nuestro alcance técnicas que nos permiten afinar más y, en algunos casos, obtener con una fiabilidad del 100% la información que buscamos. El proceso de analizar la máquina objetivo para conocer el sistema operativo y la versión que tiene instalada se denomina OS Fingerprinting.
Este proceso se basa en analizar las ambigüedades en la definición de los protocolos estándar que rigen los servicios de red. Cada uno de estos protocolos incluye una serie de reglas de obligado cumplimiento y que podemos encontrar en su RFC correspondiente. Por ejemplo:
* Protocolo SSH: RFC 4251, 4252 y 4253
http://www.ietf.org/rfc/rfc4251.txt
http://www.ietf.org/rfc/rfc4252.txt
http://tools.ietf.org/html/rfc4253
* Protocolo HTTP: RFC 2616 y actualizaciones posteriores
http://tools.ietf.org/html/rfc2616
Estos documentos definen las reglas de comportamiento para que un servicio cumpla con el estándar y diferentes máquinas puedan interoperar entre sí. En cualquier caso, es posible que algunos detalles menores no fundamentales para el funcionamiento del protocolo no estén definidos y se dejen a criterio del fabricante. Veamos un ejemplo para un paquete ping. En primer lugar un ping enviado desde nuestra máquina CentOS:
Y ahora un ping enviado desde Windows 7:
[/img]
En ambos casos se envía un paquete ping dentro del protocolo ICMP que cumple con el estándar, pero con diferencias. En principio, el contenido del campo de datos de un paquete ping es irrelevante, ya que sólo queremos enviar un paquete al que la máquina destino responderá si está allí. Al no ser útil para el funcionamiento, este campo de datos no está definido en el RFC correspondiente y cada fabricante incluye en él lo que considera conveniente. En CentOS vemos un conjunto de caracteres que terminan con los dígitos del 0 al 7, mientras que en Windows 7 tenemos el abecedario. Este tipo de detalles de implementación serán los que analizará Nmap para determinar el sistema operativo y la versión de la máquina que tenemos enfrente.
Nmap envía 16 sondas TCP, UDP e ICMP para analizar decenas de parámetros que le permitan "adivinar" cuál es el sistema operativo que está respondiendo. Esto no es una ciencia exacta, ya que depende de diversos factores, y el propio Nmap nos informará de la fiabilidad aproximada con la que ha determinado el sistema operativo. Para obtener más información al respecto podemos visitar el siguiente enlace:
La forma básica de iniciar un OS fingerprinting con Nmap es la siguiente:
Donde usamos CentOS como objetivo y añadimos la opción "-v" para que nos de información extra. El resultado es:
donde nos dice que se trata de un sistema Linux basado en la versión 2.6.X del kernel, concretamente entre 2.6.9 y 2.6.30. Si comprobamos esto en CentOS:
Vemos que es correcto el resultado que nos ha dado Nmap.
De esta forma seguimos avanzando en nuestro aprendizaje de Nmap, aunque nos falta bastante para poder sacar todo su jugo a esta herramienta.
@D4rck4r Twitter