TCP rispetto alla resilienza UDP a DDoS

3

Sto costruendo un servizio che posso implementare ugualmente bene con TCP o UDP. Se utilizzo TCP, espongo la vulnerabilità a SYN flood e altri attacchi al protocollo TCP. Se utilizzo UDP, sarà più difficile bloccare l'upstream UDP senza bloccare anche il mio traffico legittimo. C'è una scelta chiara qui? Sono propenso all'UDP perché gli attacchi all'esaurimento della larghezza di banda hanno un impatto sugli altri sulla rete, quindi mi aspetto che diventerà sempre più difficile, ad es., Con meno tolleranza per lo spoofing degli indirizzi e meno servizi disponibili per amplificare il traffico.

    
posta user1055568 05.10.2015 - 19:14
fonte

3 risposte

5

Quando si sceglie TCP e UDP, è necessario guardare oltre la semplice sicurezza. Senza conoscere i dettagli di ciò che stai cercando di progettare è impossibile dare un consiglio su quale protocollo usare.

Considera questi fatti di base.

  • TCP richiede un handshake a 3 vie per configurare la connessione, impedendo molti attacchi di spoofing basati sull'indirizzo IP.

  • TCP può utilizzare una connessione SSL se è necessario aggiungere la crittografia.

  • UDP richiede meno risorse sul server per tenere traccia di
    prese.

risposta data 05.10.2015 - 19:36
fonte
1

La scelta di UDP rispetto a TCP dipende dal tuo caso d'uso e dal tipo di DDos. Per i DDos semplici che consumano la larghezza di banda non importa molto perché se tutta la larghezza di banda viene utilizzata dall'attacco non ci sarà più traffico per la tua applicazione, non importa se basata su UDP o TCP. UDP potrebbe avere un leggero vantaggio in questo caso perché UDP di per sé non ha bisogno di più pacchetti per una connessione stabilita (ma il protocollo dell'applicazione potrebbe averne bisogno).

Se ti preoccupi di più degli attacchi che mangiano risorse sul sistema (come l'allagamento di SYN o semplicemente l'apertura di molte connessioni), UDP potrebbe sembrare migliore all'inizio, dal momento che non utilizza molte risorse nel sistema come fa TCP. Ma se la tua applicazione ha bisogno di qualche idea di connessione, di affidabilità e di trasferimento ordinato dei dati, finisci per implementare tutte le cose belle che il protocollo TCP ha già nella tua applicazione. E lì probabilmente impiegheranno più risorse rispetto alle implementazioni ottimizzate all'interno del kernel del sistema operativo, il che significa che finirai per essere più influenzato da DDos che se usassi semplicemente TCP.

Inoltre, utilizzando le tecnologie consolidate invece di eseguire la gestione della rete a livello di applicazione, è possibile utilizzare le soluzioni Anti-DDos esistenti. Con il tuo protocollo speciale invece avresti bisogno di inventare la tua soluzione Anti-DDos speciale.

I am building a service that I can implement equally well with either TCP or UDP.

Se è possibile implementare lo stesso servizio con la stessa affidabilità in UDP e TCP e l'implementazione UDP utilizzerà meno risorse di sistema rispetto all'implementazione TCP (cioè risorse di kernel e spazio utente combinate) allora potresti andare su UDP perché usare meno risorse è una buona idea quando si confronta con DDos.

    
risposta data 05.10.2015 - 20:03
fonte
0

Penso che tu stia pensando troppo. Sei fregato quando si tratta di DDOS, o scegli UDP o TCP. Se non si dispone di un'appliance anti-DDOS o di un servizio che interrompe l'inondazione prima che raggiunga il servizio, non è possibile fare nulla oltre a far cadere i pacchetti localmente. Non hai specificato i requisiti della tua applicazione che mi inducono a fornire una risposta generica:

  • Se la tua applicazione non richiede comunicazioni lunghe e lo sei disposti a perdere pacchetti usano UDP. Il cliente invia una richiesta, tu rispondi e hai finito (ad esempio chargen). Meno spese generali aggiunte da inutili strette di mano.
  • Se hai bisogno di scambiare informazioni sulla sessione e hai bisogno di affidabilità, vai per TCP (ad es. HTTP).

Non esiste una taglia adatta a tutti. Anche le soluzioni che ti ho fornito non sono abbastanza generiche: potresti usare UDP per comunicare usando HTTP (perché no?).

Quello che vorrei suggerire è scegliere il veleno: TCP o UDP e quindi utilizzare un firewall per limitare la quantità di richieste di syn usando il limite: link .

Esiste una tecnica chiamata SYN cookies per prevenire questo tipo di problemi che è possibile abilitare in Linux: link

Tuttavia, come ho detto, se non hai nessun apparecchio esterno che affonda il traffico DDOS (blackhole) o il tuo ISP / fornitore di servizi che impedisce l'alluvione, non preoccuparti nemmeno di proteggere l'applicazione / macchina da solo. Probabilmente proteggi la tua applicazione dall'arresto anomalo se si eliminano i pacchetti ma non si sarà in grado di soddisfare alcuna richiesta, che è l'essenza del DDOS (Distributed Denial of Service).

Stai al sicuro;)

    
risposta data 05.10.2015 - 22:04
fonte

Leggi altre domande sui tag