¿Cómo se pueden descifrar nuestras contraseñas tan fácilmente?

9

Estamos guardando la contraseña en una base de datos usando PHP:

return hash('sha256', PASSWORD_SALT . $password);

Recientemente, un (afortunadamente) buen hacker SQL nos inyectó y descifró algunas contraseñas, incluida la del administrador.

La historia no terminó dramática o terriblemente como en las películas de Hollywood, porque tuvo la amabilidad de señalarnos los agujeros. (Le "agradecimos" en consecuencia.)

Ahora que se han reparado los orificios, tememos que pueda haber algunos orificios en otro lugar, ya que la base del código es grande. Las preguntas son:

  • ¿Cómo diablos rompió la contraseña tan rápido (de pocas horas a menos de un día)? PASSWORD_SALT es bastante largo, almacenado en el código fuente y no lo tenía. Además, no se acepta una contraseña en blanco en el código PHP.
  • Suponemos que deberíamos cambiar el hash / cifrado de las contraseñas existentes y futuras. ¿Qué cifrado recomienda para que la contraseña expuesta esté más segura?

Nos dijo que usa algún software y una docena de máquinas de escritorio disponibles para él en su compañía. Dijo que es un experto en seguridad aburrido en una gran empresa, por lo que tiene los medios para hacer cosas.

    
pregunta Phung D. An 20.06.2018 - 15:29
fuente

3 respuestas

16

En primer lugar, lo que llamas PASSWORD_SALT no es realmente una sal. Una sal es diferente para cada contraseña, y se almacena en la base de datos. Lo que tienes es algo que se comparte con todas las contraseñas y se almacena en el código fuente. Eso se llama comúnmente una pimienta.

Entonces, ¿cómo hizo el atacante para descifrar tus contraseñas tan rápido, sin saber la pimienta? Probablemente creó un nuevo usuario para sí mismo, por lo que tiene un usuario para el que conoce la contraseña. Luego puede intentar forzar la fuerza bruta sobre ese usuario, ya que sabe a qué contraseña debe concatenarla. La clave aquí es que no tiene que descifrar el pimiento y una contraseña al mismo tiempo. Primero puede romper la pimienta y luego descifrar las contraseñas. Esto es mucho, mucho más simple.

Una sola iteración de SHA-256 no es un buen algoritmo de hashing de contraseña. Es manera de ayunar. De acuerdo con estos puntos de referencia para una configuración de 8x Nvidia GTX 1080 , puedes probar alrededor de 2 billones de hashes por segundo. Si le damos al atacante 12 horas, eso es casi 10 hash 14 . En promedio, eso es suficiente para romper un pimiento con log 2 (10 14 ) - 1 = 45 bits de entropía. Eso corresponde, por ejemplo, a 10 letras minúsculas aleatorias.

Una vez que tienes el pimiento, puedes comenzar a descifrar contraseñas. Como es probable que tengan una entropía más baja que la pimienta, debería ser mucho más rápido.

Para saber cómo hacer correctamente el hashing de contraseñas, consulte esta pregunta .

    
respondido por el Anders 20.06.2018 - 22:38
fuente
2
  

¿Cómo diablos rompió la contraseña tan rápido (de pocas horas a menos de un día), PASSWORD_SALT es bastante largo, está almacenado en el código fuente y él no lo tenía? Además, pwd en blanco no es aceptado en el código php

Bueno, estoy seguro de que usó una o más computadoras con GPU. Tal vez esté ejecutando múltiples GPU en modo CLI. Lo que eso significa es que múltiples GPU como la GTX1080 realizan la misma tarea en una operación. En este caso, las cadenas de hash en SHA256 de una lista de contraseñas y compárelas con las cadenas de contraseña de hash que encontró en su base de datos.

Para darle un ejemplo de cuántas contraseñas puede el hash GTX1070 y comparar en un segundo, lo referiré a este blog que encontré: enlace

En este ejemplo, el probador usó EVGA GeForce GTX 1070 SC GAMING ACX 3.0 en un sistema Windows 7 . La GPU logró "crackear" 2117,4 MH / s para el algoritmo SHA256.

Luego, trata de descifrar al menos algunas contraseñas, las compara entre sí y puede determinar la sal. Con el conocimiento de cómo se ve la sal, creó una nueva lista de contraseñas. A partir de la sal, seguido de su lista de contraseñas normales.

  

Suponemos que deberíamos cambiar el hash / cifrado de las contraseñas existentes y futuras. ¿Qué encriptación recomienda para que el pwd expuesto esté más seguro?

Cuando un hacker puede obtener contraseñas con hash, es cuestión de tiempo, dependiendo del algoritmo de hash, cuánto tiempo lleva descifrar la mayoría de las contraseñas. No quiero recomendar un algoritmo, ya que depende en gran medida de su capacidad de cálculo y el tiempo de carga. Pero si desea obtener una idea de qué algoritmo es más fuerte que el SHA256, eche un vistazo a los puntos de referencia para el craqueo de contraseñas: enlace p>

Polys de contraseñas más firmes donde otra forma de retrasar un proceso de craqueo o hacer que sea imposible que el hacker adivine la contraseña correcta.

    
respondido por el ZiY5kE 20.06.2018 - 17:00
fuente
1

Soy escéptico de que su descripción de las circunstancias sea precisa y confiable. En particular, me resulta muy difícil creer este bit:

  

PASSWORD_SALT es bastante largo, almacenado en el código fuente y no lo tenía.

Leí esto como una afirmación de que PASSWORD_SALT era secreto e imposible para que un atacante adivine en un tiempo práctico (en términos técnicos, que tiene una alta entropía). Pero si concediéramos esta reclamación tendríamos que concluir que el atacante derrotó a resistencia de preimagen de SHA-256, que, dado que no es más que un valor de salida aleatorio efectivo para la función hash, pudieron encontrar una entrada que produce esa salida . Y no solo una entrada de este tipo, una que simplemente tiene el prefijo de tu PASSWORD_SALT supuestamente secreta, larga e impredecible.

Pero, por supuesto, su hacker no descubrió una ruptura catastrófica en SHA-256. Así que creo que su comprensión de las circunstancias tiene que ser inexacta. O bien:

  1. El pirata informático realmente logró ver su código y aprendió el valor de PASSWORD_SALT;
  2. Su valor para PASSWORD_SALT en realidad es fácil de adivinar aplicando los mismos métodos que se aplican normalmente para descifrar contraseñas. La sugerencia de Anders de que el atacante puede haber creado una cuenta con una contraseña conocida es un método plausible para hacerlo: descifrar una sal de baja entropía dado el conocimiento de la contraseña es el mismo problema que descifrar una contraseña de baja entropía dado el conocimiento de la contraseña. sal.
  

Suponemos que deberíamos cambiar el hash / cifrado de las contraseñas existentes y futuras. ¿Qué cifrado recomienda para que la contraseña expuesta esté más segura?

Si está utilizando PHP, las versiones recientes tienen excelente funcionalidad de almacenamiento de contraseña incorporada .

    
respondido por el Luis Casillas 21.06.2018 - 00:03
fuente

Lea otras preguntas en las etiquetas