Un DoS es normalmente sobre el agotamiento de recursos. Hay muchos recursos diferentes que puede agotar, pero uno de los más fáciles de determinar desde el exterior son las solicitudes concurrentes porque de repente obtiene respuestas HTTP 503 cuando alcanza el límite.
Por ejemplo, si puede encontrar una página con un tiempo de carga lento, digamos 10 segundos, solo necesita hacer 11 solicitudes por segundo para agotar todas las conexiones disponibles. Ni siquiera necesita mantener la conexión una vez que haya realizado la solicitud, ya que la aplicación seguirá haciendo todo el trabajo para generar la página antes de descubrir que ya no está allí. Incluso perderá tiempo esperando a que se agote el tiempo de espera de la conexión TCP.
Poner %
en una función de búsqueda mal escrita puede causar que %
sea el símbolo comodín de MySQL que hará que la búsqueda regrese a cada fila en la base de datos.
Una variante de esto es el ataque Slow-Loris, en el que se realiza una solicitud simple pero se acelera la rapidez con la que se recibe la respuesta a meros bytes por segundo. Para lograr un DoS aquí, solo necesita mantener abiertas más conexiones activas de las que permite el sitio.
Desde la vaga memoria, la configuración predeterminada de Apache MaxChildren es algo así como 50, que probablemente se pueda lograr desde un teléfono móvil.
Una tercera variante tiene que ver con el control de un recurso único y único. Ejemplos de esto son las tablas MyISAM al leer y escribir simultáneamente y los archivos de sesión de PHP. Con una sola solicitud lenta que bloquea el recurso, todas las solicitudes posteriores que requieran el mismo recurso simplemente esperarán hasta que finalice la solicitud lenta.
Un ejemplo de esto podría ser hacer mucho si se alternan las solicitudes de lectura y escritura en un foro o si se realiza una solicitud de inicio de sesión (que requiere el archivo de sesión de PHP), donde se acelera la rapidez con la que recibe la respuesta. Todas las solicitudes con el mismo ID de sesión ni siquiera comenzarán hasta que se termine esa, pero seguirán atando a un hijo Apache mientras esperan.
Algunos software de servicio web (como nginx y Node.js) están diseñados para manejar muchas solicitudes simultáneas, pero aún son susceptibles a otras técnicas de agotamiento, como bloquear un archivo de sesión particular para bloquear ese usuario y las conexiones máximas de la base de datos.
También puede apuntar a la CPU, la memoria, el espacio en disco, la utilización del disco, los archivos abiertos, el ancho de banda interno de la red, las conexiones de red abiertas (que la aplicación crea si solo estamos hablando de la capa 7, no las directas que usted crea), y puede apuntar a cualquiera de estos en cualquier servidor que toque su solicitud, como la base de datos o SAN o el servidor de búsqueda o lo que sea.