¿Debo usar websockets (ws) o websockets seguros (wss) para mi juego?

5

Estoy haciendo un juego y estoy usando websockets para el 99% de la comunicación. Los únicos http (s) están en la carga de la página inicial y al iniciar sesión / registrarse.

Soy un noob completo, corríjame si me equivoco, pero SSL es solo para prevenir ataques de hombres en el medio, ¿verdad? Ninguno de los paquetes que envío a través de websockets son "confidenciales". En su mayoría es solo [nombre de paquete, xCoord, yCoord]. No puedo pensar en ningún paquete de juego que esté enviando a donde importaría si un tercero los controlara (incluso si esa persona también estaba en el mismo juego en la misma habitación porque todos pueden ver a todos los demás mientras están en la misma sala). el juego).

Sé que generalmente se considera la mejor práctica usar solo SSL, pero mi juego tiene una gran cantidad de comunicación entre los clientes y el servidor (muchas actualizaciones posicionales por segundo y quiero que se use la menor demora / ancho de banda / procesamiento posible) ) entonces me pregunto si es necesario?

¿Qué es lo peor que podría pasar si no habilito wss?

    
pregunta Chron Bag 12.06.2016 - 07:06
fuente

2 respuestas

8

(tl; dr en la parte inferior)

El cifrado es esencialmente libre en este punto, incluso en las conexiones de acceso telefónico. Casi todos los idiomas principales lo tienen incorporado, o tienen una biblioteca para él, etc. La ventaja de no usar TLS / SSL es una fracción muy pequeña de un segundo tiempo de inicio, una reducción muy insignificante en el uso de la CPU (una pequeña fracción de un porcentaje), y aproximadamente 4kb de ancho de banda guardado por sesión (TLS no tiene un efecto apreciable en el ancho de banda después del protocolo de enlace inicial). Por lo tanto, suponiendo que mantengas la conexión abierta para todo un juego, no estás ahorrando prácticamente nada.

Sin embargo, el hecho de que los datos se envíen de forma clara facilita que alguien que esté interesado en jugar con tu juego pueda ver lo que está haciendo. Una vez que saben cuál es su protocolo, pueden usarlo para su beneficio. Una persona que usa una herramienta diseñada para realizar alguna tarea siempre va a superar a alguien que no tiene esa herramienta. Pensando de manera casual, he llegado a crear bots, manipulación de puntaje alto, actualizaciones de clientes falsos, jugadas asistidas por herramientas y secuestro de sesiones.

Botting, por ejemplo, es hacer que la computadora juegue por ti. Las computadoras son realmente buenas para mirar un millón de movimientos por adelantado, por lo que casi siempre pueden seleccionar el movimiento correcto e infalible para hacer en cualquier circunstancia más rápido que un humano. Esto significa que ganarán, y los jugadores reales perderán, lo que en última instancia significa que su juego terminará siendo abandonado o simplemente lleno de bots que juegan entre sí.

Las puntuaciones altas significan cosas para las personas. Es una cosa del ego. Entonces, cuando juegan y obtienen un puntaje de 250, y ven que el mejor jugador tiene un puntaje de 4,294,967,295, no se molestarán en jugar. Por ejemplo, esto podría suceder si el código de puntuación más alta tiene un protocolo fácil de romper (sí, algunos juegos solo reportan una puntuación alta y el servidor simplemente lo acepta). Esa parte debe estar protegida contra manipulaciones.

Las actualizaciones de clientes falsos pueden o no ser un problema, pero básicamente se reduce a si se puede "mentir" a un cliente para que piense que el juego se encuentra en un estado diferente al que realmente está. Por ejemplo, las personas pueden aparecer en el lugar equivocado en un mapa, las personas pueden teletransportarse "mágicamente" porque el servidor acepta las coordenadas sin validar la entrada, etc. Puede hacerlo incluso con el cifrado, pero eso significa que ha tenido que modificar la binario en lugar de simplemente escribir tu propio cliente.

Las jugadas asistidas por herramientas son similares a los botting: la persona sigue jugando, pero la herramienta las guía para tomar decisiones óptimas, en tiempo real, incluso si están perdiendo. Una persona con una herramienta por lo general tendrá un mejor desempeño que una sin ella (asumiendo algo de práctica, por supuesto), por lo que esto generalmente se considera una trampa, y es imposible detectar a un perro guardián para proteger al cliente. Es aún más fácil si puede modificar los paquetes de la forma que desee.

El secuestro de la sesión podría ocurrir si pueden descubrir la parte de la conexión que representa su sesión. Usted ve, no puede simplemente degradar una conexión TLS a un estado no cifrado (al menos, no que yo sepa). Entonces, eso significa que tienes que abandonar la conexión y abrir una nueva. Esta nueva conexión necesita identificar al servidor quién es. Claro, puede usar algún tipo de token, pero es mejor que sea un nonce (un valor de uso único), de lo contrario, el atacante sabrá la información de la sesión, y posiblemente podría engañar al cliente legítimo para que no continúe, quizás repitiendo la conexión a el servidor, etc.

En general, siempre debes usar TLS. Incluso si es un juego de Tic-Tac-Toe o Connect Four. Alguien, en algún lugar, querrá hacer trampa en tu juego, y básicamente puedes evitar clases enteras de trampas simplemente habilitando un canal seguro. Excepto por un costo de inicio muy pequeño, el cifrado es esencialmente gratuito, por lo que no usarlo no tiene beneficios reales. Si se está autenticando de forma segura, no tiene sentido cambiar a un canal no seguro más adelante, ya que ya pagó el precio de inicio.

    
respondido por el phyrfox 12.06.2016 - 09:57
fuente
2

Debería usar el protocolo seguro de WebSockets en su producto.

Dada (extremadamente poca) información que proporcionaste sobre los detalles de tu juego * . Solo la respuesta general es posible para la pregunta ** :

  

¿Qué es lo peor que podría pasar si no habilito wss?

Si diseña y construye un sistema sin tener en cuenta las precauciones de seguridad comunes:

  • en el mejor de los casos no pasará nada;

  • luego hay un área gris completa donde puede terminar perdiendo una oportunidad, o tiene que asignar recursos excesivos para compensar la decisión inicial;

  • en el peor de los casos, no hay límite para las cosas malas que pueden suceder.

* Es imposible evaluar el impacto de utilizar una comunicación no cifrada sin saber con detalle qué es el juego. Particularmente: ¿Cómo estás capitalizando el juego? ¿Están los usuarios jugando unos contra otros? ¿Se incentiva a los usuarios a hacer trampa (ya sea materialmente o en forma de tablas de puntuación)? La información requerida para tal análisis también debe incluir el desarrollo futuro del juego, por ejemplo, qué hacer si se da cuenta y cambia el modelo de forma gratuita y decide capitalizar en el futuro.

** Una auditoría de todos los peligros posibles para el uso de comunicaciones no cifradas en un producto debe tener en cuenta tantos factores que superaría rápidamente los costos de implementación de las técnicas de cifrado adecuadas.

    
respondido por el techraf 12.06.2016 - 08:08
fuente

Lea otras preguntas en las etiquetas