¿Cómo evaluar el nivel de seguridad de la generación de ID de sesión?

3

Durante unas pocas semanas observamos una colisión en la generación de ID de sesión, lo que resultó en que dos operadores se conectaron de forma independiente a una aplicación web de prueba que compartía la misma sesión. Investigamos el problema y ejercitamos la generación de ID de sesión para generar entre 500 000 y 1 000 000 ID de sesión con varias configuraciones de generación. Algunas configuraciones son deliberadamente malas, para obtener algunas referencias de valores incorrectos . El resultado de este experimento es de 5 archivos con ID de sesión (cadenas hexadecimales), uno en una línea, cada archivo con entre 500 000 y 1 000 000 registros.

¿Qué indicadores numéricos puedo derivar de estas series y usar como un proxy de calidad de seguridad , lo que significa para mí (1) saber cuán improbables son las colisiones y (2) cuán difícil es la predicción de la sesión? / p>     

pregunta Penelopa Koyfman 22.07.2015 - 12:24
fuente

1 respuesta

2

Siguiendo tus comentarios, parece extraño que tengas duplicados si en realidad estás usando /dev/urandom como fuente de entropía e identificadores de sesión suficientemente largos.

  • ¿Está seguro de que PHP está configurado correctamente ? A partir de PHP 5.4.0, los valores predeterminados de PHP ahora están protegidos, pero sucede que algunas configuraciones históricas del servidor se mantienen con el tiempo y disminuyen la seguridad en comparación con los valores predeterminados actuales (PHP puede que en realidad no use /dev/urandom , o puede acumularse en pocas entropías de ella),
  • ¿Está seguro de que el problema no ha sido causado por un problema de terceros, como la corrección de sesión ? Tal error, por ejemplo, podría ocurrir si el ID de sesión se puede pasar como parámetro de URL, y esa URL que contiene la sesión se comparte de alguna manera, ya sea explícitamente (URL enviada de una persona a otra) o de alguna manera inesperada (almacenamiento de contenido en caché en el servidor o un proxy, por ejemplo).

/dev/urandom generalmente se puede considerar como una fuente de entropía confiable. Si por alguna razón aún quiere investigar, puede usar la herramienta ENT para este fin. Puede encontrar un ejemplo de uso en esta página .

Una verificación rápida y sucia de su archivo sería para asegurarse de que no se haya encontrado, al menos, una colisión durante la prueba de generación de ID de sesión:

LC_ALL=C sort /path/to/sample_file | uniq -d

Reemplace /path/to/sample_file con su archivo real que contiene su ID de sesión generada, debería generar todas las entradas duplicadas. En circunstancias normales, por lo tanto, no debería producir ninguna salida.

Probar la calidad de seguridad real de estos archivos sería más complicado. Un ID de sesión no solo debe ser único, sino que no debe ser predecible , esto significa que debe distribuirse de manera equitativa y aleatoria en un espacio de posibilidades suficientemente amplio. Esto puede ser difícil de demostrar correctamente. Como dije en mi comentario, ya ha habido una discusión sobre dicho tema , y aunque algunas herramientas de seguridad de aplicaciones web ofrecen análisis de ID de sesión, la conclusión parece ser que la forma más confiable sigue siendo analizar el código de la aplicación y la configuración en sí misma.

    
respondido por el WhiteWinterWolf 22.07.2015 - 18:09
fuente

Lea otras preguntas en las etiquetas