Documente Academic
Documente Profesional
Documente Cultură
HTTP Fingerprinting
Introducción
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
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).
Tabla A
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
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
D:\Tools\nc>nc iis.test.com 80
DELETE / HTTP/1.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
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
D:\Tools\nc>nc iis.test.com 80
GET / JUNK/1.0
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:
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.
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
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.
Figura 2
Figura 3
Conclusión
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.
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