[LACNIC/Seguridad] Generación de IPv6 Frag ID, etc.

Fernando Gont fgont en si6networks.com
Mar Feb 14 05:36:40 BRST 2012


On 02/13/2012 02:40 PM, Iván Arce wrote:
>> Como te mencionaba, considerando Frag IDs de 32-bits (léase, salteando
>> esto de arriba), mi propuesta era justamente hacer algo tipo rand(). (el
>> resto de esta historia sobre como llegamos a donde llegamos, ya lo
>> hablamos).
> 
> Precisamente, yo preguntaba porque no usar un LCG porque entendí que
> usando random() la probabilidad de que colisiones podía no ser aceptable.

Honestamente, tendría que estudiar y probar mejor a ver cual es la
frecuencia de reuso con un LCG.


> El LCG lo siguen usando para los flowlabels. Sería interesenta evaluar
> las implicacias del use de un LCG global en el caso específico de Frag
> Id de IPv6 (32bits) ya que aca si es legítimo asumir que el atacante M
> puede samplear una sequencia de longitud arbitraria de frag IDs
> generados por A para tratar de determinar los parámetros que se están
> usando.
> 
> La forma actual en que se generan Frag IDs de IPv6 en OpenBSD es:
[....]
> 
> ip6_randomid(void)
> {
> 	return idgen32(&ip6_id_ctx);
> }

Chusmeando un poco, parece que este esquema basicamente lo que hace es
obfuscar una secuencia de valores. O sea, terminas teniendo la misma
frecuencia de reuso que con un contador, con la ventaja de que la
secuencia no es predecible.

El unico "problema" (que seguramente no sea gran cosa), es que al hacer
re-key se podrian dar colisiones.


Voy a intentar jugar un poco con el algoritmo, a ver que onda. -- E
intentar ver si encuentro algo de documentacion, a ver cual es la "onda"
del mismo.


>>> De más esta aclarar que el query IDs de DNS es un campo de 16bits y que
>>> las consideraciones sobre predictibilidad y probabilidad de colisiones
>>> que señalás eran completamente aplicables en aquel caso.
>>
>> Se me ocurre que en el caso del query ID, es *algo* menos problemático
>> -- en el caso de fragmentación, los fragmentos se almacenan en el queue
>> por hasta 60 segundos.
> 
> Hmm por que sería menos problemático?

Quise decir que las colisiones (accidentales) son mas probables: si se
te pierde un fragmento, el Frag ID correspondiente te queda trasheado
por 60 segundos... por lo que durante 60 segundo no podes reutilizar el
mismo valor. Con el Query ID, en principio, si se perdio el query, ya no
hay "colision". Y si no se perdío, pero igual reutilizaste el mismo
Query ID, solo tenes problemas si hubo reordering.

Saludos,
-- 
Fernando Gont
SI6 Networks
e-mail: fgont en si6networks.com
PGP Fingerprint: 6666 31C6 D484 63B2 8FB1 E3C4 AE25 0D55 1D4E 7492






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