Protegiéndose contra los ataques de DOS

8

Nuestro sitio actual es fácilmente DOS'd. Puedo realizar una prueba AB contra ella desde Apache y desaparece durante unos 5-10 minutos. Hemos estado teniendo problemas con otros DOS en el sitio, hasta el punto en el que tuvimos que apagarlo durante 8 horas (recomendado por el servidor host).

El servidor está alojado por Rackspace. Recomendaron apagarlo durante 8 horas, y cuando lo volvimos a cargar, se reanudó el ataque.

Configuramos la nube para el DNS, sin embargo, después de una prueba AB con 58,000 solicitudes enviadas, el sitio volvió a estar fuera de línea (no tanto como originalmente).

Rackspace ya no ofrece más sugerencias y, por el momento, tengo que averiguar qué hacer, cambiar de host de servidor no es una opción en este momento y en este momento (el desarrollador principal se va en una semana a una nueva posición).

Este ataque específico creó muchas conexiones en la base de datos mysql con el comando sleep .

¿Alguien tiene alguna sugerencia o recomendación sobre cómo proteger nuevamente los ataques de DOS?

¿El aumento de la RAM en la ayuda del host virtual en absoluto?

    
pregunta Jeff 17.02.2012 - 18:17
fuente

4 respuestas

6

Si el ataque está creando una gran cantidad de conexiones de base de datos con un comando sleep , parece que el DoS no es su problema directo, sino una consecuencia del problema. Lo que es, a saber, que su base de datos es sleep ing mucho.

Yo diría que hay dos posibilidades aquí:

  • La primera posibilidad es que esta es una función incorporada, en ciertas circunstancias, su aplicación está causando explícitamente que la base de datos se duerma (como se menciona en @Rory). Si este es el caso, este es un patrón muy malo, y debe eliminarse. Hay otras soluciones, y definitivamente debes evitar esto.
  • Más probable, y peor aún, es que tiene una vulnerabilidad de Inyección de SQL en su sitio web. La noticia buena es que hasta el momento, parece que los atacantes están solo usándolo en el sitio de DoS. La mala noticia es que probablemente sea mucho peor que eso.
    Pero, más buenas noticias, es un error específico en su código que debe ser encontrado y corregido fácilmente por cualquier programador competente, y no un "DoS" amorfo y anónimo (que podría ser cualquier cosa).

¿Remediación?
En primer lugar, averiguar cuál de los anteriores es el caso. Debería ser lo suficientemente fácil, comience preguntando al programador si alguna vez envía un comando sleep a la db a propósito. También debería ser lo suficientemente fácil como para buscar en el código base las cadenas sleep relevantes.
Si es el primer escenario, simplemente refactorice el código para eliminar el comando ofensivo.
De lo contrario, y probablemente debería hacer esto de todos modos, lea un poco sobre Inyección de SQL y haga que todos los programadores hagan lo mismo. Encuentre y corrija las fallas, luego haga una prueba de penetración enfocada. (Puedes obtener un profesional de seguridad experimentado para que te ayude aquí). Luego considere la causa raíz de estos errores de seguridad críticos, y comience a mejorar el nivel general de seguridad, a través de capacitación, revisiones de código, SDL, pentests, etc. (Un profesional de seguridad puede ayudarlo con esto también).

    
respondido por el AviD 28.02.2012 - 15:32
fuente
16

Hay un par de cosas que puede hacer para prevenir DOS / DDOS.
Primero recomendaría usar un firewall autoban. He estado usando Fail2Ban desde hace algún tiempo. La mayoría de mis problemas con los ataques DDOS / DOS a SSH, FTP, BIND y etc. fueron resueltos. Lo que realmente hace fail2ban es que está escaneando un archivo de registro y cuando un patrón de expresiones regulares coincide X veces, prohíbe a la persona. Con un poco más de trabajo, puede hacer que lea casi cualquier tipo de archivos de registro.

Segundo, hubo un par de mods para apache que previenen los ataques DDOS / DOS. Uno de ellos fue mod_evasive . Lo usé por un tiempo, pero fail2ban funcionó mejor para mí (por ahora), así que no me metí en mod_evasive.

Otra posibilidad es usar Nginx como un front-end que reenviaría las solicitudes de conexión a su servidor Apache. Luego, establezca HttpLimitZoneModule ( info ) de Nginx en el número deseado. Esto reducirá el máximo de conexión entrante desde una única IP pero no impedirá DDOS.

Finalmente: cierre todos los puertos no utilizados. Deje solo los puertos que deben ser públicos como el puerto 21,53,80,443, etc. Esto limitará las posibilidades a las que el atacante puede apuntar.

Editar:
Asegúrate de no obtener una inundación de ping configurando algunas reglas de iptables que limitan el icmp. Aquí hay un enlace que explica cómo funciona ping flood. Primero intente mirar las imágenes, luego el texto tendrá más sentido para usted.
Si está utilizando iptables, este comando puede ayudarlo a evitar el flujo de ping / icmp:

iptables -A INPUT -p icmp -m limit --limit 6/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

El primero limitará las solicitudes de icmp hasta 6 solicitudes por segundo. Afterwords la persona no recibirá más respuestas. Esto eliminará los bots que están haciendo un ciclo:

for(i=0; i<1000000; i++){ 
   some evil code that will bring your server down 
   either by pinging or just connecting to random ports. 
};
    
respondido por el tftd 17.02.2012 - 23:59
fuente
6

Este artículo es un buen comienzo para el lego . En última instancia, sugiere que contrates a un experto en seguridad.

Si esa no es una opción (si se espera que sea el experto), he leído que una estrategia de mitigación de DOS efectiva implica:

  • Tener herramientas IDS de vanguardia (de terceros o incluso de cosecha propia) para detectar el inicio de un ataque de DOS (un aumento repentino en el tráfico, etc.); y
  • Dedicar a alguien a tiempo completo (al menos, por un tiempo) para monitorear el tráfico de red y bloquear las direcciones IP que están conectadas al servidor de forma redundante (más de una vez) - > consulte este artículo para obtener más información

Sin saber para quién eres o para quién trabajas, es difícil adivinar si las mismas partes te están volviendo a atacar constantemente. Si usted es una gran empresa, es probable que haya varios grupos (dispares) que intenten callarlo. Si eres más pequeño, probablemente sea la misma entidad / grupo que te ataca. Si ese es el caso, entonces, si se compromete a bloquear agresivamente la violación de las IP de esta manera durante varias semanas, es probable que moleste a los atacantes con el tiempo y los frustrará.

Lo importante de la seguridad es hacer que el costo de adquirir el activo sea mayor que el valor del activo en sí mismo.

Y, si eres una gran empresa, puedes contratar a un verdadero experto / consultor que sabe ligas más que yo ;-)

    
respondido por el Adam Tannon 17.02.2012 - 20:23
fuente
4

Lea esta esta pregunta para obtener más información sobre cómo DoS ataca trabajo.

Para este caso específico, el ataque está utilizando una función que está permitiendo ( sleep ) forzar ciclos de espera hasta que su base de datos ya no pueda responder.

Una solución para usted puede ser no permitir el comando sleep por completo, a menos que lo necesite. Una mejor solución es evitar todas las conexiones a su base de datos, excepto a través de procedimientos almacenados, de modo que solo se permitan aquellos comandos que necesita para ejecutar su aplicación. Esto hará que sea mucho más difícil para un atacante encontrar y explotar un agujero.

    
respondido por el Rory Alsop 17.02.2012 - 20:36
fuente

Lea otras preguntas en las etiquetas