Fingerprint en Nmap (Aporta tu granito de arena)
January 8th, 2008 by BusindreComo ya sabemos Nmap es una herramienta de código abierto para la exploración de redes y auditoría de seguridad en el campo de sistemas. En sus ultimas versiones han añadido posibilidad de scripts "NSE" que son muy útiles para que nmap pueda realizar muchas más funciones que en sus anteriores versiones.
Una de las características que más nos interesa en esta ocasión es la de obtener en el escaneo información sobre el sistema operativo y versiones de las aplicaciones servidor que trabajan en la máquina a escanear. Nmap para detectar un SO lo hace mediante el envío de siete paquetes TCP/IP (tests) y su respuesta es comparada en una base de datos de firmas de los sistemas operativos conocidos). Las firmas no tienen porque ser de SO de escritorios, pueden ser simples impresoras, pda, routers, switchs o cualquier cosa conectada a una red que use un software para realizar sus tareas. Cuando la respuesta coincide podemos obtener información sobre el sistema operativo escaneado ya sea el sistema operativo usado o los tipos y versiones de los demonios (Servicios) que ofrece.
Como miembros de la comunidad de GNU/Linux y como usuarios de dicha aplicación, debería ser nuestra "obligación" mejorarlo si podemos, aportando ese pequeño granito de arena en forma de nuevas firmas para detectar nuevos servicios (+ Versión) y sistemas operativos o bien corrigiendo falsos positivos que podamos encontrarnos al usar nmap. Como veremos es algo muy fácil de hacer y se contribuye mucho a mejorar la aplicación dedicándole unos pocos minutos.

