Estoy pensando si la siguiente forma es una buena manera de prevenir las ddos en mi servidor de forma completa y total. Mi idea es usar el mismo mecanismo de minería de criptomonedas (bitcoin, con sha256 o cualquier otro hash) para prevenir DDOS.
Nota: No estoy sugiriendo extraer la criptomoneda en sí. Sugiero usar el mismo mecanismo para evitar ataques de Sybil .
¿Por qué me parece atractiva la idea? Porque crear un hash extraído es costoso, pero verificarlo es muy barato. solo cuesta calcular un hash una vez.
¿Qué significa la minería, en pocas palabras? Esto significa que hay una porción específica de datos (por ejemplo, un ID de sesión, o un token JWT) que se puede almacenar en el servidor en un NoSQL ejecutante servidor), y el usuario (o el minero en criptomoneda) tiene que crear un hash que coincida con ciertos criterios. Por ejemplo, si usamos SHA256, podemos definir la dificultad como el número requerido de los ceros iniciales en el número resultante de 256 bits del hash. Más ceros hacen que la probabilidad de encontrar ese hash sea más difícil.
¿Cómo funciona? : un usuario tomaría el token de sesión (creado por el servidor) y lo combinaría con un nonce (número usado una vez), y calcule el hash en su interfaz (a través de WASM, o de otro modo con javascript). Como el usuario no puede aplicar ingeniería inversa al SHA256, todo lo que puede hacer es seguir cambiando el nonce de nuevo, una y otra vez, hasta que encuentre un nonce que cree un hash que satisfaga la dificultad requerida.
Elgráficomuestralaprobabilidaddeencontrarunbloque(encontrarelpuntocorrecto)enBitcoin,dondeseeligeladificultadparahacerloen10minutos.Cambiarladificultadcambiaráestacurvaycambiarásuanchoproporcionalmente.
¿Cuántodemoraelservidorenverificar?Prácticamentecero.Simplementecalculeelhashunavezyasegúresedequecoincidaconladificultaddada,yesoautorizaalusuarioarealizarcualquiersolicitudanónima.Tengaencuentaquenadadeestorequiereautenticaciónconnombresdeusuarioycontraseña.Todoestoesanónimo.Losusuariosautenticadosnonecesitanhaceresto,yaquesuscredencialespuedensereliminadasdelsistema.Estoestodoparausuariosanónimos(yposiblementeatacantes).
Elresultado:Elusuariotendráquecalcularestehashconestadificultadantesderealizarcualquiersolicitudalservidor.Unavezqueelusuariotieneéxito,eltokendeautenticaciónextraídosepuedealmacenarenunacookieparaqueelusuariolareutilice.Sielusuarionoproporcionaelhashsolicitado,susolicituddeconexiónserechazarádeformaabruptay,porlotanto,evitaráunataqueDDOScontíteresdecalcetines.
Eligiendo la dificultad : la dificultad puede ser estática (lo cual no recomendaría), o puede ser dinámica para cambiar con la carga en la red. Cuando existe una alta carga de red, aumenta la dificultad requerida. Básicamente, esto actuará como un filtro y protegerá la red durante los tiempos de ataque DDOS, y nunca afectará a los usuarios, ya que normalmente a los usuarios no les gustaría esperar 10 segundos para crear una sesión. En caso de una carga realmente alta, los usuarios pueden optar por calcular el costo costoso o regresar más tarde. La empresa de alojamiento también puede decidir si se requiere una expansión de la infraestructura según el cuadro de dificultad a lo largo del tiempo.
¿Es este un buen plan para protegerse contra DDOS en websocket y protocolos públicos similares? Me gustaría implementar esto en mi servidor.
EDITAR: Solo para ser claros, esto no es una bala de plata para todo tipo de DDOS. Pero esto evita que los usuarios manipulen la funcionalidad interna del servidor + hace que sea difícil usar la funcionalidad del servidor para agotar el ancho de banda. Me gustaría saber por qué esto puede o no funcionar, más que un resumen sobre si esto es nuevo o antiguo.