Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 30 de Septiembre de 1.999 - Jueves
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:
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
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS