¿Cómo podemos proteger las API de registro del registro de fuerza bruta?

5

Esta es una pregunta general, pero se debe a una API bastante abierta que tengo para un servicio de almacenamiento de archivos que necesita tener su puerta frontal mejor cerrada.

Tenemos una API como POST '/signup' que solo toma un nombre de usuario y contraseña y crea un usuario. Es totalmente posible que alguien escriba una secuencia de comandos muy sencilla para llamar a /signup con cada combinación de letras que se ajuste a nuestras reglas de nombre de usuario y nos bloquee de manera efectiva de nuevos registros.

No he encontrado una enumeración concisa de todos los posibles trucos de seguridad de registro, por lo que los comenzaré ahora y pediré a alguien que contribuya con lo que omití u otros detalles de implementación en un elemento en particular.

  • Limitación de IP: para cada registro, registre la dirección IP y compárela con una tabla de IP de registro reciente para garantizar la cantidad de registros y el tiempo desde el último registro en este IP no es sospechoso. **

  • Otro inicio de sesión autorizado: utilice el correo electrónico verificado, el número de teléfono o los inicios de sesión de OAuth de terceros

  • Verificación humana: haga que los usuarios completen un Captcha o alguna forma de validación que sea demasiado costosa computacionalmente para que una secuencia de comandos la administre

** La limitación de IP parece ser la única opción que no afectará necesariamente la experiencia de registro del cliente, aunque a costa de implementar un nuevo subsistema para organizar el almacenamiento y la validación de las IP (¿Existen servicios de terceros para esto?) . Tampoco protege contra el caso extremo en que una red de atacantes (o atacantes que pueden cambiar la IP pública) distribuye el ataque a través de N IPs para hacer N nombres de usuarios.

    
pregunta user 30.03.2016 - 23:21
fuente

2 respuestas

2

Puedes usar una herramienta como Fail2Ban contra los registros de la API para bloquear una IP durante 5 minutos (o lo que quieras) después de 3 (o cualquier número) de intentos de creación de cuentas.

enlace

También sería conveniente conocer algunas solicitudes de API comunes que se realizan por intentos de fuerza bruta que no existen en su sitio y automáticamente incluir en la lista negra las IP que realizan esas solicitudes (al menos durante 30 minutos aproximadamente).

La lista negra en la capa de IP basada en activadores bien establecidos es una forma de bajo costo de la CPU para hacer frente a los intentos de la Fuerza Bruta. También es aconsejable incluir en la lista blanca una buena IP conocida en su infraestructura cuando haga esto.

    
respondido por el Trey Blalock 30.03.2016 - 23:56
fuente
2

En primer lugar, si estamos hablando de un sitio web, la idea de tener una API pública que se utiliza para crear usuarios me parece extraña. Por lo general, la persona que quiere una cuenta crea manualmente una cuenta, tal vez mediante una página web, y tal vez con un captcha. Las ideas de API y captcha realmente no van bien juntas, ya que las Aplicaciones llaman a las API (por lo tanto, la A en API), y los captchas están diseñados para evitar que las aplicaciones los resuelvan.

Si realmente necesita tener un método no manual para crear usuarios (exponiendo así la funcionalidad en la API), podría resolver su problema al tener una API semi-pública en su lugar. Deberá requerir que los desarrolladores que planean consumir su API se registren para recibir una clave de API que sea exclusiva de ese usuario registrado. Cualquier llamada a la API que realice acciones de escritura (como la creación de un usuario) deberá proporcionar una clave válida. Ahora puede hacer un seguimiento de todo lo que se hace y si ve que alguien está abusando de su sistema, simplemente puede apagarlo e incluso deshacer el abuso si lo desea.

Un escenario común en el que puede ser necesario tener una API para crear usuarios es una aplicación móvil. En este caso, puede intentar que la API sea semi-pública generando un token de API por cada aplicación móvil instalada. El token se pasa a la aplicación a través de un cifrado que solo la aplicación puede descifrar, y ese token solo se puede usar para crear un cierto número de cuentas de usuario (1 o muchos, sin embargo, tiene sentido). Esto no es perfecto, ya que, en teoría, alguien podría descompilar la aplicación e intentar extraer las claves de cifrado, y si lo hicieran, podrían incorporar todo el proceso de reconocimiento en su script, pero al menos debería ralentizarlas.

Por supuesto, todavía puede (y probablemente debería) agregar reglas de firewall también.

    
respondido por el TTT 30.03.2016 - 23:56
fuente

Lea otras preguntas en las etiquetas