Prevención de bloqueo masivo de cuentas usando tokens CSRF

1

Actualmente estoy trabajando para reducir el riesgo de un bloqueo masivo de cuentas en un sitio que (desafortunadamente) emite identificaciones de usuario numéricas y secuenciales. Cambiar la estructura del ID de usuario es no una opción en este punto.

He visto algunas opciones (CAPTCHA, Restricciones en los intentos de inicio de sesión por IP). Una de las cosas en las que estoy pensando es en el uso de un token anti-CSRF en la página de inicio de sesión, que requiere que un atacante cargue la página de inicio de sesión (y obtenga el token) antes de cualquier intento de inicio de sesión. Probablemente, esto se combinaría con un retraso antes de que se aceptara el token (varios segundos, el tiempo necesario para que un usuario normal ingrese los detalles de inicio de sesión).

Esto no evitaría el bloqueo, pero ralentizaría la tasa de intentos y aumentaría ligeramente la complejidad de realizar el bloqueo. ¿Alguien ha visto esto usado antes? ¿Realmente funcionaría?

    
pregunta bdg 19.06.2012 - 06:29
fuente

3 respuestas

2

Personalmente nunca vi implementado algo así, pero ¿por qué no configuras un inicio de sesión fallido que aumenta el tiempo?

Por ejemplo, después de tres inicios de sesión fallidos, bloquea el inicio de sesión para esta cuenta durante, por ejemplo, 30 segundos. Después de los años 30, si el cuarto inicio de sesión aún no tiene éxito, deténgalo durante 1 minuto, luego 5 minutos y aumente más y más.

Esto no afectará a sus usuarios reales (generalmente no falla 3 veces si recuerda su contraseña, y si no lo hace, pasa al proceso "Perdí mi contraseña"), y los robots dejarán de usar un ataque de fuerza bruta.

Ahora, la idea de CSRF es interesante para obligar a su usuario a obtener el token, pero si construyo un robot, todavía puedo simular una solicitud GET a la página de inicio de sesión, analizar el HTML y obtener el token, para luego usarlo para un POST combinado con las credenciales. La única limitación que sugiere aquí es la espera entre el token generado y el formulario enviado (y esto podría perjudicar a sus usuarios que son escritores rápidos).

    
respondido por el Cyril N. 19.06.2012 - 07:15
fuente
2

Los retrasos son una estrategia razonable de limitación de velocidad en la capa de aplicación para proteger las interfaces sensibles a bot en general. Podría usar un token de autorización como parte de esa estrategia, por ejemplo, un token firmado por HMAC que incluya una marca de tiempo de emisión o una marca de tiempo en la sesión si está usando sesiones.

  

requiere que un atacante cargue la página de inicio de sesión (y obtenga el token) antes de cualquier intento de inicio de sesión. Probablemente, esto se combinaría con un retraso antes de que se aceptara el token (varios segundos, el tiempo necesario para que un usuario normal ingrese los detalles de inicio de sesión).

Ese retraso tendría que aumentar a medida que se emitieran más tokens, para actuar de manera efectiva como una cola que no permite más de un intento de inicio de sesión por X segundos para una fuente en particular (normalmente, una única IP o bloque de red). De lo contrario, un atacante podría solicitar cien tokens de autenticación y enviarlos todos a la vez unos segundos más tarde.

Determinar qué es esa X, y monitorear el comportamiento bueno y malo de diferentes fuentes para ajustar esa X para diferentes direcciones (ya sea manualmente o en código), es potencialmente un proceso continuo significativo.

    
respondido por el bobince 19.06.2012 - 13:53
fuente
0

He visto que se utiliza algo similar para evitar el spam de comentarios. Echa un vistazo al cookies para comentarios wordpress plugin si necesitas algo de inspiración. Un complemento bastante útil. Es simple pero muy efectivo. Suena como esencialmente el mismo principio que su idea.

El concepto básico es proporcionar un valor difícil de predecir a través de un formulario / cookie y esperar volver a verlo dentro de una restricción de tiempo para evitar ataques automatizados de bots.

    
respondido por el Yoav Aner 19.06.2012 - 09:05
fuente

Lea otras preguntas en las etiquetas