Sunteți pe pagina 1din 7

Artículo publicado en la revista @RROBA # 96

Suplemento “Hack Paso a Paso” #27 – Noviembre 2005


(Material Sin Editar)

HTTP Fingerprinting
Introducción

La traducción al español de la palabra “Fingerprintig” no es ni más ni menos que


“Huella Dactilar”. La verdad, es que el espíritu de esta palabra es bastante más amplio y
generalmente se encuentra relacionado sobre todo con “algo que identifica”.

En el contexto de la seguridad informática en general y la evaluación de seguridad en


particular, hablar de “Fingerprinting”, es hablar de diferentes técnicas mediante las
cuales es posible identificar con mayor o menor grado de certeza, un dispositivo, host,
sistema operativo, etc.

Las técnicas de “Fingerprinting” aplicadas a la seguridad en redes, son conocidas,


documentadas y a menudo utilizadas por administradores y profesionales de la
seguridad en su trabajo diario. La identificación de sistemas operativos en base a la
implementación que el mismo haya realizado de la pila TCP/IP o la forma en la que
requerimientos mal formados, son respondidos, deja un rastro capaz de identificar los
mismos con un alto porcentaje de fiabilidad.

Como seguramente sabrás, la correcta identificación de sistemas operativos y servicios,


es un punto fundamental en todo proceso de auditoria o evaluación de seguridad. Una
identificación incorrecta, podría eventualmente causar un retraso importante en los
tiempos pactados para la tarea al estar intentando explotar vulnerabilidades no
existentes en un sistema mal identificado, al margen de los inconvenientes que dichos
intentos errores de explotación pueden llegar a generar.

De un modo u otro, y tal como mencionáramos en párrafos anteriores, las técnicas de


fingerprinting han sido bastante discutidas en el pasado. Trabajos tales como el
realizado por Fyodor (insecure.org), de nombre “Remote OS detection via TCP/IP Stack
Fingerprinting”, han representado un gran avance en tal sentido, mientras que las
técnicas en el mencionadas, han sido implementadas con éxito en herramientas
esenciales tales como nmap, por citar tan solo un ejemplo.

Pero este artículo, no tiene como propósito describir el trabajo realizado en torno a las
técnicas de fingerprinting en base a la pila TCP/IP las cuales solemos utilizar con
frecuencia como parte de nuestro explorador de puertos favorito, sino que por el
contrario tiene por objeto presentar parte del magnifico trabajo realizado por Saumil
Shah de “Net Square”, respecto de lo que se ha dado en llamar “HTTP Fingerprinting”.

HTTP Fingerprinting

Con algunas diferencias, el concepto detrás HTTP Fingerprinting es similar al utilizado


al momento de realizar la detección de sistemas operativos por medio de la pila TCP/IP.

Copyright © 2005 Hernán Marcelo Racciatti 1


http://www.hernanracciatti.com.ar
Artículo publicado en la revista @RROBA # 96
Suplemento “Hack Paso a Paso” #27 – Noviembre 2005
(Material Sin Editar)

El objetivo final en este caso, es el de identificar servidores HTTP evaluando las


diferencias en la implementación del propio protocolo HTTP en cada uno de ellos.

Un aspecto importante respecto de HTTP Fingerptinting, es que contrariamente a lo que


ocurre con la pila TCP/IP en donde cambiar la forma en la que esta se comporta ante un
requerimiento, requiere acceso al codigo de los servicios de networking a nivel de
kernel, haciendo de esta posibilidad algo realmente difícil de implementar en la
práctica; las respuestas brindadas por un servidor HTTP son relativamente sencillas de
cambiar, haciendo que su detección sea mas complicada.

No obstante, el trabajo de investigación de Shah, nos brinda la oportunidad de conocer


algunas de las técnicas y herramientas que se encuentran a nuestra disposición, al
momento de llevar a cabo la identificación de servidores HTTP, con un porcentaje de
éxito interesante.

Respuestas HTTP: Estudiando el Comportamiento

Si nos tomamos el trabajo de examinar la respuesta brindada por los servidores HTTP
más importantes, frente al envío de requerimientos correctamente conformados,
descubriremos que en su gran mayoría, estos responderán acorde a lo especificado en
los RFCs que los gobiernan. Pero... que sucede cuando los requerimientos son
malformados en forma premeditada? cual es la respuesta? es uniforme? acertaste... es
allí donde comienzan las diferencias... y con ellas, la posibilidad de obtener huellas
únicas mediante las cuales seamos capaces de distinguir un servidor de otro.

