Ralentizando los ataques de contraseña repetidos

4

He estado leyendo sugerencias para usar fórmulas que consumen mucho tiempo para verificar las contraseñas de los intentos de inicio de sesión, para que los ataques repetidos se desaceleren.

¿No sería suficiente dormir un poco en la función que verifica la contraseña?

Ejemplo simplificado:

function check_password($user) {
  usleep(1000);
  return crypt($_POST["password"], $user->password) == $user->password;
}
    
pregunta forthrin 21.08.2013 - 17:56
fuente

2 respuestas

5

hashing lento está destinado a hacer la tarea más difícil para los atacantes sin conexión , que podrían tomar una copia de la base de datos de contraseñas con hash. Un atacante sin conexión ejecuta la función hash en sus propias máquinas. Un retraso en el servidor solo es bueno contra los atacantes en línea , que "intentan contraseñas" enviando solicitudes al servidor honesto.

En la práctica, desea ambos: algún mecanismo de regulación para bloquear a los atacantes en línea (por ejemplo, un retraso, pero preferiblemente algo más complejo para impedir a los atacantes que intentan muchas contraseñas en muchas cuentas en paralelo), y un hash lento (con sales) como segunda línea de defensa, contra los atacantes que podrían obtener una vista de solo lectura de las contraseñas de hash almacenadas en el servidor.

    
respondido por el Tom Leek 21.08.2013 - 18:01
fuente
1

Para agregar a la excelente respuesta de Tom, lo que puede hacer con un servicio en línea es agregar heurísticas de detección de ataques. Puede decidir que tres intentos fallidos de paasword en un período de 10 minutos resultarán en un bloqueo de 10 minutos, o un correo electrónico de advertencia para el titular de la cuenta. Puede marcar varios intentos de contraseña simultáneos que se originan en más de dos direcciones IP o en más de dos sesiones únicas. Puede modificar la dirección IP de alguien que parece estar demasiado aficionado a probar contraseñas malas. O podrías idear una nueva estrategia inteligente por tu cuenta.

Estar en línea le permite minimizar la disponibilidad de su servicio para ser un oráculo de prueba de contraseña. Es posible que desee implementar más de un simple retraso.

    
respondido por el John Deters 21.08.2013 - 18:20
fuente

Lea otras preguntas en las etiquetas