Bueno, a partir de ahora veréis estos documentos que me parecen interesantes traducidos en la categoría nueva que he creado: Traducción.
Aquí os traigo otro, es algo antiguo pero a ver qué os parece:
Identificar hosts remotos sin que ellos lo sepan.
Algo importante de la seguridad informática es saber cómo piensan los chicos malos. Para entender tus puntos débiles y protegerte de ellos tienes que conocer a tu enemigo. El fingerprinting pasivo es un método para aprender más sobre tu objetivo, sin que él lo sepa. Puedes saber el sistema operativo entre otra cosas del objetivo siguiendo sus huellas. No es 100% efectivo, pero puedes conseguir muy buenos resultados. The subterrain crew ha desarrollado siphon, un sistema pasivo de mapeo de red y de OS fingerprinting. Además, Michael Zalewski (de los mejores en Polonia) y Bill Stearns mantienen p0f. Juntas, estas dos utilidades demostrarán lo que hemos dicho.
- Finderprinting.
El fingerprinting de un sistema operativo ya ha sido sacado con otros programas como queso o nmap. Estas utilidades operan con el principio de que todos las pilas IP de los sistemas operativos tienen sus propias indosincracias. Más concretamente, cada sistema operativo responde de forma diferente a los paquetes corruptos. Todo lo que tenemos que hacer es una base de datos de cómo responda cada sistema a los paquetes que acabamos de mencionar. Por lo tanto, para saber el sistema operativo de un determinado servidor le enviamos una serie de paquetes. Depende de cómo responda lo comparamos con la base de datos que tenemos. Nmap de Fyodor es un programa que esa este método. Él también ha escrito un documento detallado hablando sobre ello.
- Las firmas.
Hay cuatro partes en el TCP que deberemos revisar para determinar el fingerprinting de un sistema operativo (también podemos usar otras). Las firmas son:
- TTL: ell tiempo de vida de un paquete que sale de la máquina seleccionado por el sistema operativo.
- Window size: Qué tamaño selecciona el sistema para el paquete.
- DF: Si el sistema usa el bit no fragmentado.
- TOS: Si el sistema operativo ha seleccionado el tipo de servicio (TOS) y dónde.
Analizando estos factores de un paquete, debes ser capaz de saber el sistema operativo del servidor. Este sistema, no es 100% seguro y es más efectivo en unos sistemas que en otros. De todas formas, mirando más firmas y combinando la información aumentarán tus posibilidades de tener éxito identificando el sistema remoto. Un ejemplo sería la mejor forma de explicarlo. Más abajo tenéis una traza capturada por un sniffer de un sistema que ha enviado un paquete. Este sistema, está intenando ejecutar el exploit para mountd contra nuestro sistema, así que queremos saber más acerca de él. No queremos lanzar un finger o un nmap a la máquina porque no dejaría fuera. Por el contrario, vamos a estudiar esa información de forma pasiva. La firma ha sido capturada usando snort, nuestra herramienta pasiva en este ejemplo.
04/20-21:41:48.129662 129.142.224.3:659 -> 172.16.1.107:604
TCP TTL:45 TOS:0×0 ID:56257
***F**A* Seq: 0x9DD90553
Ack: 0xE3C65D7 Win: 0x7D78
Basándonos en nuestro criterio de las 4 de antes:
- TTL: 45
- Window size: 0x7D78 (ó 32120 en decimal)
- DF: El bit para no fragmentar el paquete está activo.
- TOS: 0×0
Entonces comparamos esta información con la base de datos de firmas. Primero, miramos el TTL usado por el host remoto. Por la traza del sniffer anterior puedes ver que el TTL está en 45. Esto nos dice que hay 19 saltos antes de llegar a nosotros. Así que el TTL original es de 64. Basándonos en esto, parece que este paquete se envió desde un GNU/Linux o FreeBSD (aunque se tienen que añadir más firmas a la base de datos). Hemos confirmado el TTL haciendo un traceroute al host. Si eres consciente de que el host remoto puede detectar el traceroute, puedes asignar el tiempo de vida de tu traceroute (por defecto 30 saltos) para que sean uno o dos menos que el host destino (opción -m). Por ejemplo, en este caso haremos un traceroute al host remoto usando solo 18 saltos (traceroute -m 18). Esto nos dará información del camino que sigue (incluyendo su proveedor) sin tocar al host remoto. Para más información sobre los TTL, revisa “ Research Paper on Default TTL values“.
El próximo paso es comprar el “window size”. Hemos visto que el “window size” es otro dato muy atractivo, especialmente en cómo se usa y cómo cámbian a lo largo de una comunicación. En la firma anterior, vimos que es 0x7D78 un “window size” por defecto únicamente usado por GNU/Linux. Además, GNU/Linux, FreeBSD y Solaris tienden a mantener el mismo en una comunicación (como este hizo). También, los routers Cisco (incluído mi 2514) y el “window size” de Microsoft Windows NT cámbian constantemente. Hemos descubierto que es más fácil en la fase inicial del 3-way-handshake (a causa del lento inicio de las conexiones TCP). Para más información acerca de “Window Size” revisa: Stevens, “TCP/IP Illustrated, Volume 1″ Chapter 20.
La mayoría de los sistemas tienen activo el bit DF, de valor limitado. Sin embargo, esto hace más fácil identificar los sistemas que no esan este bit activo (como por ejemplo SCO y OpenBSD). Después de muchas pruebas, también determinamos que TOS también es un valor limitado. Esto parece estar más basado en las sesiones que en el sistema operativo. En otras palabras: no hay mucha información en el sistema operativo para determinar el TOS, salvo el usado por el protocolo. Definitivamente, TOS requiere más pruebas.Así que basándonos en la información anterior, más concretamente TTL y Window Size, puedes comparar la información con la tabla de firmas para determinar el sistema operativo (en nuestro caso GNU/Linux 2.2.X).
Ten siempre presente que, como en el fingerprinting activo, el pasivo tiene limitaciones. Primero, las aplicaciones que crean sus propios paquetes (como nmap, hunt, nemesis, etc) no usan las mismas firmas que el sistema operativo. Segundo, es relativamente simple para un host ajustar el TTL, el Window Size, o el TOS. Por ejemplo, para cambiar el valor por defecto del TTL:
Solaris: ndd -set /dev/ip ip_def_ttl ‘numero’
Linux: echo ‘numero’ > /proc/sys/net/ipv4/ip_default_ttl
NT: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
De todas formas, combinando un conjunto de paquetes y firmas, en este caso TTL y Window Size, puedes aproximarte mucho al host remoto.
- Otras firmas y usos.
No estamos limitados a las firmas. Hay otras áreas que pueden revisarse tales como: números de secuencia iniciales, números de identificación IP, opciones TCP o IP… Por ejemplo, los routers Cisco tienden a empezar con el número de identifiación IP de 0, a pesar de asignarlos aleatoriamente. Para las opciones TCP, la opción Reconocimiento Selectivo SackOK es muy usada por Windows y GNU/Linux pero no es muy común en FreeBSD o Solaris. Con el tamaño máximo de segmento (MSS) la mayoría de los sistemas operativos usan 1460, Novell 1368 y algunas variantes de FreeBSD 512. También pueden usarse los paquetes ICMP. El miembro de Honey Net Ofir Arkin ha realizado una profunda investigación sobre las firmas ICMP, publicando el documento “El uso del ICMP en los scaneos“. Las firmas ICMP de las que habla en este documentos pueden ser usadas para hacer “passive fingerprinting” basándonos en las firmas de ICMP. Por ejemplo, los “payload” de las máquinas Windows únicamente contienen caracteres del alfabeto, mientras que por el contrario los sistemas Unix como Solaris, GNU/Linux, etc contienen números y símbolos.
El fingerprinting pasivo (passive fingerprinting) puede usarse con muchos propósitos. Puede ser usado por los chicos malos para sacar información. Por ejemplo, para determinar el sistema operativo de una víctima potencial como un servidor web, sólo tienen que mandar un paquete para la petición de la página web, y luego analizar las trazas con un sniffer. De aquí la necesidad de usar un IDS. También puede usarse para identificar proxies como cortafuegos. Como los proxy digamos reconstruyen la conexión para los clientes, es posible sacar “la firma” de las conexiones de los proxies como hemos descrito. Las empresas pueden usar el fingerprinting pasivo para identificar sistemas indeseados en la red. Sistemas que no son autorizados a estar en la red. Quedarías de piedra si vieras cuántas compañías no saben quién está en sus redes. También permite identificar sistemas críticos como (Unisys Mainframe). También podemos usarlo para detectar sistemas que no deberían estar en nuestra red, un sistema operativo no autorizado por decirlo así. Una indicación de que tenemos un blackhat en la red.
El proyecto (HoneyNet) ha desarrollado una base de datos de muestra para demostrar todo este concepto de fingerprinting pasivo. Ha sido hecha y probada en una variedad de si stemas con TELNE, FTP, HTTP y SSH. Ya no se sigue desarrollando y está únicamente con el propósito de demostración. Si quieres contribuir al desarrollo del fingerprinting, recomendamos ayudar a los proyectos anteriormente mencionados.
- Conclusión.
El fingerprinting pasivo te da la habilidad de saber información del host remoto, sin que él lo sepa. Sin que por sí solos los datos del fingerprinting de un sistema operativo puedan servir de algo, combinándolos puedes acercarte mucho al sistema que estés analizando. Gracias a la gente que me ayudó y me dió ideas:
Craig Smith
Peter Grundl
Subterrain Siphon Project
Traducido por Jacob F.P.
Además, sinceramente estos animales en unas condiciones adecuadas no presentan ningún peligro, el peligro siempre es el dueño. Si eres una personal totalmente irresponsable, no cuidas bien al animal y encima no mantienes las distancias con los que pueden ser potencialmente peligrosos… siempre puede pasar lo peor. Y no digamos lo de los perros “peligrosos”. Todo el mundo sabe que los perros que son de raza algo más agrevisas cuando atacan a una persona es por la poca seguridad de sus dueños o bien por el mal trato que tienen estos animales. El dueño siempre tiene la responsabilidad de tener al animal (sea el que sea) en las condiciones adecuadas… pero siempre depende de la educación que éste tenga. Los rottweiler son excelentes para los niños y en un tiempo lejano servían a los romanos para cuidar sus rebaños y protejerlos. Que yo sepa, nunca ha aparecido nada sobre ellos en relación a perros peligrosos sino todo lo contrario: la responsabilidad siempre es del dueño.