Seguridad de distribución servidor-cliente

0

Pida disculpas por adelantado si este es el sitio de SE incorrecto para este tema, aunque debería ser una coincidencia bastante apropiada.

Estoy creando un videojuego en el que una de las funciones disponibles para los usuarios será el multijugador en línea. Estaré lanzando el software del servidor de forma gratuita (y de código abierto) con la esperanza de que los usuarios puedan ejecutar sus propios servidores modificables para sus comunidades.

Los servidores pueden utilizar los recursos de "vainilla" libremente, sin embargo, algunos pueden optar por agregar sus propios recursos, como texturas y modelos. Lo que me gustaría lograr es permitir que los clientes (con una acción explícita del usuario) descarguen los activos necesarios.

Para agregar una capa de complejidad adicional, algunos de estos activos están disponibles para descarga pública, mientras que otros son de propiedad exclusiva y solo están disponibles a través del servidor.

Mi principal preocupación es la mitigación de archivos maliciosos a través del software de distribución. Sin embargo, mi "gracia salvadora" puede ser que todos los archivos que se distribuyen sean .png , .txt , .xml , .yml y .mdl , y todos serán utilizables en sus formas existentes sin modificación .

Los archivos no se enviarán al cliente, sino que el cliente los extraerá. Esto eliminará cualquier problema con el servidor que tiene acceso al sistema de archivos del cliente, lo que realmente podría hacer daño.

Ahora, para la parte de la pregunta:

Además de un gran descargo de responsabilidad, el usuario debe saber que es su problema si algo sucede, ¿dónde debo ubicar mis preocupaciones con respecto a la seguridad y la validez de los archivos?

Todas las comunicaciones hacia y desde el servidor se cifrarán, probablemente utilizando algo similar al protocolo de Señal. Además, cuando un administrador del servidor carga un archivo, haré que el servidor genere un hash que permita que el software del cliente verifique que el archivo no se modificó en tránsito, aunque nada más.

La mayoría de los archivos transmitidos serán .txt , que por sí solos no deberían representar ningún peligro inherente (a mi entender). Además, ninguno de los archivos se ejecutan. El código en la máquina del cliente analizará los archivos y descartará todo lo que no sea el formato correcto.

Entiendo que no se pueden abordar todas las inquietudes aquí porque el tema es bastante amplio, aunque se apreciarán los indicadores sobre cualquier problema potencial o cualquier otra cosa que se tenga en cuenta, en general.

    
pregunta Foxtrek_64 16.01.2017 - 14:36
fuente

1 respuesta

-1

Algunas cosas:

Parte 1/4, los recursos del servidor:

  

Para agregar una capa adicional de complejidad, algunos de estos activos son   disponible para descarga pública, mientras que algunos son propietarios y solo   disponible a través del servidor.

¿Y cómo evita que un cliente lo descargue y luego tome el archivo y lo distribuya libremente? No, en absoluto, cierto. Necesita renunciar a ese plan, no hay protección efectiva.

Parte 2/4, la conexión:

¿Protocolo de señal y algunos hashes simples de los datos transmitidos? No hagas rodar el tuyo ... No estoy seguro acerca de Signal, pero usa por ejemplo. TLS y lo tienes todo. Cifrado, integridad, autenticidad ...

Parte 3/4, los puntos finales:

Archivos, es decir. byte blobs, no hagas daño. Los errores en los programas de lectura de archivos lo hacen. Y sí, incluso las imágenes y los archivos de texto ... no importa qué tipo de archivo: si el programa tiene un error, ciertos contenidos del archivo pueden provocar acciones maliciosas.

¿Qué significa esto para ti? Alimentar una imagen al sistema operativo para mostrarla está bien. Si el sistema operativo tiene un error, no es su culpa ni usted está en condiciones de solucionarlo. Lo mismo para las librerías de terceros, etc. (aunque los errores de notificación deben ser una de sus tareas).
Pero tu programa es tan importante. El error no necesita estar en la librería de gráficos, sistema operativo, etc. Incluso si su programa simplemente lee la imagen de la red y la pasa, podría haber un error allí (desbordamiento de búfer ...) que puede llevar a una vulnerabilidad.
Realmente no puedo decirle que no haga errores, porque todos lo hacen, pero tenga en cuenta que cada una de sus propias líneas de código tiene el potencial de convertirse en una infección para todos los usuarios.

Y no, nunca, no por ninguna razón, confíe en el otro lado de la red y / o en cualquier archivo previamente guardado. No confíe en el cliente que el otro lado es su propio servidor, y viceversa. Compruebe todo lo que necesita ser revisado. Lo mismo para los archivos guardados: si los carga, ejecute las mismas comprobaciones que para el contenido recién recibido de la red.

Parte 4/4, tramposos:

De nuevo, como servidor, no confíes en el cliente. Esto incluye información como "Soy el número de cliente X" (se puede falsificar, introducir un sistema de autenticación seguro), "Mi puntuación más alta es XYZ" (jaja. Guárdelo en el servidor y siempre calcule los cambios allí, sin ninguna aportación del cliente), "Acabo de disparar al enemigo Foo y eso lo mató" (calcula en el lado del servidor si hay un enemigo foo, qué arma tienes, qué daño puede hacer, qué salud tuvo Foo, dónde apuntaste tu arma, si hay un obstáculo entre usted y Foo, si su último disparo fue demasiado reciente para disparar de nuevo, etc., etc.) y así sucesivamente.

El cliente siempre miente al servidor. Y el servidor a los clientes también. Todos los archivos son malos. Y todos los jugadores son malvados también. Tenga eso en cuenta, y el 90% del trabajo de seguridad está hecho.

    
respondido por el deviantfan 16.01.2017 - 15:25
fuente

Lea otras preguntas en las etiquetas