Ataque de denegación de servicio en comunicación asíncrona

0

¿Es posible el ataque de DOS a baja velocidad (no deseado) a través de la comunicación asíncrona? Considere este escenario:

Tengo una aplicación de servidor de cliente donde hay una comunicación WAN entre el cliente y el servidor. El cliente realiza llamadas sincrónicas al servicio y espera una respuesta. Ahora sucede un desagradable problema de WAN que hace que la latencia aumente. En este caso, el servidor podría esperar a que lleguen los paquetes, mientras que el cliente podría agotar el tiempo de espera e iniciar una nueva conexión. Si esto sucede lo suficientemente rápido, el servidor puede saturarse con conexiones que causan que se eliminen solicitudes de conexión legítimas que causen DOS.

Ahora, si la comunicación es asíncrona, el cliente no esperará la respuesta y los intentos repetidos no sucederán. Esto parece proteger de DOS?

¿Estoy en lo cierto aquí? o donde me equivoque?

    
pregunta broun 27.01.2013 - 00:48
fuente

2 respuestas

2

Estás en lo correcto. La capacidad de recibir múltiples comunicaciones protegerá de ese tipo de DoS, o más bien: aumentará el "poder" que necesita el DoS para ser dañino (esto en el escenario de un solo cliente).

Por otra parte, mantener más comunicaciones abiertas al mismo tiempo tendrá un impacto en el servidor (memoria y recursos , que son básicamente memoria otra vez, manejados por una cantidad insignificante de CPU). Así que estás intercambiando una vulnerabilidad para "hacer lenta la DPS" con otra.

Para los sistemas típicos, tiene sentido, ya que tienen memoria de sobra y CPU para grabar. A menos que el protocolo o la arquitectura eviten hacerlo, es deseable un soporte asíncrono múltiple.

La otra posibilidad (más típica) es que estamos viendo una gran serie de comunicaciones continuas paralelas, es decir, una gran cantidad de canales de cliente HTTP persistentes. En ese caso, pregunta, si la latencia hace que las conexiones de N salgan de M y se restablezcan, las conexiones de M + N se abrirán simultáneamente, luego M + 2N, luego M + 3N ...,; si la tasa de crecimiento supera la velocidad a la que el servidor cierra las conexiones atascadas, los recursos del servidor se agotarán finalmente.

Hay varias líneas de defensa contra esto. Por lo general, cuando una conexión se cae (a nivel HTTP), el servidor será consciente del hecho en el nivel TCP, cuando el cliente cierre el canal. A menos que el cliente intente soltar la conexión sin dejar de lado su licencia o mantenga vivo el viejo socket y abre otro (tales fugas se deben principalmente a una programación descuidada, pero sucede); en ese caso, el servidor notará el hecho después de un tiempo de espera de TCP adecuado , que puede reducirse aún más mediante el uso de la opción keepalive. Es posible que esto no funcione contra clientes descuidados, ya que el socket subyacente no está muerto en absoluto.

Luego, el servidor puede reconocer al cliente (por ejemplo, mediante sesiones o dirección IP; un servidor de seguridad también puede hacer lo último), y eliminar cualquier otra comunicación existente con el mismo cliente de forma explícita o implícita (por ejemplo, porque el cliente tiene una "ranura" asignada y solo se puede ocupar una vez, por lo tanto, la comunicación entrante reemplaza a la primera; esto debe hacerse después de la identificación exitosa y la autenticación del cliente, ya que de lo contrario abriría la puerta a un DoS diferente).

El reconocimiento de la sesión del cliente puede ser la única forma práctica de tratar con clientes descuidados si la dirección IP no es una opción (por ejemplo, varios clientes legítimos detrás de un NAT que comparte su dirección); Además de actualizar el software del cliente, por supuesto. Tal situación sería fácilmente visible con un simple netstat en cualquier cliente.

Finalmente, tal escenario requeriría que toda la arquitectura esté casi en su capacidad; puede evitarlo controlando el rendimiento y mejorando la capacidad antes de ingresar a la "zona de peligro". Cuanto más lejos esté de la línea roja, más potencia (y voluntad demostrable y culpabilidad) requerirá un DoS antes de conducir el sistema hasta allí, y más advertencias tendrá cuando esto suceda. En pocas palabras, consumir hasta el 5% de la capacidad del sistema puede ser accidental, y consumir constantemente el 50% menos. Por supuesto, dicho margen de seguridad tendrá sus costos.

    
respondido por el LSerni 28.01.2013 - 08:36
fuente
1

Como sabemos, HTTP es un protocolo de solicitud / respuesta síncrono en el que el cliente inicia la solicitud y el servidor responde a la solicitud. Para emular la comunicación asíncrona a través de este HTTP síncrono, se han propuesto diferentes técnicas que son

  1. sondeo
  2. sondeo largo
  3. transmisión
  4. WebSockets

Además de los websockets, todos estos métodos construyeron comunicación asíncrona a través de canales HTTP síncronos y han resultado en un aumento del tráfico del lado del servidor. Recomiendo leer "Métodos para la comunicación asíncrona a través de HTTP" y "Problemas conocidos y prácticas recomendadas para el uso de sondeo y transmisión en tiempo real en HTTP bidireccional" . WebSocket es el verdadero método emergente actual de comunicación asíncrona del cliente al servidor y tiene problemas de seguridad, es decir, " Hackear con WebSockets "

    
respondido por el Ali Ahmad 27.01.2013 - 17:05
fuente

Lea otras preguntas en las etiquetas