¿Cuándo no puede usar strcmp?

5

He leído que uno no debería usar strncmp (userSuppliedPassword, origPassword, sizeOfArray) (o String.equals en Java) ya que uno puede usar un ataque de tiempo para adivinar la contraseña. Más bien, uno debería usar una función de comparación segura de cadenas que llevará la misma cantidad de tiempo si la comparación falla o tiene éxito.

Pero como el userSuppliedPassword y el origPassword deben ser codificados (y salados), a menos que uno ya esté haciendo algo estúpido, parece que no hay forma de explotar este ataque.

Entonces, ¿cuándo es verdadera esta recomendación?

    
pregunta time 12.01.2016 - 00:32
fuente

2 respuestas

6

Como dijiste, cuando usas una función de comparación de cadenas que no ha sido diseñada para resistir ataques de temporización, podría explotarse para adivinar la cadena con la que comparas.

La comparación de cadenas no cifradas y no cifradas de hecho filtrará la cadena original, ya sea una contraseña (ya sea almacenada en una base de datos o codificada), una ID de sesión, una dirección de correo electrónico o un token de autenticación multifactor, lo que significa que este ataque es no se limita al sentido común de "contraseñas".

Si las cadenas están encriptadas y el atacante conoce la función de encriptación (con las claves asociadas), entonces podría adivinar la cadena encriptada y luego descifrarla para obtener la cadena original.

Si las cadenas están con hash y el atacante conoce la función de hash (y la sal asociada, si hay alguna), entonces adivinar el hash será más difícil cada byte (debido a el efecto de avalancha ), lo que hace que sea muy difícil adivinar más que los primeros bytes del hash, pero eso puede ser suficiente para fuerza bruta si su cadena original no es suficiente entropía.

Esta recomendación es verdadera cuando se compara cualquier cadena suministrada por el usuario (ya sea que la tenga o no) con cualquier tipo de datos confidenciales (ver más arriba, personalmente considero que cualquier información relacionada con un usuario es confidencial). / p>     

respondido por el Benoit Esnard 12.01.2016 - 13:42
fuente
3

Si bien es cierto en teoría, estos ataques de tiempo no son particularmente relevantes en muchos escenarios prácticos.

  • Es irrelevante para la mayoría de los tipos de escenarios de ataques locales, porque en ese caso generalmente hay mejores vectores de ataque.
  • Es irrelevante para la mayoría de los tipos de escenarios de ataques remotos, porque el cambio de las latencias de la red causa tanta incertidumbre que una diferencia de pocos microsegundos en el tiempo de respuesta no es medible.

Un caso de borde donde los ataques de tiempo pueden importar, es cuando se ataca sistemas de "caja negra" de hardware integrado. Por ejemplo, tarjetas inteligentes o conjuntos de chips de criptografía.

    
respondido por el Philipp 12.01.2016 - 14:00
fuente

Lea otras preguntas en las etiquetas