[Seguridad] Sigue las huellas, Sherlock

message from Ille Corvus on 20 Jul 2004
Sigue las huellas, Sherlock
http://www.nautopia.net/archives/es/auditoria_pentest/fingerprinting/sigue_las_huellas_sherlock.php#more

Uno de los métodos de obtener información más útiles cuando se realiza
un test de penetración a ciegas es el fingerprinting de servicios y
sistemas operativos. Tener las versiones de los programas utilizados
para implementar los servicios es fundamental para saber con exactitud
que vulnerabilidades podrían utilizarse contra ellos. Con el nombre
del programa y la versión, una simple búsqueda en Bugtraq o en los
buscadores puede darnos todos los fallos conocidos que afectan al
programa o permitirnos saber que versión instalar en nuestros
laboratorios personales para estudiar el código y hallar los
desconocidos.

La forma más obvia de identificar un programa y su versión es
examinando el banner que emite el servidor al hacer una petición o al
conectar con nc. Esta es la forma menos fiable, ya que los programas
suelen llevar opciones para no emitir ningún banner o emitir uno
personalizado. Si no, siempre podemos modificar el código(si está
disponible) para cambiar el banner por uno de nuestra elección.

Podemos intentar hacerlo también identificando vulnerabilidades
conocidas que le afecten, por ejemplo, si encontramos un servidor IIS
y le hacemos una petición
GET /NULL.ida?[buffer]=X HTTP/1.1 Host: hostauditado.com
con un buffer de por lo menos 240 bytes y el servidor devuelve
C0000005(Access Violation) podemos identificar a la vez que se trata
de un servidor ISS(soporte para filtros ISAPI .ida) versión 5.0 sin el
sp2 ni el parche contra la vulnerabilidad ISAPI que provocó el code
red. Este método tiene muchos inconvenientes. Primero deja unos
bonitos avisos en los logs del servidor y segundo puede ocasionar que
cerremos algún servicio accidentalmente.

Cada fabricante suele hacer una implementación "personal" de los
protocolos usados en internet. Aunque se supone que deben seguir los
estándares marcados por las RFC cada fabricante puede incluir
sutiles(o en algunos casos como los de microsoft, no tan sutiles)
diferencias que pueden ayudar a identificar que programa corre destrás
de un puerto. Definitivamente es mejor apoyarse en las respuestas que
puede dar los servicios a peticiones más o menos normales para los que
los diferentes servidores emiten una respuesta más o menos diferente.
Un ejemplo sacado de un whitepaper de Net-Square es si analizamos el
orden de aparación de las cabeceras del servidor en la respuesta de un
servidor web a una petición normal:
$ nc apache.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 15 Jun 2003 17:10:49 GMT
Server: Apache/1.3.23
Last-Modified: Thu, 27 Feb 2003 03:48:19 GMT
ETag: "32417-c4-3e5d8a83"
Accept-Ranges: bytes
Content-Length: 196
Connection: close
Content-Type: text/html
Si observamos el orden en el que aparecen las cabeceras Date y Server
podemos comprobar que Apache, Netscape(Sun One Server) e IIS producen
una respuesta diferente. Vamos a ver algunas herramientas que
implementan técnicas para tomarle las huellas a un servidor.

Amap
Amap de THC permite generar peticiones con diferentes protocolos para
identificar que protocolo corre detrás de un puerto. Con ella podemos
identificar servicios corriendo en puertos no oficiales y saber cual
de las herramientas descritas a continuación se puede usar para
identificar el nombre y la versión del programa.

Httprint
Httprint, de Net-Square, es un programa gratuito(que no GPL) que
utiliza técnicas de lógica difusa para dar una estimación de las
versión de servidor web corriendo en un puerto. Realiza un cálculo con
determinados tests pra crear una huella(fingerprint) del servidor y
compararla con una base de signaturas. Su base es bastante amplia pero
la verdad es que confunde el Apache con el Tux

Para usarlo simplemente lo descomprimimos y lo ejecutamos:
./httprint -h 127.0.0.1 -s signatures.txt -o apache.html
Hmap
Hmap de Dustin Lee, implementa también la detección de servidores web
aunque sin usar lógica difusa para calcular estimaciones . Su base de
datos es mucho más pequeña pero el código es un script en Python y es
GPL.

SmtpScan
Greyhats nos ofrece smtpscan, que identifica con bastante fiabilidad
servidores smtp. Este programa realiza peticiones DNS para poder
realizar también identificaciones de registros MX, por ejemplo de
servidores de correo de respaldo. Para ello necesita tener instalado
un módulo de Perl Net::DNS y algunos módulos de la clase Digest. Os
recomiendo que bajeis las útlimas versiones de cpan.org y los
instaleis con:
perl Makefile.PL
make
make test
make install
fpdns
fpdns de Roy Arends & Jakob Schlyter, detecta los programas servidores
DNS realizando peticiones en busca de diferentes implementaciones del
protocolo características de fabricantes. Para usarlo es necesario
tener la última versión de Net::DNS

p0f
Conocer la versión del sistema operativo puede ser muy importante,
sobre todo si tenemos que hacer una demostración y ejecutar código en
el sistema auditado(ya que los offsets a donde saltar pueden no ser
los mismos) y también puede revelar fallos específicos de determinados
sistemas. Nmap, el excelente scanner de Fyodor implenta con su opción
-O la detección activa del sistema operativo basándose en marcas que
hacen únicas a las pilas de protocolos Tcp/Ip de los sistemas
operativos en los paquetes que emiten como respuesta ante determinadas
peticiones. Para que esta técnica funcione, nmap necesita que un
puerto este abierto en el sistema a identificar.p0f de Michel
Zalewski(un auténtico mounstruo) realiza una detección pasiva del
sistema operativo. Permite hacer una estimación del sistema operativo
analizando peticiones Syn o respuestas Syn/Ack, RST. Necesitareis
Libpcap para usarlo.

Contramedidas
La forma de confundir a estas herramientas es producir una respuesta
lo menos estándar posible. Modificar las respuesta a errores y
eliminar los banners que produce nuestro servidor o modificar
parámetros tcp/ip(tamaño de ventana, TTL,...) del sistema pueden ser
técnicas efectivas, aunque mucha gente piensa que es mejor no esconder
que sistemas tenemos instalados.

Sería interesante juntar en una herramienta las técnicas de
fingerprinting de servicios que se conocen y aportar alguna más. Si
alguien se anima ya sabe donde está mi email.

Enlaces

Http Fingerprinting
Smtp Fingerprinting
Passive Fingerprinting
Defeating nmap OS detection
Preventing nmap OS detection in NT

Creative Commons License
This article is licensed under a Creative Commons License
 

Archived message: [Seguridad] Sigue las huellas, Sherlock (Microsoft Win XP)