¿Cuáles son los riesgos reales de abrir puertos para juegos de varios jugadores?

7

Tenemos una aplicación de capacitación empresarial multiusuario desarrollada con el motor de juego Unity y estamos discutiendo las implicaciones de seguridad de agregar una regla de Firewall de Windows Defender que abra globalmente un puerto específico para esa aplicación en los sistemas donde se ejecuta. Debido a la arquitectura de la aplicación, el conjunto de rutas ejecutables no se conoce en el momento de la instalación, por lo que no hemos descubierto una mejor manera de incluir en la lista blanca solo el puerto requerido, solo los ejecutables que necesitamos que abrir globalmente el puerto requerido.

La aplicación se ejecuta con una cuenta que no es de administración y se instala con un instalador que actualmente no requiere ningún privilegio elevado. No hace E / S de disco general, solo lee sus propios archivos de datos y escribe los registros en ubicaciones codificadas. Los sistemas en los que se ejecuta la aplicación no están en el dominio corporativo y no se utilizan para ningún otro fin (no deben tener datos confidenciales almacenados en ellos).

Existe cierta preocupación acerca de las implicaciones de seguridad de la apertura global de un puerto. Me parece que los riesgos del mundo real son bastante bajos. Podemos elegir un puerto que no sea utilizado por ninguna otra aplicación o servicio que se ejecute en la máquina, por lo que el único riesgo real sería que alguien descubra un ataque exitoso de escalada de privilegios remotos en la propia aplicación mientras se estaba ejecutando (un riesgo que es algo inherente a una aplicación de tipo de juego multijugador / multiusuario). Puede que me falten algunas posibles implicaciones de seguridad aquí, sin embargo. Estoy interesado en escuchar los pensamientos de la gente sobre cuán grande es el problema de seguridad en la práctica.

    
pregunta mattnewport 01.02.2018 - 18:28
fuente

2 respuestas

8

El riesgo de abrir un puerto es que la aplicación de escucha puede ser explotada. Esto significa que, por ejemplo, si se encuentra un día cero de Unity, estos sistemas estarían en riesgo. Hace solo medio mes, se encontró un error de ejecución remota de código en el Editor de Unity ( CVE-2017-12939 ). Tenga en cuenta que esto afectó al editor, no a los juegos creados por él. Se descubren nuevos errores de seguridad todo el tiempo, por lo que cualquier aplicación que escuche a través de un puerto abierto podría ser atacada.

Asegúrese de que el puerto solo esté abierto para la aplicación específica, para evitar que el puerto esté abierto para otras aplicaciones que pueda instalar en el futuro.

Si estás paranoico y quieres reducir el riesgo, hay algunas opciones.

¿Necesita un puerto de escucha?

Si crea la aplicación de manera que solo los servidores escuchen y los clientes inicien las conexiones, no es necesario que abra un puerto (a menos que también tenga un firewall de salida en esos clientes). Esto también le ahorra la molestia de tener que reenviar puertos manualmente en dispositivos NAT en su red.

Cree una cuenta de usuario con privilegios mínimos para la aplicación

Usted mencionó que su aplicación solo necesita derechos de solo lectura en algunos archivos en una carpeta específica. puede crear una nueva cuenta de usuario en los sistemas en los que instala la aplicación y otorgarle privilegios solo a esa carpeta. Si lo hace, asegúrese de que la aplicación se ejecute con esa cuenta de usuario. Esto significa que si un atacante explota la aplicación, tendrá más problemas para escalar los privilegios. Sin embargo, esto requiere mucho trabajo adicional y es solo para personas verdaderamente paranoicas.

    
respondido por el Snappie 07.02.2018 - 09:35
fuente
3

Estoy de acuerdo con tu análisis.

Comenzando desde la parte superior, abrir un puerto significa que el tráfico arbitrario (potencialmente malicioso) puede y se enrutará al proceso que escucha en ese puerto. Usted está garantizando que este juego será lo único que podría estar escuchando en ese puerto.

  

Podemos elegir un puerto que no sea utilizado por ninguna otra aplicación o servicio que se ejecute en la máquina

Por lo tanto, el alcance del ataque es la aplicación del juego, como señala:

  

el único riesgo real sería que alguien descubriera un ataque exitoso de escalada de privilegios remotos en la propia aplicación mientras se ejecutaba

Entonces, la pregunta se reduce a: ¿cuánto confía en que una aplicación de juego esté diseñada teniendo en cuenta la seguridad, y maneje adecuadamente todas las posibles entradas mal formadas en ese puerto? Personalmente, no confiaría mucho en eso. La respuesta de @ Snappie confirma esto.

Debido a que no confiamos en que la aplicación se endurezca, debemos tratarla como "potencialmente comprometida" y realizarla de manera adecuada. Pregúntate a ti mismo "si esta caja fuera totalmente protegida y estuviera completamente bajo el control de un atacante, ¿qué daño podría hacer?". Parece que ya estás pensando en la dirección correcta, así que yay, ¡buen trabajo!

  

Los sistemas en los que se ejecuta la aplicación no están en el dominio corporativo y no se utilizan para ningún otro propósito (no deben tener datos confidenciales almacenados en ellos).

    
respondido por el Mike Ounsworth 09.02.2018 - 22:14
fuente

Lea otras preguntas en las etiquetas