Un ataque de denegación de servicio es un tipo de ataque que hace que los usuarios legítimos no puedan usar el servicio. Estos vienen en algunas categorías diferentes:
- Agotamiento de recursos (por ejemplo, consume todo el ancho de banda de la red o el tiempo de CPU del servidor)
- Explotación de la limitación (por ejemplo, bloquear a un usuario de su cuenta al intentar iniciar sesión en él con credenciales no válidas)
- Interrupción del proceso (por ejemplo, bloquear un proceso que atiende las solicitudes de los usuarios, a través de un error en el software)
- Corrupción de datos (por ejemplo, la modificación de todos los tipos de usuarios a un tipo no válido, lo que hace imposible que puedan iniciar sesión)
- Interrupción física (por ejemplo, desconectar el cable de alimentación de un servidor) - ¡gracias a Henning por este!
El tipo más común en webapps es un agotamiento de recursos, que es lo que la mayoría de las personas tienden a referirse como un DoS. Esto se debe a que un atacante envía una gran cantidad de solicitudes al servidor para agotar uno o más recursos:
- El ataque puede consumir el ancho de banda de la red en su totalidad, lo que impide que el tráfico de usuarios legítimos llegue al servidor.
- Cada solicitud utiliza cierto tiempo de CPU, por lo que un gran número de solicitudes puede hacer que la CPU dedique todo su tiempo a tratar las solicitudes de los atacantes, en lugar de solicitudes legítimas. Los atacantes pueden enviar solicitudes costosas (por ejemplo, búsquedas de texto completo, conexiones SSL, etc.) al servidor para aumentar el impacto. También hay casos en que las vulnerabilidades en el software del servidor permiten que el atacante elabore solicitudes especiales que consumen mucho tiempo de CPU.
- Se utiliza una pequeña cantidad de RAM para almacenar el estado de la conexión, lo que podría permitir el agotamiento de la memoria física si se pueden hacer suficientes conexiones. Sin embargo, las consultas de base de datos pueden ser muy intensivas en memoria, en términos de uso de memoria y ancho de banda de memoria. Si un atacante escoge bien sus consultas, podría agotar completamente la memoria física del sistema.
- Los registros, las tablas de la base de datos, etc. se almacenan en el disco. El envío de una gran cantidad de consultas durante un período de tiempo puede agotar el espacio de disco en el servidor, causando que se bloquee.
Tenga en cuenta que las solicitudes no tienen que ser HTTP; pueden ser DNS, HTTPS, SSH, FTP, SMTP, POP, IMAP, SMB, etc. Cualquier situación en la que un servicio esté escuchando paquetes entrantes es una forma potencial para lograr un DoS.
Hay dos formas principales de lograr ataques DoS de red básicos independientes de la aplicación: inundaciones TCP SYN y UDP flood .
El protocolo TCP incluye un protocolo de enlace de tres vías . Primero, un cliente envía una solicitud SYN (sincronización), a la que el servidor responde con un SYN-ACK (sincronización reconocida), que el cliente finalmente responde con un ACK (confirmación). Sin embargo, si un cliente envía un SYN y no responde al SYN-ACK, el servidor se queda con una conexión medio abierta. Esto consume una pequeña cantidad de memoria dentro del sistema operativo y consume algunos ciclos de CPU. Eventualmente, la conexión se interrumpe, pero una avalancha de paquetes SYN puede ser suficiente para causar graves problemas de rendimiento en el destino. Hay varias formas de mitigar esta amenaza, y la más notable es cookies SYN , que permiten que el servidor las envíe de vuelta. una respuesta sin almacenar el estado SYN.
El protocolo UDP no implica ningún tipo de protocolo de enlace. Los paquetes se envían simplemente entre hosts, sin estado ni conexión. Esto significa que un atacante puede enviar una gran cantidad de paquetes UDP al servidor, consumiendo su ancho de banda. Esto requiere que el ancho de banda total del cliente exceda al del servidor. Dado que el cliente no necesita ninguna respuesta, puede falsificar la dirección IP de origen, lo que dificulta la mitigación. Estos tipos de ataques pueden ser más difíciles de bloquear y, a menudo, requieren la intervención del proveedor de servicios.
El problema para los atacantes es que los servidores están diseñados para hacer frente a una gran cantidad de usuarios concurrentes y pequeños ataques de denegación de servicio. Es poco probable que el envío de una gran cantidad de paquetes desde su red doméstica o un servidor alquilado cause una reducción significativa en la disponibilidad o la velocidad de respuesta de su objetivo. Para hacer que el ataque sea más efectivo, utilizan un ataque de denegación de servicio (DDoS) distribuido . Esto implica el uso de varias computadoras en diferentes redes para inundar el sitio con solicitudes. A menudo, el atacante infectará otras computadoras con malware, para formar una red de bots, que luego se usa para realizar ataques DoS. La diferencia es que un DDoS permite que el tráfico fluya desde direcciones IP de origen legítimas (pero comprometidas), lo que aumenta la efectividad del ataque y dificulta el bloqueo.