Tengo la contraseña "data / hash", ¿y luego qué?

0

En teoría, las contraseñas no deben almacenarse en texto sin formato y también se debe evitar almacenarlas como un simple hash, algo como md5(password) .

Se recomienda almacenar la salida de la función que utiliza algoritmos / cifrados como bcrypt , script , PBKDF , pasado a la contraseña con un poco de sal.

Pero una vez que la base de datos / archivo con contraseñas se ha comprometido, por ejemplo, un archivo que contiene datos como este:

id, password

12, $2a$10$zkeaH43RM9Ep5.KPcyXWYuCaVSbKmmXaKLztvCa0G867ItEpvx4fa  (bcrypt)

12, 05ffaebcca41770af425d4ba9b4e7bcdff532237dca931c192a36d94db7307d4 (scrypt)

12, JDJhJDEwJHprZWFINDNSTTlFcDUuS1BjeVhXWXVDYVZTYkttbVhhS0x6dHZDYTBHODY3SXRFcHZ4NGZh (base64 ofuscation bcrypt)

Como atacante, desde el primer vistazo, puedo ver que en el primer caso se usó bcrypt con un costo de 10, para el segundo tengo solo una longitud de 64 pulgadas donde probablemente se incluye sal, el tercero termina siendo la base64 solo ofuscando bcrypt

base64($2a$10$zkeaH43RM9Ep5.KPcyXWYuCaVSbKmmXaKLztvCa0G867ItEpvx4fa) 

sólo para mencionar algunos ejemplos aleatorios.

Entonces, una vez que se haya comprometido esta información, además de seguir un procedimiento para cambiar la contraseña, etc., ¿cuál podría ser la mejor manera de almacenar las contraseñas que al menos podrían retrasar más el proceso de encontrar cómo se generó y tener más tiempo para permitir? todos los usuarios para restablecer / cambiar las contraseñas.

O preguntando de forma diferente, mientras tiene este tipo de datos, ¿qué suele hacer un atacante? y en base a esto, se podría mejorar para que sea más difícil encontrar un patrón, comenzar a descifrar las contraseñas, etc.

    
pregunta nbari 04.08.2017 - 09:42
fuente

2 respuestas

1

Aumente el valor de trabajo, que de manera exponencial hará que la vida de los hackers sea más difícil. Utilice un salt aleatorio para cada contraseña, lo que hará que un pirata informático necesite generar diccionarios de ataque únicos para cada usuario. Use un pimiento codificado en su aplicación para agregar un elemento oculto a sus hashes para que el hacker se vea obligado a ejercer fuerza bruta.

Cualquier intento de ocultar el método que usaste para descifrar la contraseña es seguridad por ofuscación, que en sí no es realmente seguridad.

Hay varios escenarios que pueden ocurrir si un atacante obtiene acceso a tu base de datos, repasaré algunos de ellos.

No hay sal / la misma sal para cada entrada. En este escenario, el atacante puede descifrar todas las contraseñas de sus usuarios de una sola vez. Dado que la única variación de la que tengo que preocuparme es la contraseña en sí misma, puedo hacer hash una vez y comparar con todos los 10,000 usuarios.

Sal única para cada entrada, sal agregada al hash. En este escenario, solo puedo descifrar las contraseñas de los usuarios de una en una. Digamos que de sus 10,000 usuarios, 300 tenían la contraseña "contraseña". En lugar de que yo descubriera que 300 de sus usuarios tenían esa contraseña a la vez, tendría que volver a usar la sal de los usuarios 10,000 veces para verificarlos todos.

Sal única + pimienta codificada. Este escenario depende de la profundidad de la intrusión que sufras. Si obtienen acceso a los servidores de su aplicación, podrían olfatear el pimiento. Sin embargo, si no, en lugar de que yo tenga que adivinar la contraseña, también tengo que adivinar la pimienta. El único problema con eso es que no tengo forma de saber si estoy cerca. Si eligiera utilizar un pimiento de 128 caracteres de longitud, generado inicialmente mediante una biblioteca criptográficamente segura, tendría que usar la fuerza bruta que, además de la contraseña, prácticamente destruiría los ataques basados en diccionarios.

Nuestro objetivo es convertirlo en un infierno para que un atacante descifre las contraseñas, haciendo las cosas de tal manera que el atacante no tenga más remedio que sentarse y esperar una eternidad.

En una nota al margen, si alguna vez se comprometió su base de datos de contraseñas, debe marcar de inmediato todas las cuentas y, en el próximo inicio de sesión, solicitar al usuario que siga el procedimiento de restablecimiento de la contraseña, no el procedimiento de cambio de contraseña. Esto le permite verificar la identidad de los usuarios utilizando un canal lateral para garantizar la autenticidad de la solicitud.

    
respondido por el zzarzzur 04.08.2017 - 15:21
fuente
0

Si quiere tiempo, use sal y un contador de iteración alta para que el cálculo sea costoso. Opcionalmente, también un pimiento que se almacena en el lado del servidor, posiblemente fuera de la raíz de la aplicación y solicítelo cuando sea necesario. Depende del tipo de aplicación que tengas, pero para los sitios web es importante hacerlo en caso de que PHP deje de analizar el código.

En tal caso, un atacante también obtendría la fórmula sobre cómo se genera el hash en primer lugar. Pero aun faltaría la pimienta. Por otra parte, si el servidor está dañado, el atacante obtiene ambos, así como el acceso a su base de datos.

A partir de este momento, estás en serios problemas porque el atacante ahora sabe cómo generar el hash, sabe cuáles son los valores de sal y pimienta, lo que significa que puede cambiar temporalmente el hash de contraseña a su contraseña favorita y acceder al cuenta de su propia elección.

También puede decidir escanear o exportar toda su base de datos, lo que significa robar su información de la fuente. Depende del tamaño de su base de datos y si su aplicación usa solo una base de datos.

Básicamente, el descifrado de contraseñas es el último en anticipación de que muchos usuarios siguen usando las mismas contraseñas para varias cuentas. Lo que nos lleva de nuevo a la respuesta original. Use sal única y rondas de iteración de 5k a 10k para hacer que el cálculo de los hash sea costoso. Puede subir hasta un millón, pero cualquier valor superior a 10k podría causar problemas de rendimiento. De esta manera, podría llevar siglos descifrar contraseñas razonables. Es por eso que algunos sitios web exigen el uso de mayúsculas, números y caracteres especiales ... simplemente para aumentar el char char.

En una nota al margen, en lugar de ir a tales longitudes, un atacante preferiría extraer su contraseña simple a la cuenta que quiera con un keylogger o un ataque de redirección de DNS a un sitio falso. Perseguirá su dispositivo en lugar de intentar romper el servidor. Si eso es lo mismo, entonces proteja mejor su servidor, lo que significa protegerlo de la violación tanto remota como física.

    
respondido por el user633551 04.08.2017 - 17:57
fuente

Lea otras preguntas en las etiquetas