Pero vamos a llevar este concepto a la práctica haciendo nuestras propias pruebas, para
ello nos valdremos únicamente de Netcat. Como hemos explicado en nuestro artículo
“Seguridad en Aplicaciones Web”, el cual puedes encontrar en este mismo número,
netcat nos permite entre otras tantas cosas, establecer un dialogo a nivel HTTP con el
servidor objetivo. De este modo, intentaremos decir mediante netcat, decir las palabras
correctas, a fin lograr obtener respuestas que puedan colaborar con nuestro objetivo
final.

Una vez mas, siguiendo los pasos descriptos en el paper “An Introduction to HTTP
fingerprinting” de Saumil Shah, intentaremos analizar las respuestas de los cuatro
requerimientos mencionados en la “Tabla A”, limitando el alcance de nuestras pruebas
a dos de los servidores web mas populares Apache e IIS (Internet Information Server).

Test Nº HTTP Test Resultado Esperado


1 HEAD / HTTP/1.0 Normalmente el Header HTTP
Respuesta cuando las operaciones DELETE no son generalmente
2 DELETE / HTTP/1.0
permitidas.
Respuesta a un requerimiento con una versión de protocolo invalido
3 GET / HTTP/3.0
(3.0)
Respuesta a un requerimiento con una especificación de protocolo
4 GET / JUNK/1.0
invalido (JUNK)

Tabla A

Copyright © 2005 Hernán Marcelo Racciatti 2


http://www.hernanracciatti.com.ar
Artículo publicado en la revista @RROBA # 96
Suplemento “Hack Paso a Paso” #27 – Noviembre 2005
(Material Sin Editar)

Nota: Los ejemplos mostrados a continuación han sido recortados a efectos de


optimizar el espacio y clarificar los aspectos que se intentan destacar en cada caso,
dejando tan solo las primeras cuatro líneas involucradas en las respuestas..

Test Nº1 – Encabezados

Respuesta Apache 2.0.43

D:\Tools\nc>nc apache.test.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Wed, 20 Jul 2005 19:49:29 GMT
Server: Apache/2.0.43 (Unix) PHP/4.3.1
Content-Location: index.html.en
Vary: negotiate,accept-language,accept-charset

Respuesta IIS 5.0


D:\Tools\nc>nc iis.test.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Content-Location: http://iis.example.com/Default.htm
Date: Wed, 20 Jul 2005 18:55:34 GMT

Test Nº2 – DELETE

Respuesta Apache 2.0.43


D:\Tools\nc>nc apache.test.com 80
DELETE / HTTP/1.0

HTTP/1.1 405 Method Not Allowed


Date: Wed, 20 Jul 2005 19:49:48 GMT
Server: Apache/2.0.43 (Unix) PHP/4.3.1
Vary: accept-language,accept-charset

Respuesta IIS 5.0

D:\Tools\nc>nc iis.test.com 80
DELETE / HTTP/1.0

HTTP/1.1 403 Forbidden


Server: Microsoft-IIS/5.0
Date: Wed, 20 Jul 2005 18:57:12 GMT
Content-Type: text/html

Copyright © 2005 Hernán Marcelo Racciatti 3


http://www.hernanracciatti.com.ar
Artículo publicado en la revista @RROBA # 96
Suplemento “Hack Paso a Paso” #27 – Noviembre 2005
(Material Sin Editar)

Test Nº3 – Versión de Protocolo Invalido

Respuesta Apache 2.0.43


D:\Tools\nc>nc apache.test.com 80
GET / HTTP/3.0

HTTP/1.1 400 Bad Request


Date: Wed, 20 Jul 2005 19:50:38 GMT
Server: Apache/2.0.43 (Unix) PHP/4.3.1
Content-Length: 301

Respuesta IIS 5.0

D:\Tools\nc>nc iis.test.com 80
GET / HTTP/3.0

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Content-Location: http://iis.example.com/Default.htm
Date: Wed, 20 Jul 2005 18:58:11 GMT

Test Nº4 – Especificación de Protocolo Invalido

Respuesta Apache 2.0.43


D:\Tools\nc>nc apache.test.com 80
GET / JUNK/1.0

HTTP/1.1 200 OK
Date: Wed, 20 Jul 2005 19:51:42 GMT
Server: Apache/2.0.43 (Unix) PHP/4.3.1
Content-Location: index.html.en

Respuesta IIS 5.0

D:\Tools\nc>nc iis.test.com 80
GET / JUNK/1.0

HTTP/1.1 400 Bad Request


Server: Microsoft-IIS/5.0
Date: Wed, 20 Jul 2005 18:59:05 GMT
Content-Type: text/html

Bien, lo que haremos ahora, será escribir los resultados en un cuadro y comparar las
respuestas recibidas de cada servidor, para cada uno de los requerimientos y así poder
encontrar diferencias:

Server Orden DELETE Versión Erronea Protocolo Erroneo


Apache/2.0.43 Date, Server 405 400 200
IIS 5.0 Server, Date 403 200 400

