Factibilidad computacional de encontrar 'Buenos enlaces' con el siguiente formato

4

Recientemente me topé con esto y estoy comprobando aquí para ver si lo que estoy proponiendo es realmente viable y puede considerarse una violación de la privacidad.

Por razones obvias, no estoy revelando el sitio web que exhibe esta propiedad

Las URL son del formato:

https://xxxxxxxxyyyyyzzzz/xyz/<6 digit rand>_<17 digit rand>_<10 digit rand>_n.jpg

Y solicitar el enlace de arriba te devolverá una imagen. Ahora, como puede ver, la entropía de las posibles URL es bastante grande. Pero tenga en cuenta que todos son enteros (0-9).

Este sitio web contiene contenidos de millones de personas ;) y supongo que funcionará al menos el 10% de las URL contenidas en estos números aleatorios. Por supuesto, es sólo una conjetura.

Mi pregunta es: ¿es esto factible? ¿Mi reclamo es verdadero? Mi presunción aquí es que estos números aleatorios pueden ser un hash no criptográfico de alguna cadena. No hay manera de confirmar la oración anterior. Por el bien de esta pregunta, asumamos que sí.

Mi código para generar estos enlaces se ve así (solo un fragmento)

first = str(random.randint(100000,999999))
second=str(random.randint(10000,99999))+str(random.randint(10000,99999))+str(random.randint(10000,99999))+str(random.randint(10,99))
third= str(random.randint(10000,99999))+str(random.randint(10000,99999))

test='https://<URL>/'+first+'_'+second+'_'+third+'_n.jpg'
try:
        image=urllib2.urlopen(test)
        print (image.read()).__len__()
except:
        print "fail"

No he intentado ejecutar esto por más de decenas de solicitudes por temor a que mi IP sea bloqueada por el servidor por solicitudes excesivas. Yo tampoco tengo la intención de hacerlo. Solo quiero aclarar si mi entendimiento es correcto.

P.S: No soy un desarrollador de Python, así que perdona si mi código es feo (las sugerencias serán aceptadas para mejorar)

    
pregunta sudhacker 24.09.2012 - 03:32
fuente

1 respuesta

5

No, creo que tus matemáticas están apagadas. No creo que esto sea realmente una vulnerabilidad real. Si su descripción del formato es precisa y los números generados a través de una fuente verdaderamente aleatoria, entonces no, no creo que sea tan fácil tropezar con las imágenes de otras personas.

Trabajemos las matemáticas. Hay 33 dígitos aleatorios en la URL. Eso significa que hay 10 33 URL posibles. Supongamos que este sitio web tiene mil millones de usuarios (10 9 ), y cada usuario publica 1000 imágenes (10 3 ). (Estoy siendo generoso aquí). Luego, se publicarán 10 12 fotos en total. Esto significa que el acceso a una URL elegida al azar tendría un 10 12 / 10 33 = 1 en 10 21 .

En otras palabras, tendrá que probar aproximadamente mil millones de billones (10 21 ) veces antes de tropezar con una sola imagen de otra persona. Eso tomaría aproximadamente, oh, para siempre.

¿Quieres una estimación más precisa? OK, OK, aquí va. Supongamos que puede realizar 1000 solicitudes por segundo (probablemente una estimación generosa, pero vamos a ejecutar con él). Luego tardarías 10 18 segundos antes de que te tropieces con la primera imagen, con solo adivinar al azar. Hay aproximadamente pi veces 10 7 segundos en un año, por lo que le llevará aproximadamente 3 * 10 10 años antes de su primer éxito. Eso es más largo que la vida conocida del universo. (En el momento en que te topes con tu primera imagen, todos los que se muestran en la imagen habrán muerto hace mucho tiempo, y ya no les importará).

Entonces, no, este ataque no es una amenaza. Mientras los números aleatorios en la URL sean verdaderamente aleatorios e impredecibles, este esquema es seguro.

El mayor riesgo se presenta si los números no son realmente criptográficamente aleatorios. Si los números se generan utilizando un generador de números pseudoaleatorios sin criptografía, o mediante alguna otra secuencia predecible, el esquema podría ser vulnerable.

Irónicamente, su código de ejemplo sería un buen ejemplo de cómo no hacerlo. Usaste el generador random incorporado de Python. Eso no es criptográfico, por lo que es probable que su salida sea predecible. La seguridad es, en el mejor de los casos, tan buena como la cantidad de entropía en la semilla al generador pseudoaleatorio. Peor aún, con muchos de estos generadores de números pseudoaleatorios, si observa algunas salidas del generador, puede predecir todas las salidas siguientes, lo que sería mortal para la seguridad de tal esquema de alojamiento de imágenes.

¿Está su sitio web utilizando un generador de números pseudoaleatorios vulnerables? Si saben lo que están haciendo, espero que no. Sin embargo, es probable que no tenga una buena forma de saberlo con seguridad desde el exterior.

Para obtener más información sobre el tema, me gustaría referirlo a dos recursos: primero, Asegúrese de que siembre al azar generadores de números con suficiente entropía ; y segundo, esta caricatura de Dilbert:

    
respondido por el D.W. 24.09.2012 - 03:41
fuente

Lea otras preguntas en las etiquetas