🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónDetectar el azar débil en código y configuración
5 tareas · 45 min · Principiante
Los fallos de azar casi nunca se ven al usar el sistema: el token «parece» aleatorio. Se ven leyendo el código y la configuración. Esta sala es una revisión de código en pequeño, sobre cuatro archivos de Talanquera Entradas en cuatro lenguajes y la salida de un analizador estático. Aprendes dos cosas: qué patrones buscar, y cómo triar los avisos de la herramienta, porque una herramienta avisa de todo uso de un generador de propósito general y decidir cuáles importan es tu trabajo. Todo se lee; nada se ejecuta.
Objetivo de la sala
Los fallos de azar casi nunca se ven al usar el sistema: el token «parece» aleatorio. Se ven leyendo el código y la configuración. Esta sala es una revisión de código en pequeño, sobre cuatro archivos de Talanquera Entradas en cuatro lenguajes y la salida de un analizador estático. Aprendes dos cosas: qué patrones buscar, y cómo triar los avisos de la herramienta, porque una herramienta avisa de todo uso de un generador de propósito general y decidir cuáles importan es tu trabajo. Todo se lee; nada se ejecuta.Los patrones que buscar son pocos y se repiten en todos los lenguajes. Las llamadas a las funciones de azar de propósito general de cada lenguaje, cuando su valor se usa como token, clave, nonce, sal o código. Los generadores que se crean con una semilla explícita, sobre todo si sale del reloj o es una constante. Las librerías de «identificadores únicos» cuyo único requisito es no repetirse, no ser impredecibles. Y las cadenas armadas a mano, con hashes de datos conocidos.
El método es el mismo de la tarea de inventario: no se busca solo el nombre de la función, se mira para qué se usa el valor que devuelve. Un analizador estático sirve para encontrar las llamadas; el uso lo decide la persona que revisa.
Responde para continuar
Al revisar el código de una aplicación, ¿por dónde se empieza a buscar azar débil?
Ver pista de ayuda
Importa lo que hace el valor que devuelve la función, no el tamaño del archivo ni lo que diga un comentario.
En los lenguajes que lo permiten, un generador se puede crear con una semilla explícita. Cuando esa semilla es la hora actual en milisegundos, el generador produce una serie determinada por un instante, y los milisegundos de un día tienen un espacio de posibilidades pequeño para un secreto. Es el fallo de la sala de semillas, visto ahora en el código en lugar de en la configuración.
En el código de la carpeta de revisión hay un archivo que crea su generador de esa manera para fabricar un secreto que se imprime en un boleto.
Responde para continuar
Escribe el nombre del archivo en el que el generador se crea con una semilla tomada del reloj.
Ver pista de ayuda
Busca la línea que construye el generador y mira con qué argumento se le da la semilla.
Un código de recuperación de contraseña que llega por SMS es un secreto de un solo uso: quien lo conozca antes de que se use puede reclamar la cuenta. Si lo emite un generador de propósito general, su siguiente valor se puede deducir de los anteriores. Distinto es el valor anti-falsificación de un formulario, que debe ser igual de impredecible y que, en este mismo archivo, sí se pide bien.
Lee el archivo de PHP: contiene dos usos del azar, uno correcto y uno flojo. Localiza la función que emite el código de recuperación.
Responde para continuar
Escribe el nombre de la función de azar que genera el código de recuperación en el archivo de PHP.
Ver pista de ayuda
Una de las dos funciones usa un generador de propósito general; la otra usa random_bytes.
Un analizador estático sobreavisa: marca todo uso de un generador de propósito general sin saber qué hace el valor. Una persona revisora debe separar los verdaderos positivos (el valor protege algo) de los falsos positivos (no protege nada), y dejar constancia de por qué descarta cada aviso. Sin esa nota, el aviso vuelve en la siguiente revisión, o peor, el equipo aprende a ignorar todos.
En el archivo de Python hay un aviso del segundo tipo, junto a un uso correcto de la librería de secretos.
Responde para continuar
El analizador avisa de que color_de_insignia usa un generador de propósito general. ¿Qué haces con el aviso?
Ver pista de ayuda
Pregunta qué se pierde si alguien adivina el color de una insignia.
El token que identifica el dispositivo de un usuario sale de Math.random() convertido a texto. Es el caso más repetido en aplicaciones web: el valor «parece» aleatorio al mirarlo, y el generador de propósito general de JavaScript no está diseñado para uso criptográfico. El lenguaje trae dos fuentes criptográficas, según dónde corra el código: crypto.getRandomValues en el navegador y crypto.randomBytes en Node.js. El arreglo es sustituir la llamada, no alargar el texto resultante ni pasarlo por un hash.
Responde para continuar
¿Cuál es el arreglo para el token de dispositivo que sale de Math.random()?
Ver pista de ayuda
El defecto está en el generador, no en la longitud ni en cómo se muestra el resultado.
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
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.