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.
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.