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]

Responder a