Hola a todos, Este articulo de Hispasec puede ser interesante para alguno de vosotros.
---------- Mensaje Reenviado ---------- Subject: una-al-dia (27/9/1999) IP Spoofing en Linux 2.2.x (x<13) Date: Thu, 30 Sep 1999 16:19:17 +0200 From: Noticias Hispasec<[EMAIL PROTECTED]> -------------------------------------------------------------------- HISPASEC una al día (27/9/1999) Todos los días una noticia de seguridad -------------------------------------------------------------------- IP Spoofing en Linux 2.2.x (x<13) --------------------------------- Un error de implementación en los kernel Linux 2.2.x permite una predicción muy aproximada del número de secuencia inicial de una conexión TCP/IP. Acertando en dicha predicción, es posible injectar información aparentemente procedente de una IP diferente a la del atacante. Si entre la máquina atacada y la IP que se simula existe algún mecanismo de confianza (especialmente, herramientas r* y NFS) el atacante puede comprometer la seguridad de la máquina atacada. El ataque fue publicado el pasado 26 de Septiembre en la lista de desarrollo del Kernel, y fue seguido por una furiosa actividad para evaluar su alcance y solucionar el problema en el menor plazo posible. El error fue introducido en los kernels 2.2.x; los kernel 2.0.x no son vulnerables. El problema es doble: por una parte, uno de los secretos utilizados a la hora de calcular el ISN no es ni secreto ni aleatorio, sino una constante conocida: cero. En segundo lugar, se utilizan campos como los números de puerto de la conexión para calcular el ISN, pero no la IP del remitente, debido a otro bug de programación. El problema está corregido en la versión 2.2.13pre13. Pero gracias a disponer del código fuente, no hace falta esperar a la aparición del kernel 2.2.13 oficial. Cualquiera puede solucionarlo de forma local sin más que aplicar algunos parches. Para el primer problema, tenemos: --- linux.vanilla/drivers/char/random.c Thu Dec 31 20:03:49 1998 +++ linux.13p12/drivers/char/random.c Sun Sep 19 15:00:34 1999 @@ -1698,7 +1698,7 @@ if (!rekey_time || (tv.tv_sec - rekey_time) > REKEY_INTERVAL) { rekey_time = tv.tv_sec; /* First three words are overwritten below. */ - get_random_bytes(&secret+3, sizeof(secret)-12); + get_random_bytes(&secret[3], sizeof(secret)-12); count = (tv.tv_sec/REKEY_INTERVAL) << HASH_BITS; } Y para el segundo problema, el parche es --- linux.vanilla/net/ipv4/tcp_ipv4.c Sat Aug 28 20:00:59 1999 +++ linux.13p13/net/ipv4/tcp_ipv4.c Sun Sep 26 23:25:18 1999 @@ -525,7 +525,8 @@ static inline __u32 tcp_v4_init_sequence(struct sock *sk, struct sk_buff *skb) { - return secure_tcp_sequence_number(sk->saddr, sk->daddr, + return secure_tcp_sequence_number(skb->nh.iph->daddr, + skb->nh.iph->saddr, skb->h.th->dest, skb->h.th->source); } Una vez más se puede ver como el enfoque "Open Source" ha podido localizar y corregir un problema en apenas unas pocas horas. Más información: TESO http://teso.scene.at/ Página web de uno de los descubridores http://www.cs.uni-potsdam.de/homepages/students/linuxer/ IP Spoofing Trivial en los Kernel Linux Inferiores a 2.0.36 http://www.argo.es/~jcea/artic/hispasec01.htm Jesús Cea Avión [EMAIL PROTECTED] http://www.argo.es/~jcea/ ------------------------------------- una-al-día es un servicio de HispaSec (http://www.hispasec.com) Sergio Blanco Cuaresma Registered Linux user #140941 http://come.to/sblanco [EMAIL PROTECTED]