Usa mining per prevenire attacchi DDOS su websocket: è una soluzione praticabile?

4

Penso che il modo seguente sia un buon modo per prevenire completamente e totalmente i ddos sul mio server. La mia idea è di utilizzare lo stesso meccanismo di mining criptovaluta (bitcoin, con sha256 o qualsiasi altro hash) per prevenire DDOS.

Nota: non sto suggerendo di estrarre la criptovaluta di per sé. Sto suggerendo di utilizzare lo stesso meccanismo per evitare attacchi Sybil .

Perché l'idea mi sembra interessante? Perché creare un hash estratto è costoso, ma verificarlo è super economico. costa solo il calcolo di un hash una volta.

Che cosa significa "mining" in poche parole? Significa che esiste una specifica porzione di dati (ad esempio un ID sessione o un token JWT, che può essere memorizzato nel server in un NoSQL con prestazioni elevate server) e l'utente (o il minatore in criptovaluta) deve creare un hash che soddisfi determinati criteri. Ad esempio, se utilizziamo SHA256, possiamo definire la difficoltà come il numero richiesto degli zeri iniziali nel numero risultante a 256 bit dall'hash. Più zeri fanno la probabilità di trovare quell'hash più difficile.

Come funziona? : un utente accetta il token di sessione (creato dal server) e lo combina con un nonce (numero usato una volta) e calcola l'hash nel loro frontend (tramite WASM, o altrimenti con javascript). Poiché l'utente non può decodificare SHA256, tutto ciò che può fare è continuare a cambiare il nonce di nuovo, e ancora e ancora, finché non trova un nonce che crea un hash che soddisfi la difficoltà richiesta.

Ilgraficomostralaprobabilitàditrovareunblocco(trovareilnoncecorretto)inBitcoin,dovevienesceltaladifficoltàperrenderlo10minuti.Cambiandoladifficoltàsicambiaquestacurvaesimodificalasualarghezzainmodoproporzionale.

Quantotempooccorrealserverperverificare?Praticamentezero.Calcolal'hashunasolavoltaeassicuratichecorrispondaalladifficoltàspecificataecheautorizzil'utenteafarequalsiasirichiestaanonima.Sinotichenulladiciòrichiedel'autenticazioneconnomeutenteepassword.Questoètuttoanonimo.Gliutentiautenticatinondevonofarlopoichélelorocredenzialipossonoesserebanditedalsistema.Questoètuttoperutentianonimi(epossibilmenteattaccanti).

Ilrisultato:l'utentedovràcalcolarequestohashconquestadifficoltàprimadifarequalsiasirichiestaalserver.Unavoltachel'utentehaavutosuccesso,iltokendiautenticazioneestrattopuòesserememorizzatoinuncookieperessereriutilizzatodall'utente.Sel'utentenonriesceafornirel'hashrichiesto,lasuarichiestadiconnessioneverràrespintabruscamente,equindiimpedendounattaccoDDOSconmarionette.

ASIC resistenza : l'utilizzo di SHA256 non è consigliato in quanto esiste un hardware specializzato in grado di calcolarlo molto rapidamente, con conseguente possibile attacco coordinato. Ci sono degli hash difficili da stampare sull'hardware, come Scrypt e Argon2.

Scelta della difficoltà : la difficoltà può essere statica (che non consiglierei), oppure può essere dinamica per cambiare con il carico sulla rete. Quando esiste un carico di rete elevato, la difficoltà richiesta viene aumentata. Fondamentalmente agirà da filtro e proteggerà la rete durante i tempi di attacco DDOS e non influenzerà mai gli utenti, poiché normalmente gli utenti non si preoccuperebbero di attendere 10 secondi per creare una sessione. In caso di carico veramente elevato, gli utenti possono scegliere di calcolare il nonce costoso o tornare più tardi. La società di hosting può anche decidere se è necessaria un'espansione dell'infrastruttura in base al grafico delle difficoltà nel tempo.

Si tratta di un piano valido per la protezione da DDOS su websocket e protocolli pubblici simili? Vorrei implementarlo sul mio server.

EDIT: Solo per essere chiari, questo non è un proiettile d'argento per tutti i tipi di DDOS. Ma questo impedisce agli utenti di manipolare la funzionalità interna del server + rende difficile l'utilizzo della funzionalità del server per esaurire la larghezza di banda. Sarei interessato a capire perché questo possa o meno funzionare, più che un sommario sul fatto che sia nuovo o vecchio.

    
posta The Quantum Physicist 30.05.2018 - 04:26
fonte

2 risposte

6

TL; DR: Questa non è una soluzione contro il tipico DDOS. Potrebbe essere una protezione contro alcuni DOS specifici per le applicazioni.

Eliminando tutte le risorse minerarie, la tua idea significa essenzialmente che il client si connette a un server per ottenere un compito difficile da risolvere e successivamente torna a presentare la soluzione facile da verificare per questa attività.

Il problema con questo approccio è che i client devono prima connettersi al server e che il server deve essere in grado di rispondere con un'attività al client. Ciò significa che la tua idea non può proteggersi dagli attacchi DDOS più comuni orientati alla larghezza di banda, che inviano semplicemente più traffico dei sistemi upstream o che il server può gestire. Né sarà d'aiuto contro semplici attacchi DDOS che cercano di esaurire le risorse del server stesso, ad esempio cose come SYN flooding o Slowloris .

Può effettivamente aiutare contro gli attacchi mirati alle fasi successive dell'elaborazione, ad esempio gli attacchi specifici dell'applicazione. Ma in realtà non è una nuova idea in questo settore, si tratta essenzialmente di un altro Sistema di prova del lavoro come sono conosciuti da molti anni.

    
risposta data 30.05.2018 - 09:50
fonte
1

Quindi, stiamo parlando solo degli attacchi DDoS a livello di applicazione.

Ciò che proponi è noto da tempo come prova di lavoro . Numerosi tentativi sono stati fatti per mettere questo approccio generale contro gli attacchi DDoS a livello di applicazione, con scarso successo però.

Fondamentalmente, o la sfida che introduci per un bot sospetto sarebbe semplice e abbastanza breve da essere completata in un paio di dozzine di secondi, o ci vorrà molto tempo.

  1. Nel primo caso, si ritiene che una botnet tipica abbia migliaia di macchine sotto controllo, e l'attaccante ottiene tutte le risorse di calcolo su quelle macchine, più o meno, gratuitamente. Costringere tutte quelle macchine a computare qualcosa solo una volta per circa 10 secondi non impedirà un attacco.

  2. Nell'altro scenario, probabilmente dovresti comunque perdere quasi tutti i clienti di un sito Web, ad esempio, perché un utente legittimo attende raramente i minuti per il caricamento delle pagine. In realtà, i siti Web popolari stanno ora lottando per millisecondi di tempi di caricamento delle pagine, introducendo numerose tecniche (CDN, 0-RTT e altre) esattamente a tale scopo. Quindi, anche se formalmente il tuo server non sarà invaso da richieste malevole, il risultato finale sarebbe praticamente lo stesso.

Per alcune applicazioni specifiche, in teoria, potrebbe esserci qualche ragione per implementare una tecnica simile a ciò a cui stai pensando. Ma per un sito Web arbitrario, sfortunatamente, non funzionerà bene.

    
risposta data 07.06.2018 - 16:36
fonte

Leggi altre domande sui tag