[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