it-swarm-es.com

¿Cómo puede una aplicación de software defenderse contra DoS o DDoS?

La mayoría de las soluciones para ataques DoS no están en el nivel de la aplicación. En caso de que esté usando un servidor proxy, ¿cuáles son las posibles contramedidas para DoS a nivel de aplicación?

34
Phoenician-Eagle

En primer lugar, es importante distinguir DoS, que significa Denegación de servicio, y DDoS - Denegación de servicio distribuida. En la mayoría de los casos, DoS es causado por la vulnerabilidad del software, aquí vienen los parches y las actualizaciones como medida de prevención de ataques. Los DoS contra el servicio que no es vulnerable no son ataques distribuidos, son ineficaces y no se usan en la actualidad. Si hablar sobre DDoS, que supongo que era el punto de su pregunta, entonces las cosas se vuelven un poco complicadas. IPTABLES en el caso de enormes PPS generalmente no ayuda mucho: el ataque proviene de diferentes ubicaciones, como en el caso de las máquinas zombies. Simplemente prohíbe a los usuarios, pero aparecerán nuevos una y otra vez. Puedo sugerir:

  1. configurar el software del servidor para que maneje las conexiones de manera más liviana: denegar solicitudes largas y pesadas (por ejemplo, MaxKeepAliveRequests en Apache);
  2. configure su sistema operativo: ajuste de la pila de IP (por ejemplo, sysctl en FreeBSD);
  3. cerrar puertos no utilizados, eliminar servicios no utilizados;
  4. mod_evasive - Módulo Apache contra ataques;
  5. configurar un servidor ligero como front-end - nginx, por ejemplo.

Este es un tema largo para discutir, recomendaría no detenerse dentro de estas recomendaciones, pero busque en Google para obtener información más precisa.

18
anonymous

Ignorando la parte sobre DDoS por ahora, ya que esto debería detenerse principalmente en la red o en la infraestructura del servidor (incluyo IIS/Apache/otro servidor web en eso) ...

Creo que también es importante comprender que los DoS (en la capa de aplicación y no distribuidos) aún pueden verse como algunos tipos diferentes de ataques, a juzgar por el daño:

  • DoS permanente: una vez que se monta el ataque, no cesará hasta la intervención manual (admin), como reiniciar el servidor/aplicación, restablecer la configuración, eliminar datos, etc.
  • DoS Temporal: dura durante la duración del ataque o termina poco después.
  • Inundaciones: simplemente inunda el servidor con una gran cantidad de solicitudes, que el servidor debe manejar secuencialmente, bloqueando el acceso de los usuarios legítimos al sistema. (La mayoría de los DDoS entran en esta categoría).

Cada categoría tiene diferentes tácticas para atacar y, por supuesto, diferentes soluciones para prevenir. Sin embargo, hay algunos defectos de codificación que pueden conducir a DoS, pero esto está LEJOS de una lista completa:

  • (Ciertos tipos de) Desbordamientos de búfer
  • Inyección SQL - puede DROP TABLE
  • Bucle en datos controlados por el usuario: se puede hacer "infinito"
  • No cierra las conexiones de bases de datos y los identificadores de archivos, y el usuario puede forzar la apertura de muchos más de estos
  • Bomba XML: al usar entidades DTD, un atacante puede usar fácilmente múltiples Gigs de memoria y 100% de CPU en sistemas multiprocesador (ver también http://msdn.Microsoft.com/en-us/magazine/ee335713. aspx y https://stackoverflow.com/questions/1906927/xml-vulnerabilities )
  • Bloqueo de cuenta de usuario: se recomiendan mecanismos de inicio de sesión para implementar un mecanismo de bloqueo, es decir, bloquear al usuario después de 5 contraseñas incorrectas. Si se trata de un bloqueo "permanente", Y puedo descubrir todos los nombres de usuario (o una parte importante de los mismos), puedo recorrerlos todos y poner a propósito la contraseña incorrecta 5 veces, bloqueando efectivamente a los usuarios ... Y puedo haga esto también al administrador, para que ni siquiera pueda iniciar sesión para desbloquear a los otros usuarios.
  • Petición pequeña, requiere una respuesta muy grande o un tiempo de procesamiento prolongado, sin verificar que el usuario todavía está esperando.
  • Solicitud única, inicia múltiples procesos, p. enviando muchos correos electrónicos a la vez.
  • Carga de archivos grandes a un servidor con un disco pequeño/base de datos pequeña/servidor de correo/cuota de carpeta limitada/etc.
  • DoS "comerciales", p. Ej. enviando muchas solicitudes de soporte, que un humano necesitará examinar

Sí, como puede ver, hay muchos patrones y fallas diferentes que pueden conducir a DoS o permitir inundaciones. No es una sola clase de ataque, sino una categoría de daño.
La protección contra todos ellos requiere abordar cada uno e implementar un control apropiado, y luego realizar un Modelo de Amenaza para ver si hay otras amenazas relevantes que puedan afectar su Disponibilidad.

Una recomendación general que puede considerar, dependiendo de su sistema y NO una bala de plata para todos estos ataques (pero útil de todos modos), es implementar un servicio de "vigilancia". Este servicio puede monitorear la aplicación, reiniciarla si es necesario, notificar a un administrador si es necesario, etc. Sin embargo, NO se recomienda para cualquier aplicación web antigua ...

14
AviD