Use la minería para evitar ataques DDOS en websocket: ¿Es esta una solución viable?

4

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.

ASIC resistencia : No se recomienda usar SHA256 porque hay un hardware especializado que puede calcularlo muy rápido, lo que lleva a un posible ataque coordinado. Hay hashes que son difíciles de imprimir en hardware, como Scrypt y Argon2.

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.

    
pregunta The Quantum Physicist 30.05.2018 - 04:26
fuente

2 respuestas

6

TL; DR: Esto no es una solución contra el DDOS típico. Podría ser una protección contra algunos DOS muy específicos de la aplicación.

Quitar todo el material de minería que su idea esencialmente significa que el cliente se conecta a un servidor para obtener una tarea difícil de resolver y luego vuelve a presentar la solución fácil de verificar para esta tarea.

El problema con este enfoque es que los clientes necesitan conectarse primero al servidor y que el servidor debe poder responder con una tarea al cliente. Esto significa que su idea no puede protegerse contra los ataques DDOS orientados al ancho de banda más comunes que simplemente envían más tráfico que los sistemas de flujo ascendente o que el servidor puede manejar. Tampoco ayudará contra los ataques DDOS simples que intentan agotar los recursos del servidor, es decir, cosas como inundación SYN o Slowloris .

En realidad, puede ayudar contra ataques que están dirigidos a etapas posteriores del procesamiento, es decir, ataques específicos de la aplicación. Pero en realidad no es una idea nueva en esta área, es esencialmente otro Sistema de prueba de trabajo Como se conocen desde hace muchos años.

    
respondido por el Steffen Ullrich 30.05.2018 - 09:50
fuente
1

Por lo tanto, ahora estamos hablando de ataques DDoS de capa de aplicación solamente.

Lo que usted propone es conocido durante mucho tiempo como prueba de trabajo . Se hicieron numerosos intentos para poner este enfoque general en contra de los ataques DDoS de la capa de aplicación, aunque con poco éxito.

Básicamente, el desafío que usted presenta para un presunto bot sería simple y lo suficientemente corto para terminar en una pareja o una docena de segundos, o tomará mucho tiempo.

  1. En el primer caso, se cree que una botnet típica tiene miles de máquinas bajo control, y el atacante obtiene todos los recursos computacionales de esas máquinas, más o menos, de forma gratuita. Forzar a todas esas máquinas a computar algo solo una vez durante unos 10 segundos no va a prevenir un ataque.

  2. En el otro escenario, es probable que aún pierda a casi todos los clientes de un sitio web, por ejemplo, porque un usuario legítimo rara vez esperará minutos para que se carguen sus páginas. En realidad, los sitios web populares ahora luchan por milisegundos de tiempos de carga de página, introduciendo numerosas técnicas (CDN, 0-RTT y otras) exactamente para ese propósito. Entonces, aunque formalmente su servidor no se verá inundado de solicitudes maliciosas, el resultado final sería prácticamente el mismo.

Para algunas aplicaciones específicas, en teoría, podría haber alguna razón para implementar una técnica similar a la que estás pensando. Pero para un sitio web arbitrario, desafortunadamente, no va a funcionar bien.

    
respondido por el ximaera 07.06.2018 - 16:36
fuente

Lea otras preguntas en las etiquetas