Las huellas digitales son aquellos fragmentos de datos mediante los cuales podemos hacer una identificación sobre el sistema operativo o aplicaciones sin tener acceso a ellos. Por lo general, podemos tener identificaciones activas y pasivas, siendo las pasivas mucho más discretas ya que no tenemos la necesidad de enviar sondas ni ningún tipo de datos, simplemente escuchamos la red de manera pasiva y recolectamos la suficiente información como para poder identificar el sistema operativo.

Existen muchos programas que hacen esto de manera automática, como por ejemplo; ettercap, sin embargo existe un método mucho más eficaz y divertido, sin mencionar que es extremadamente flexible y lo podemos adaptar como queramos: iptables y GNU/Linux.

Con un modulo de extensión para iptables podemos bloquear y desbloquear (y mucho más) las maquinas de nuestra red utilizando una serie de reglas simples para iptables. OSF (OS Fingerprint) es un modulo que ayuda a construir reglas de iptables basándonos en reglas sobre los paquetes entrantes TCP (solo necesitamos el handshake inicial que contenga el bit SYN para saber cual es el SO remoto).

Sin embargo, OSF te permite ejecutar diferentes acciones de netfilter basados en la información que devuelva. No solo podemos utilizar SYN para la identificación de las maquinas, también podemos utilizar otros parámetros para comparar resultados (WS, MSS, opciones, TTL, DF, el orden de las opciones, etc…) de los paquetes con el bit SYN en ellos.

El modulo de iptables fue implementado hace casi 5 años y vivió en la total obscuridad, sin embargo ahora ha sido actualizado para que haga uso de Xtables y algunos arreglos de compatibilidad. La idea original fue de Michal Zalewsky y su implementacion en userland de p0f. Existen muchas herramientas que implementan esta funcionalidad, como scapy, ettercap, p0f, etc…

Para poderlo utilizar, debemos tener un kernel reciente y las fuentes de iptables (instalar según la distribución). Es preferible editar el Makefile para ubicar algunos programas en algunos casos.

% vim Makefile
% make
# make lib
# make bin
# insmod ./ipt_osf.ko
# ./load ./pf.os /proc/sys/net/ipv4/osf
# iptables -I INPUT -j ACCEPT -p tcp -m osf --genre Linux --log 0 --ttl 1 --connector

Y tendremos toda la información que nos nota OSF en syslog. La lista de fingerprints la pueden descargar del sitio de OpenBSD.