¿Cómo identificar de forma única a los usuarios con la misma dirección IP externa?

27

He creado un módulo de inicio de sesión en mi sitio web. Pude lidiar con simples ataques de fuerza bruta ya que puedo identificar al usuario según el nombre de usuario / correo electrónico y acelerar su inicio de sesión en función de los intentos fallidos de inicio de sesión por cuenta de usuario.

Pero cuando se trata de ataques de fuerza bruta enumerados por el usuario (a.k.a. Invertir ataques de fuerza bruta), identificar al usuario se vuelve bastante difícil. La limitación del inicio de sesión en función de los intentos fallidos por dirección IP puede no funcionar bien y molestar a los usuarios conectados a Internet a través de una red local, ya que tendrán la misma dirección IP externa, ya que podrían enfrentar la aceleración debido a los intentos fallidos realizados por otra persona en la red.

¿Hay una manera de identificar de forma exclusiva a dichos usuarios?

    
pregunta ashu 10.02.2015 - 09:06
fuente

5 respuestas

36
  

¿Cómo identificar de forma única a los usuarios con la misma dirección IP externa?   ¿Hay alguna forma de identificar de forma exclusiva a dichos usuarios?

Sí, hay muchas maneras:

  • Cookies
  • Evercookies (código JavaScript que utiliza muchas técnicas diferentes para almacenar información de identificación, entre ellas las cookies flash, las diversas opciones de almacenamiento HTML5, los navegadores visitaron el historial de enlaces, etc)
  • Identificación del dispositivo: use el encabezado HTTP (principalmente el Agente de usuario, pero los otros encabezados y su orden también pueden ayudar)
  • Toma de huellas dactilares del dispositivo con JavaScript: con JavaScript, puede obtener mucha información, como la resolución de la pantalla, la zona horaria, los complementos, las fuentes del sistema, etc.
  • Comportamiento: qué tan rápido llenan los usuarios los formularios, dónde hacen clic en un botón, etc.

Pero la mayoría de estos no son útiles para defenderse de los ataques de fuerza bruta, ya que el programa que los realiza probablemente no aceptará cookies ni ejecutará JavaScript.

En tu caso, puedes intentar:

  • encabezado HTTP: esto podría ser suficiente para diferenciar entre usuarios que usan la misma dirección IP (por supuesto, un atacante puede cambiarlos al azar, pero supongo que la mayoría actualmente no).
  • Limitación de la luz: no tiene que bloquear las direcciones IP, solo puede ralentizar el proceso de inicio de sesión. De esa manera, el forzamiento de la fuerza bruta se vuelve mucho menos factible, pero los usuarios reales que usan la misma dirección IP todavía pueden iniciar sesión.
  • CAPTCHAs : molestarán a los usuarios legítimos, pero esperamos que no muchos usuarios utilicen realmente una dirección IP desde donde se originan los ataques de fuerza bruta (por supuesto, hay herramientas para resolver los CAPTCHA automáticamente, pero aún es más difícil que ningún CAPTCHA).
  • Puede requerir que un usuario acepte cookies y envíe información de identificación antes de poder iniciar sesión (como la resolución de la pantalla, la zona horaria, etc.). Por supuesto, un atacante también puede hacer esto, pero no creo que ninguna de las herramientas de fuerza bruta actualmente existentes pueda hacerlo, por lo que tendrían que escribir un script personalizado. Pero esto también podría molestar a los usuarios legítimos.
respondido por el tim 10.02.2015 - 11:33
fuente
20

Puede obtener la dirección IP interna de los usuarios incluso desde Internet utilizando HTML5 & WebRTC . Puede consultar el artículo descubrimiento de IP local con HTML5 WebRTC : ¿Riesgo de seguridad y privacidad? para obtener más información y pruébelo en enlace .

El sitio web que sirve el artículo parece abajo ahora. Sin embargo, creo que este artículo WebRTC encontró fugas de direcciones IP locales también puede dar alguna información.

    
respondido por el Batuhan 10.02.2015 - 10:47
fuente
4

No hay un método no suplantable que yo sepa. Si ya acelera la cantidad máxima de intentos a ocho intentos por minuto con un minuto de tiempo de espera. Un tiempo de espera de un minuto generalmente no se considera molesto, siempre y cuando proporcione suficiente información al usuario.

Asegúrate de revisar activamente estos casos en los que se sospecha que existen fuerzas brutas de una dirección IP, ya que podría ser interesante investigar quién está tratando de obligarte a hacerlo.

    
respondido por el Lucas Kauffman 10.02.2015 - 09:17
fuente
3