Copyright © 2005 Hernán Marcelo Racciatti 4


http://www.hernanracciatti.com.ar
Artículo publicado en la revista @RROBA # 96
Suplemento “Hack Paso a Paso” #27 – Noviembre 2005
(Material Sin Editar)

Como verás las respuestas recibidas por uno y otro server, difieren levemente. Como
verás señalado en rojo, cuando realizamos el requerimiento de HEAD, Apache
respondió mostrando primero información de la fecha y luego el número de su versión
mientras que IIS, hizo exactamente lo contrario. Por otra parte, cada uno de los
requerimientos posteriores, ha arrojado distintas respuestas para cada uno de los
servidores testeados.

Herramientas Automaticas: HTTPrint

Bien, a lo largo de los párrafos anteriores, has podido observar alguno de los métodos
que eventualmente pueden ser utilizados a la hora realizar el fingerprinting HTTP del
servidor objetivo. Lo cierto es, que si bien lo hecho hasta aquí probablemente haya
servido para conocer la esencia del fingerprinting, lo cierto es que lograr confiabilidad
en el reconocimiento de servicios por medio de huellas a escala, requerirá bastante mas
que tan solo un par de test como los aquí mostrados.

Esto no debe desilusionarte, puesto que la misma persona que se ha tomado el trabajo
de realizar el research de donde me he tomado el atrevimiento de extraer contenido
utilizado como parte de este artículo, ha resumido su experiencia al respecto en una
magnifica herramienta denominada HTTPrint. (Figura 1)

Figura 1

Copyright © 2005 Hernán Marcelo Racciatti 5


http://www.hernanracciatti.com.ar
Artículo publicado en la revista @RROBA # 96
Suplemento “Hack Paso a Paso” #27 – Noviembre 2005
(Material Sin Editar)

Si bien es, cierto que HTTPrint se basa en alguno de los puntos aquí mencionados, este
incorpora decenas de técnicas adicionales (Árboles de desición, Lógica propia, Técnicas
avanzadas de fuzzyng, etc.), las cuales en conjunto con una excelente base de datos de
firmas, convierten en esta herramienta en un motor capaz de identificar con un alto
porcentaje de éxito, detalles del servidor objetivo.

HTTPrint se encuentra disponible en versión de línea de comandos (Figura 2) e Interfaz


Gráfica. A la fecha, es posible descargar esta herramienta para ejecutarla sobre
Windows, Linux, Mac Os X y FreeBSD.

Figura 2

Al igual que su instalación, su utilización no representa ninguna complejidad y en el


caso de la versión con GUI, su interfaz es sumamente intuitiva. Para echarla andar,
bastará con suministrarle el sitio objetivo y el puerto donde se entiende el mismo brinda
servicio (Ej: 80, 8080, 8008, etc.) En modo consola, su utilización es un placer. Como
resultado de su análisis, por defecto HTTPrint arroja el mismo en formato HTML
(Opciones tales como “csv” y “xml” se encuentran soportadas) con un diseño claro y
agradable. (Figura 3)

Copyright © 2005 Hernán Marcelo Racciatti 6


http://www.hernanracciatti.com.ar
Artículo publicado en la revista @RROBA # 96
Suplemento “Hack Paso a Paso” #27 – Noviembre 2005
(Material Sin Editar)

Figura 3

Conclusión

En síntesis, en este escueto artículo, hemos aprendido que el reconocimiento de huellas,


no solo es propiedad de los detectives o investigadores, y que tampoco es algo
relacionado únicamente con el reconocimiento de sistemas operativos. Hemos visto
alguno de los métodos utilizados por HTTPrint, así como el modo en que esta
herramienta puede ahorrarnos muchos dolores de cabeza.

Por ultimo entonces, recomiendo que verifiques los vínculos dispuestos en nuestra
sección de “Referencias y Lecturas Complementarias”, accedas al site de Net Square y
una vez allí, revises la información relativa a este y otros temas que seguramente
despertaran tu interés. Lógicamente te invito a descargar HTTPrint y realices tu propia
experiencia.

Hernán Marcelo Racciatti


http://www.hernanracciatti.com.ar

Referencias y Lecturas Complementarias

Paper: “Remote OS detection via TCP/IP Stack Fingerprinting” by Fyodor


Paper: “An Introduction to HTTP fingerprinting” by Saumil Shah

http://net-square.com
http://net-square.com/httprint/index.html
http://net-square.com/httprint/index.html#downloads
http://www.insecure.org/nmap/nmap-fingerprinting-article.html
http://www.ietf.org/rfc/rfc2616.txt

Copyright © 2005 Hernán Marcelo Racciatti 7


http://www.hernanracciatti.com.ar

S-ar putea să vă placă și