Debemos bajar la ultima versión, ya que solo se admiten firmas de versiones de nmap superiores a 4.20 y para comprobar que actualmente la firma no se encuentra debemos hacer uso siempre de la ultima versión disponible.
Descargar Nmap (3 Mb): http://insecure.org/nmap/download.html
Compilar / Instalar Nmap
* GNU/Linux
$ bzip2 -cd nmap-4.52.tar.bz2 | tar xvf -
$ cd nmap-4.52
$ ./configure --prefix=/usr
$ make
$ su root
# make install
* En el caso de usar BSD:
$ bzip2 -cd nmap-4.52.tar.bz2 | tar xvf -
$ cd nmap-4.52
$ ./configure
$ gmake
$ su root
# gmake install
Ficheros de interés (/usr/share/nmap):
nmap-os-db: Base de datos de firmas de SO 2nd Generación DB.
nmap-os-fingerprints: Base de datos de firmas de SO.
nmap-mac-prefixes: Prefijos de Mac + Fabricante.
Opción de Sistema Operativo (-O)
Con esta opción nos referimos a la versión del sistema operativo o el modelo del dispositivo escaneado. Podemos añadir una nueva o bien modificar (Corregir) una salida que no sea la correcta.
* Añadir nuevas firmas
Veamos un ejemplo práctico.
Starting Nmap 4.52 ( http://insecure.org ) at 2008-01-04 04:36 CET
Interesting ports on 192.168.1.1:
Not shown: 1710 closed ports
PORT STATE SERVICE
21/tcp open ftp
23/tcp open telnet
53/tcp open domain
80/tcp open http
MAC Address: 00:01:38:68:D4:D8 (XAVi Technologies)
No exact OS matches for host (If you know what OS is running on it, see http://insecure.org/nmap/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=4.52%D=1/4%OT=21%CT=1%CU=38320%PV=Y%DS=1%G=Y%M=000138%TM=477DA9E3
OS:%P=i686-pc-linux-gnu)SEQ(SP=85%GCD=1%ISR=89%TI=I%TS=U)SEQ(SP=85%GCD=1%IS
OS:R=86%TI=I%TS=U)SEQ(SP=82%GCD=1%ISR=8B%TI=I%TS=U)SEQ(SP=77%GCD=1%ISR=85%T
OS:I=I%TS=U)SEQ(SP=7F%GCD=1%ISR=82%TI=I%TS=U)OPS(O1=M58C%O2=M578%O3=M280%O4
OS:=M218%O5=M218%O6=M109)WIN(W1=FDE8%W2=FDE8%W3=FDE8%W4=FDE8%W5=FDE8%W6=FDE
OS:8)ECN(R=Y%DF=Y%T=80%W=FDE8%O=M58C%CC=N%Q=)T1(R=Y%DF=Y%T=80%S=O%A=S+%F=AS
OS:%RD=0%Q=)T2(R=Y%DF=Y%T=80%W=FDE8%S=A%A=Z%F=R%O=%RD=0%Q=)T3(R=N)T4(R=Y%DF
OS:=Y%T=80%W=FDE8%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=N%T=80%W=0%S=Z%A=S+%F=AR
OS:%O=%RD=0%Q=)T6(R=Y%DF=N%T=80%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=N%T=80
OS:%W=0%S=Z%A=Z%F=R%O=%RD=0%Q=)U1(R=Y%DF=N%T=9B%TOS=0%IPL=38%UN=0%RIPL=G%RI
OS:D=G%RIPCK=G%RUCK=G%RUL=G%RUD=G)IE(R=N)
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.946 seconds
Como vemos en la salida del comando, se sabe que el modelo del router es Xabi (Por la MAC), pero no sabemos la versión exacta del SO / Modelo del router. Pero realmente como el router es nuestro, y jugamos el papel de admisnitrador pudiendo indicarle el modelo e incluso la versión de firmware que usa nuestro router, si es posible consultarla lógicamente, dependerá del dispositivo usado. Lo consultamos y resulta que el modelo de nuestro ejemplo es un router "Xavi 7868r" y su firmware es desconocido (Dependerá del router el poderse consultar)
Ahora nos dirigimos a la pagina de firmas para nmap, en el primer texbox colocamos la firma obtenida, explicar como sabemos que software usaba el escaneado (Porque seamos nosotros los administradores, porque nos lo comento un amigo, por lo que sea, a poder ser háganlo cuando estén 99% seguros). A continuación encontramos la "Marca del Dispositivo" (Router CISCO, PC Mandriva, Impresora HP, etc,..). Luego en notas podemos añadir información opcional como puede ser el modelo de lo escaneado o cualquier tipo de información pertinente sobre el escaneo.
* Corregir Versiones de SO:
NOTA: Si la salida del comando muestra "(JUST GUESSING)" No debemos reportarlo !
Debemos ejecutar el comando:
# nmap -O -sSU -F -T4 -d IP
Pegar la salida de ese comando en el textbox correspondiente y en el segundo explicamos porque es incorrecto, en ingles a ser posible. Lógicamente debemos estar muy seguros de lo que decimos y haber comprobado bien la versión del software escaneado antes de mandar alguna corrección, no es bueno llenar la base de datos de información errónea.
Opción de Servicio / Versión (-sV)
Esta opción permite identificar los servicios y su versión + Modelo del dispositivo (En el caso de ser un router). Como en lo visto anteriormente, tenemos la posibilidad de añadir nuevas firmas sobre servicios o bien corregir las existentes.
* Añadir nuevas versiones
El comando que usaremos sera:
Servicios TCP
# nmap -sSV IP
Servicios UDP
# nmap -sUV IP
Veamos un ejemplo.
Starting Nmap 4.52 ( http://insecure.org ) at 2008-01-04 04:50 CET
Interesting ports on 192.168.1.1:
Not shown: 1710 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp Xavi 7768 WAP ftpd 1.00
23/tcp open telnet?
53/tcp open tcpwrapped
80/tcp open http?
2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port23-TCP:V=4.52%I=7%D=1/4%Time=477DACF0%P=i686-pc-linux-gnu%r(NULL,F,
SF:"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20")%r(GenericLines,61,"\xff\xfb\x
SF:01\xff\xfb\x03\r\nLogin:\x20\r\n\r\nYou\x20must\x20supply\x20a\x20usern
SF:ame\r\n\r\nLogin:\x20\r\n\r\nYou\x20must\x20supply\x20a\x20username\r\n
SF:\r\nLogin:\x20")%r(GetRequest,42,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x2
SF:0GET\x20/\x20HTTP/1\.0\r\nPassword:\x20\r\nLogin\x20failed\r\n\r\nLogin
SF::\x20")%r(HTTPOptions,46,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20OPTIONS
SF:\x20/\x20HTTP/1\.0\r\nPassword:\x20\r\nLogin\x20failed\r\n\r\nLogin:\x2
SF:0")%r(RTSPRequest,46,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20OPTIONS\x20
SF:/\x20RTSP/1\.0\r\nPassword:\x20\r\nLogin\x20failed\r\n\r\nLogin:\x20")%
SF:r(RPCCheck,12,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20\(r\|")%r(DNSVersi
SF:onBindReq,1A,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20versionbind")%r(DNS
SF:StatusRequest,F,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20")%r(Help,1F,"\x
SF:ff\xfb\x01\xff\xfb\x03\r\nLogin:\x20HELP\r\nPassword:\x20")%r(SSLSessio
SF:nReq,27,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20SO\?G,`~{w<=on\(fedcba`\
SF:x08\x20\x08")%r(SMBProgNeg,33,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20MB
SF:r\x08\x20\x08@@PC\x20NETWORK\x20PROGRAM\x201\.0MICROS")%r(X11Probe,10,"
SF:\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20l")%r(FourOhFourRequest,51,"\xff\
SF:xfb\x01\xff\xfb\x03\r\nLogin:\x20GET\x20/nice20ports2C/Tri6Eity\.t\r\nP
SF:assword:\x20\r\nLogin\x20failed\r\n\r\nLogin:\x20")%r(LPDString,16,"\xf
SF:f\xfb\x01\xff\xfb\x03\r\nLogin:\x20default")%r(LDAPBindReq,11,"\xff\xfb
SF:\x01\xff\xfb\x03\r\nLogin:\x200`")%r(SIPOptions,E2,"\xff\xfb\x01\xff\xf
SF:b\x03\r\nLogin:\x20OPTIONS\x20sip:nm\x20SIP/2\.0\r\nPassword:\x20\*\*\*
SF:\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\r\nLogin\x20fail
SF:ed\r\n\r\nLogin:\x20From:\x20<sip:nm@nm>;tag=root\r\nPassword:\x20\*\*\
SF:*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\r\nLogin\x20failed\r\n\r\nLogin:\x20Call-
SF:ID:\x2050000\r\nPassword:\x20\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*")%r(LANDe
SF:sk-RC,17,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20TNMPTNME")%r(TerminalSe
SF:rver,F,"\xff\xfb\x01\xff\xfb\x03\r\nLogin:\x20")%r(NCP,13,"\xff\xfb\x01
SF:\xff\xfb\x03\r\nLogin:\x20DmdT");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port80-TCP:V=4.52%I=7%D=1/4%Time=477DACF0%P=i686-pc-linux-gnu%r(GetRequ
SF:est,2C6,"HTTP/1\.1\x20401\x20Unauthorized\r\nServer:\x20Unknown/0\.0\x2
SF:0UPnP/1\.0\x20Conexant-EmWeb/R6_1_0\r\nContent-Type:\x20text/html\r\nEx
SF:pires:\x20Thu,\x2001\x20Jan\x201970\x2000:00:00\x20GMT\r\nCache-Control
SF::\x20no-cache\r\nPragma:\x20no-cache\r\nWWW-Authenticate:\x20Basic\x20r
SF:ealm=\"WebAdmin\"\r\n\r\n\n\n<html>\n<head>\n\n<link\x20rel=\"styleshee
SF:t\"\x20type=\"text/css\"\x20href=\"/styles/default\.css\">\n\n<title>Au
SF:thentication\x20failed</title>\n\n</head>\n<body\x20bgcolor=\"#ffffff\"
SF:\x20link=\"#3300cc\"\x20alink=\"#ff0000\"\x20vlink=\"#990066\">\n\n<h1>
SF:Authentication\x20failed</h1>\n<hr\x20noshade\x20size=\"3\"\x20width=\"
SF:100%\">\n<p\x20class=\"alert\">\nYou\x20need\x20to\x20supply\x20a\x20va
SF:lid\x20user\x20name\x20and\x20password\.\n</p>\n\n\n<p\x20class=\"foote
SF:r\">\n\x20\x20Copyright\x20\(c\)\x202003\x20GlobespanVirata,\x20Inc\.\n
SF:\x20\x20<a\x20href=\"/terms\.html\">Terms\x20and\x20conditions</a>\n</p
SF:>\n</body>\n</html>\n\n")%r(HTTPOptions,2C6,"HTTP/1\.1\x20401\x20Unauth
SF:orized\r\nServer:\x20Unknown/0\.0\x20UPnP/1\.0\x20Conexant-EmWeb/R6_1_0
SF:\r\nContent-Type:\x20text/html\r\nExpires:\x20Thu,\x2001\x20Jan\x201970
SF:\x2000:00:00\x20GMT\r\nCache-Control:\x20no-cache\r\nPragma:\x20no-cach
SF:e\r\nWWW-Authenticate:\x20Basic\x20realm=\"WebAdmin\"\r\n\r\n\n\n<html>
SF:\n<head>\n\n<link\x20rel=\"stylesheet\"\x20type=\"text/css\"\x20href=\"
SF:/styles/default\.css\">\n\n<title>Authentication\x20failed</title>\n\n<
SF:/head>\n<body\x20bgcolor=\"#ffffff\"\x20link=\"#3300cc\"\x20alink=\"#ff
SF:0000\"\x20vlink=\"#990066\">\n\n<h1>Authentication\x20failed</h1>\n<hr\
SF:x20noshade\x20size=\"3\"\x20width=\"100%\">\n<p\x20class=\"alert\">\nYo
SF:u\x20need\x20to\x20supply\x20a\x20valid\x20user\x20name\x20and\x20passw
SF:ord\.\n</p>\n\n\n<p\x20class=\"footer\">\n\x20\x20Copyright\x20\(c\)\x2
SF:02003\x20GlobespanVirata,\x20Inc\.\n\x20\x20<a\x20href=\"/terms\.html\"
SF:>Terms\x20and\x20conditions</a>\n</p>\n</body>\n</html>\n\n")%r(RTSPReq
SF:uest,74,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nServer:\x20Unknown/0\.0\
SF:x20UPnP/1\.0\x20Conexant-EmWeb/R6_1_0\r\nContent-Length:\x200\r\n\r\n40
SF:0\x20Bad\x20Request\r\n");
MAC Address: 00:01:38:68:D4:D8 (XAVi Technologies)
Service Info: Device: WAP
Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 101.314 seconds
Las firmas es lo que esta debajo de la cadena:
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
Y cada una pertenece a un puerto, en el caso del ejemplo son el 23 y el 80. En la pagina para añadir nuevas versiones, en la primera caja de texto ponemos la firma del puerto. Luego buscamos el servicio (ssh, ftp,smtp,quake,telnet,..), de no existir en el listado deberemos nosotros de escribir de que servicio se trata.
Luego tenemos la opción de mostrar el sistema operativo sobre el que corre dicho servicio, siendo esto algo opcional pero muy recomendable. Luego podemos indicar el dispositivo escaneado (PC, router, impresora) con carácter opcional. Luego en la sección de "Notas" indicamos toda la información que podemos dar, entre otras la versión del servidor e incluso modulos usados por el mismo. Un ejemplo de informacion de servicio proporcionado por nmap es el siguiente:
6565/tcp open http Apache httpd 1.3.33 ((Unix) mod_ssl/2.9.24 OpenSSL/0.9.9g PHP/5.4.0)
* Corregir Versiones de servicios
Si nos percatamos de que nmap no muestra la versión correcta del servicio escaneado, podemos aportar nuestra corrección de la siguiente forma.
Servicio TCP
# nmap -O -sSV -T4 -d --packet-trace -p [puerto] [IP]
Servicio UDP
# nmap -O -sUV -T4 -d --packet-trace -p [puerto] [IP]
Como en el anterior caso de corrección del sistema operativo, en la primera caja de texto insertamos el resultado del comando y en la segunda tendremos que explicar porque esa salida esta mal y cual debería ser la correcta.
Posted in Comunidad |

January 18th, 2008 at 12:51 am
[...] de redes y del mundo de “sistemas” que es opensource y en la que todo el mundo puede colaborar. En las últimas versiones de esta magnífica herramienta se ha añadido el llamado “Nmap [...]