[LACNIC/Seguridad] Análisis de seguridad del protocolo IP

Fernando Gont fernando en gont.com.ar
Mie Ago 20 18:27:42 BRT 2008


Hola, Roque,

Millones de gracias por tus comentarios. Mis 
respuestas van entre lineas (seguí leyendo)....


>Muy bueno el documento, como comentario general 
>creo que a estas alturas habria que aclarar 
>cuando se refiere a IP, es en general, es sobre IPv4 o IPv6 en particular.

Si, es cierto. Lo arreglaré en la próxima revisión del documento.



>Otro comentario:
>En la sección 3.1, Header dice: in practice 
>different versions of IP are identified by a different “Protocol Type”
>number in the link-layer protocol header. For 
>example, IPv4 datagrams are encapsulated
>in Ethernet frames using a “Protocol Type” field 
>of 0x0800, while IPv6 datagrams are
>encapsulated in Ethernet frames using a 
>“Protocol Type” field of 0x86DD [IANA, 2006a].
>Therefore if an IPv4 module receives a packet, 
>the Version field must be checked to be 4.
>If this check fails the packet should be silently dropped
>
>Eso no es correcto para medios que no son 
>Ethernet. En particular hay otros medios como 
>PPP IPv6 utiliza Ox0057 como Protocol field, y 
>hay otros ejemplos como AAL5, etc. . Creo que 
>debería quedar claro que el caso ethernet es un ejemplo.

La idea acá es que el campo "versión" nunca se 
utiliza para demultiplexar los paquetes IP.

En teoría, todas las versiones de IP se podrían 
identificar con el mismo valor de "Protocol Type" 
en la link layer y entonces todos los paquetes 
correspondientes a las distintas versiones del 
protocolo IP serían procesados por un mismo 
modulo de código ("general" para el protocolo 
IP... sin importar su versión). Luego, en base al 
campo "Version" del header IP, el paquete en 
cuestión se demultiplexaría al modulo de la 
versión particular del protocolo IP (por ej., el 
modulo de IPv4 o el módulo de IPv6).

Sin embargo, debido a que directamente las 
distintas versiones de IP utilizan distintos 
valores para el campo "Protocol Type" de la link 
layer, es como que las distintas versiones del 
protocolo IP se consideran como "distintos 
protocolos". Y no hace falta utilizar el campo 
"Version" del header IP para distinguir de que 
version de IP se trata, ya que el valor del campo 
"Protocol Type" de la link layer indica implicitamente dicha información.

Entonces no hay algo asi como un modulo de codigo 
"general" para lo que es el protocolo IP, sino 
que hay un modulo IPv4 al que se le demultiplexan 
unicamente los paquetes IPv4, y un modulo IPv6 al 
que se le demultiplexan unicamente los paquetes IPv6.

Si el modulo IPv4 encuentra que el campo Version 
de un paquete que está procesando contiene por 
ejemplo el valor "6", entonces quiere decir que 
por ejemplo el campo "Protocol Type" del paquete 
Ethernet indicaba IPv4 (mediante el valor 
0x0800), mientras que el campo Version del IP 
header indica IPv6. Esto es un error, y por ello 
el paquete debería ser descartado.

Lo que vos decís es que el texto parece indicar 
que en la link layer *siempre* se utiliza el valor 0x0800 para indicar IPv4?

Muchas gracias por tu feedback!

Saludos codiales,

--
Fernando Gont
e-mail: fernando en gont.com.ar || fgont en acm.org
PGP Fingerprint: 7809 84F5 322E 45C7 F1C9 3945 96EE A9EF D076 FFF1



------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://mail.lacnic.net/pipermail/seguridad/attachments/20080820/035b3d5f/attachment.html>


Más información sobre la lista de distribución Seguridad