2010-06-03 16 views
13

Estoy a punto de implementar una API RESTful en nuestro sitio web (basada en los servicios de datos WCF, pero eso probablemente no importe).¿Cómo se evitan los ataques de fuerza bruta contra los servicios de datos RESTful?

Todos los datos ofrecidos a través de esta API pertenecen a ciertos usuarios de mi servidor, por lo que debo asegurarme de que solo esos usuarios tengan acceso a mis recursos. Por este motivo, todas las solicitudes deben realizarse con una combinación de inicio de sesión/contraseña como parte de la solicitud.

¿Cuál es el enfoque recomendado para prevenir ataques de fuerza bruta en este escenario?

Estaba pensando en registrar las solicitudes fallidas denegadas debido a credenciales incorrectas e ignorar las solicitudes que se originan desde la misma IP después de que se ha excedido un determinado umbral de solicitudes fallidas. ¿Es este el enfoque estándar o me falta algo importante?

Respuesta

8

El bloqueo basado en IP es arriesgado debido a la cantidad de puertas de enlace NAT que existen.

Puede ralentizar (tar pit) a un cliente si realiza demasiadas solicitudes rápidamente; es decir, insertar deliberadamente un retraso de un par de segundos antes de responder. Es poco probable que los humanos se quejen, pero has ralentizado a los bots.

+7

Hm, ¿cómo quiere poner CAPTCHA en la API RESTfull? AFAIU no se supone que todos los clientes sean seres humanos. – SergGr

+0

Buen punto, debo haber parpadeado sobre el bit RESTful. Difícil. – crazyscot

+0

Un captcha es lo que estoy usando ahora mismo para mi sitio web habitual. Pero como señaló el principiante de Iphone, esa no es una opción para una api relajante. Sin embargo, el uso de tarot puede ser una buena idea. –

3

Usaría el mismo enfoque que usaría con un sitio web. Lleve un registro de la cantidad de intentos de inicio de sesión fallidos dentro de una ventana determinada - por ejemplo, permita 3 (o 5 o 15) dentro de un lapso razonable, digamos 15 minutos. Si se supera el umbral, bloquee la cuenta y marque la hora en que se produjo el bloqueo. Puede registrar este evento también. Después de que haya pasado otro período adecuado, digamos una hora, desbloquee la cuenta (en el próximo intento de inicio de sesión). Los inicios de sesión exitosos restablecen los contadores y el último tiempo de bloqueo. Tenga en cuenta que nunca intenta iniciar sesión en una cuenta bloqueada, simplemente devuelve el inicio de sesión fallido.

Esto limitará de manera efectiva cualquier ataque de fuerza bruta, haciendo muy improbable que un ataque contra una contraseña razonable tenga éxito. Un atacante que use mis números anteriores solo podrá probar 3 (o 5 o 15) veces por 1.25 horas. Usando tus registros puedes detectar cuándo tal ataque posiblemente ocurra simplemente buscando múltiples bloqueos de la misma cuenta en el mismo día. Dado que su servicio está destinado a ser utilizado por los programas, una vez que el programa que accede al servicio tiene sus credenciales establecidas correctamente, nunca experimentará un error de inicio de sesión a menos que haya un ataque en curso. Esta sería otra indicación de que un ataque podría estar ocurriendo. Una vez que sepa que un ataque está en proceso, puede tomar medidas adicionales para limitar el acceso a las IP infractoras o involucrar a las autoridades, si corresponde, y detener el ataque.

+2

¿No sería eso aún más fácil lanzar ataques de DOS en cuentas de usuario? Por ejemplo, un competidor malintencionado de nuestro sitio web podría bloquear deliberadamente a los usuarios publicando contraseñas incorrectas. Él no tendría acceso a sus cuentas, pero lograría que nuestro sitio web no pareciera confiable. Es por eso que consideré el enfoque basado en IP: un atacante tendría que falsificar la dirección IP del usuario real para bloquearlo. –

+0

@Adrian - sí, pero ese es un tipo diferente de problema. El uso de un enfoque basado en IP para resolverlo puede hacer que su servicio sea poco confiable, ya que es posible que un usuario simplemente olvide actualizar su secuencia de comandos después de un cambio de contraseña.En ese caso, el usuario simplemente puede esperar hasta que haya transcurrido el tiempo de espera y volver a intentarlo sin que usted participe. Utilizando el registro, aún podrá detectar un ataque de DOS y colocar un bloque de IP desde el sitio malévolo y, en este tipo de caso, llamar a las autoridades con seguridad. – tvanfosson

Cuestiones relacionadas