Heurísticamente . nmap observa el comportamiento del sistema durante las sondas, desarrolla una "huella dactilar", que en un análogo a una prueba real de huellas dactilares, busca principalmente las minucias:
- comportamiento fuera de especificación y especificación adicional o comportamiento indefinido
- tiempos de retransmisión
- respuesta a la fragmentación y varias sondas ICMP
- patrones en números de secuencia de TCP, números de ID de IP y TTL
- comportamiento con varias opciones de TCP y marcas
Esto es solo un breve resumen, puede leer una descripción más detallada aquí
enlace
La huella digital se compara con una base de datos de huellas digitales conocidas. En el caso de que escanee un sistema que tenga una huella digital única, obtendrá una buena coincidencia; de lo contrario, obtendrá una estimación basada en el mejor ajuste (lo que a veces es incorrecto). De todas formas, podría estar mal, a algunas personas les gusta jugar juegos (antiguos pero interesantes). Si no hay buenas coincidencias, nmap
lo alentará a averiguar qué es el sistema y envíelo .
Puede encontrar las huellas digitales en /usr/share/nmap/nmap-os-db
(probablemente), pero tendrá que leer la documentación para descifrar los detalles.
En la base de datos de nmap actual (6.47) hay 4485 huellas digitales para los 5009 CPE (plataforma) nombres, más de 800 de que coinciden con varias versiones de MS-Windows, y más de 1000 de ellos coinciden con varios sistemas Linux (incluidos los dispositivos).
Aquí hay una firma real para un sistema Linux, una tableta Asus Nexus 7:
# Linux 3.1.10-g52027f9 #1 SMP PREEMPT Thu Jun 28 16:19:26 PDT 2012 armv71 GNU/Linux, Asus Nexus 7 Android Tablet
Fingerprint Linux 3.1
Class Asus | Linux | 3.X | general purpose
CPE cpe:/o:asus:linux_kernel:3 auto
SEQ(SP=102-10C%GCD=1-6%ISR=108-112%TI=Z%CI=Z%II=I%TS=6|7)
OPS(O1=M566ST11NW6%O2=M566ST11NW6%O3=M566NNT11NW6%O4=M566ST11NW6%O5=M566ST11NW6%O6=M566ST11)
WIN(W1=3890%W2=3890%W3=3890%W4=3890%W5=3890%W6=3890)
ECN(R=Y%DF=Y%T=3B-45%TG=40%W=3908%O=M566NNSNW6%CC=Y%Q=)
T1(R=Y%DF=Y%T=3B-45%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=Y%DF=Y%T=3B-45%TG=40%W=3890%S=O%A=S+%F=AS%O=M566ST11NW6%RD=0%Q=)
T4(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
U1(DF=N%T=3B-45%TG=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(DFI=N%T=3B-45%TG=40%CD=S)
(Wow, eso no es bonito, ya que puedes encontrarlos en tu instalación de nmap en nmap-os-db
, así que no voy a mostrar más).
Elegiré un campo simple IE()
- Comportamiento de eco de ICMP (hacer ping es simple, ¿no?)
IE(DFI=N%T=3B-45%TG=40%CD=S)
Si verifica, verá que se comparte con más de 1250 otros sistemas (de los cuales aproximadamente dos tercios son sistemas Linux).
De la documentación:
La prueba de IE implica el envío de dos paquetes de solicitud de eco ICMP al destino. El primero tiene establecido el bit IP DF, un byte de tipo de servicio (TOS) de cero, un código de nueve (aunque debería ser cero), el número de secuencia 295, un identificador de IP aleatorio y un identificador de solicitud ICMP y 120 bytes de 0x00 para la carga útil de datos.
La segunda consulta de ping es similar, excepto que se usa un TOS de cuatro (IP_TOS_RELIABILITY), el código es cero, se envían 150 bytes de datos y el ID de solicitud ICMP y los números de secuencia se incrementan en uno desde los valores de consulta anteriores .
Esto se decodifica como:
-
DFI=N
ninguna respuesta de ICMP tendrá un conjunto de DF (no fragmentar)
-
T=3B-45
TTL estará entre 0x3B y 0x45
-
TG=40
conjetura TTL inicial de IP
-
CD=S
Códigos de respuesta ICMP (igual que la sonda de solicitud ICMP)
Puede encontrar todos estos códigos y detalles aquí .
Los otros campos contienen datos detallados de manera similar para ECN, secuencia de TCP (SEQ, OPS, WIN, T1) y opciones de TCP (T2-T7).