Un DoS normalmente riguarda l'esaurimento delle risorse. Esistono molte risorse diverse che puoi esaurire, ma una delle più facili da determinare dall'esterno è le richieste simultanee perché ottieni improvvisamente le risposte HTTP 503 quando raggiungi il limite.
Ad esempio, se riesci a trovare una pagina con un tempo di caricamento lento, ad esempio 10 secondi, devi solo effettuare 11 richieste al secondo per utilizzare tutte le connessioni disponibili. Non hai nemmeno bisogno di mantenere la connessione dopo aver effettuato la richiesta poiché l'app continuerà a fare tutto il lavoro per generare la pagina prima di scoprire che non ci sei più. Perseguirà anche il tempo di attesa per il timeout della connessione TCP.
Mettere %
in una funzione di ricerca scritta male può causare come %
il simbolo jolly MySQL che farà sì che la ricerca restituisca ogni riga nel database.
Una variante di questo è l'attacco di Slow-Loris in cui si effettua una semplice richiesta ma si riduce la velocità con cui si riceve la risposta fino a semplici byte al secondo. Per ottenere un DoS qui, devi solo mantenere aperte più connessioni attive di quelle consentite dal sito.
Da una memoria vaga, l'impostazione predefinita di Apache MaxChildren è qualcosa come 50 che è probabilmente raggiungibile da un telefono cellulare.
Una terza variante ha a che fare con il controllo di una singola risorsa unica. Esempi di questo sono le tabelle MyISAM durante la lettura e la scrittura simultanea e file di sessione PHP. Con una singola richiesta lenta che blocca la risorsa, tutte le richieste successive che richiedono la stessa risorsa attenderanno semplicemente fino al termine della richiesta lenta.
Un esempio di questo potrebbe essere un sacco se si alternano richieste di lettura e scrittura a un forum o si effettua una richiesta di accesso (che richiede il file di sessione PHP) dove si limita la velocità con cui si riceve la risposta. Tutte le richieste con lo stesso ID di sessione non inizieranno nemmeno fino a quando non sarà terminata, ma continueranno a legare un figlio Apache mentre aspettano.
Alcuni software di web serving (come nginx e Node.js) sono progettati per gestire molte richieste simultanee ma sono ancora suscettibili alle altre tecniche di esaurimento, come il blocco di un particolare file di sessione per bloccare le connessioni di quel utente e il massimo di database. / p>
Puoi anche indirizzare CPU, memoria, spazio su disco, utilizzo del disco, file aperti, larghezza di banda della rete interna, connessioni di rete aperte (che l'applicazione fa se stiamo parlando di layer 7, non di quelli diretti che fai), e puoi scegliere come target uno di questi su qualsiasi server che la tua richiesta tocca come il database o la SAN o il server di ricerca o altro.