La mayoría de los otros métodos mencionados aquí son fácilmente derrotados y / o reducen significativamente el rendimiento.

Es por eso que los firewalls de aplicaciones web (WAF) no confían en ellos.

2 métodos confiables son:

  • Analice la secuencia de paquetes en el encabezado de IP: la mayoría de las pilas TCP / IP numere los paquetes secuencialmente, entonces si el número es aleatorio, entonces el El cliente probablemente está detrás de NAT (una conexión compartida a Internet con otros clientes). Existe una sobrecarga de RAM para recordar el ID del paquete anterior, pero es comparable a una cookie de sesión. Esto es más difícil de falsificar ya que el atacante debe volver a escribir el paquete a un nivel bajo, pero no imposible, por lo que debe combinarse con una limitación de velocidad: permitir que las IP públicas NATted tengan más aciertos / segundo.
  • Cookies de sesión con autenticación criptográfica: Las cookies de sesión normal son no suficientes. No están cifrados con HTTP, e incluso con HTTPS, pueden no formar parte de una carga útil cifrada con HTTPS y, por lo tanto, tampoco están autenticados. enlace Hazlo correctamente. Asegúrese de que no solo esté cifrado, sino que esté autenticado / "firmado". enlace Si solo tiene acceso al código de la aplicación web, esta es la mejor opción. Obviamente, si las cookies están deshabilitadas, ejecute un JavaScript del lado del cliente que distinga entre navegadores y bots (solicite una resolución de pantalla, etc., que un bot no admitiría y devuelva el estado del bot si el script falla). Combine esto con la limitación de velocidad por cookie de sesión autenticada o, si las cookies están deshabilitadas, la limitación de velocidad basada en IP ("limitación") o el bloqueo. Esto acepta / rechaza la solicitud al principio de la rutina del analizador IP / HTTP, conservando los ciclos de CPU futuros, ya que un atacante de fuerza bruta puede volver a intentarlo miles de veces. Debido a las cookies de DHCP / PPPoE / nueva sesión, las prohibiciones deben expirar después de unos minutos. Tenga en cuenta que debe incluir en la lista blanca las direcciones IP no falsificadas de los rastreadores de motores de búsqueda como Google y Baidu. De lo contrario, su ranking de búsqueda puede sufrir.

Si combina su solución con un límite de velocidad, el límite de velocidad correcto debe ser 1-2 veces el número de URL por página. Por ejemplo, si login.php incluye 2 archivos CSS, 4 archivos JavaScript y 10 imágenes más la página 1, debe permitir al menos un total de 17 visitas por cookie de sesión de cliente, por segundo. De lo contrario, es posible que esté bloqueando / limitando las solicitudes normales.

Para ataques persistentes, debe solicitar a su ISP que bloquee / haga un agujero negro en la ruta en sentido ascendente.

¿Por qué no usar las otras soluciones?

'User-Agent:' es muy trivial para la falsificación:

wget -O index.html --user-agent="My Fake Browser"

Las cookies de sesión, el encabezado HTTP 'X-Forwarded-For:' y otros encabezados también son triviales para robar / falsificar. Google 'Firesheep' o 'Cookies Manager +' o 'Modify Headers plugin' o 'LiveHeaders plugin', etc. como prueba.

La limitación de la tasa tampoco es suficiente por sí sola, porque un ataque oculto aleatorizará o aumentará el tiempo de espera entre solicitudes:

wget --limit-rate=10 http://example.com/index.php

La fuerza bruta no suele ser su único problema. enlace Codificación y probar la protección efectiva también requiere tiempo. Para ahorrar tiempo y / o ciclos de CPU en sus servidores web, se multiplica el desperdicio si tiene una granja de servidores. Su servidor web debe ofrecer un WAF de front-end con esto configurado para usted. Esa es la mejor solución, no lo hagas del lado del servidor. Hazlo aguas arriba.

    
respondido por el Courtney Schwartz 11.02.2015 - 20:15
fuente
2

La identificación única puede ser difícil, pero existe la posibilidad de agregar variables de servidor como User Agent y variables locales como cookies (ambas pueden ser falsificadas y / o eludidas, pero al menos agrega alguna variación junto con la dirección IP). Si JavaScript es una opción, puede probar huellas digitales del navegador (JavaScript o lienzo de HTML5)

    
respondido por el Alasjo 10.02.2015 - 09:29
fuente

Lea otras preguntas en las etiquetas