Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Aleatoriedad segura para tokens e identificadores

5 tareas · 40 min · Principiante

Casi toda aplicación fabrica valores que nadie escoge: el enlace de un documento, una clave para integrarse, una invitación, el nombre de un archivo temporal. Algunos son simples etiquetas; otros, si alguien los adivina, le abren la puerta. La revisión de código empieza por separar los dos grupos y mirar de dónde sale cada valor. Nómina Hatogrande, un portal de nómina electrónica para pymes, te entrega el inventario de sus valores al azar y el código que los produce.

0 de 5 · 0%

Objetivo de la sala

Casi toda aplicación fabrica valores que nadie escoge: el enlace de un documento, una clave para integrarse, una invitación, el nombre de un archivo temporal. Algunos son simples etiquetas; otros, si alguien los adivina, le abren la puerta. La revisión de código empieza por separar los dos grupos y mirar de dónde sale cada valor. Nómina Hatogrande, un portal de nómina electrónica para pymes, te entrega el inventario de sus valores al azar y el código que los produce.

Un valor puede ser único —no se repite nunca— y aun así ser fácil de adivinar. Un contador es único; la hora del servidor con microsegundos casi siempre lo es. Ninguno de los dos sirve como secreto, porque quien sabe cuándo se generó el valor puede reconstruirlo o acotarlo a unos pocos miles de candidatos.

Pasar ese valor por una función de resumen no cambia nada. Un resumen es determinista: la misma entrada da siempre la misma salida, y una salida de 32 caracteres hexadecimales no tiene más incertidumbre que la entrada de la que salió. Si la entrada era la hora, quien calcula el resumen de cada hora probable obtiene los mismos candidatos que el servidor. El tamaño de la salida impresiona en una revisión rápida, pero la incertidumbre se mide en el origen, no en la forma final.

Responde para continuar

Un identificador se calcula como el resumen de la hora del servidor con microsegundos. ¿Cuánta incertidumbre tiene para quien conoce el día y la hora aproximada de su creación?

Ver pista de ayuda

Piensa en cuántas entradas distintas tendría que probar alguien que sabe en qué minuto se generó.

Los lenguajes ofrecen dos clases de generadores. Los de propósito general son rápidos y sirven para simulaciones, juegos o decoración, pero no se diseñaron para resistir a quien observa sus salidas o conoce su estado. Los criptográficos toman su entropía del sistema operativo y están hechos para secretos. Algunas funciones que suenan aleatorias ni siquiera son generadores: devuelven un valor derivado de la hora y su propia documentación advierte que no sirven para nada que deba ser imposible de adivinar.

Abre el laboratorio y lee EnlaceDesprendible.php. El enlace llega por correo y descarga el desprendible de pago sin pedir sesión.

Responde para continuar

¿Qué función de PHP produce el valor que luego se pasa por el resumen para formar el identificador del enlace? Escríbela sin paréntesis.

Ver pista de ayuda

Mira la línea anterior al insert y lee lo que hay dentro de md5.

No todo valor al azar es un secreto, y marcarlos todos como hallazgo llena el informe de ruido. La pregunta que decide es una sola: ¿alguien obtiene acceso, o ve algo que no debería, si adivina este valor? Si la respuesta es sí, el valor tiene que salir de un generador criptográfico y tener longitud suficiente. Si es no, cualquier generador vale.

Lee inventario-aleatorios.txt y, para cada fila, cruza la última columna con la forma en que se genera el valor. Si dudas sobre alguna función, abre su archivo.

Responde para continuar

De los valores del inventario que bastan para entrar o ver algo, ¿cuántos no salen de un generador criptográfico?

Ver pista de ayuda

Barajar una cadena con la función estándar del lenguaje tampoco usa un generador criptográfico.

El escáner de código marcó dos filas del inventario por usar un generador de propósito general, y el equipo quiere cambiarlas para que no vuelvan a salir. Un escáner señala patrones; quien revisa decide si el patrón es un riesgo en ese contexto. Lee ReferenciaNomina.php y la fila A-04.

Responde para continuar

¿Cómo debe quedar en el informe la referencia que se imprime en la liquidación?

Ver pista de ayuda

Aplica la pregunta de la tarea anterior a esta fila concreta.

Cambiar la línea que genera el enlace corrige los enlaces futuros, pero no los que ya salieron. Según las notas del equipo, hay decenas de miles vigentes con un mes de vida, y cada uno sigue siendo tan predecible como el día en que se creó. Un arreglo completo cubre las dos cosas: lo que se emitirá y lo que ya está en circulación. MITRE clasifica este tipo de fallo como CWE-338, uso de un generador pseudoaleatorio criptográficamente débil, y como CWE-330 cuando la debilidad está en el origen del valor en general.

Responde para continuar

¿Qué plan corrige el enlace del desprendible?

Ver pista de ayuda

Un dato más que el atacante podría conocer no añade incertidumbre, y alargar la salida tampoco.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad