Compartir a través de


Procedimientos recomendados de instalación para videojuegos multijugador masivos en línea.

En este artículo se describe cómo crear un diseño de cadena de confianza en la instalación cliente de videojuegos multijugador masivos en línea (MMOG) y sistemas de actualización personalizadas de juegos que funcionan bien en Windows y el modelo de seguridad de Windows Vista y Windows 7. Este modelo está diseñado para habilitar la aplicación de parches de títulos MMOG, al tiempo que admite cuentas de usuario estándar, con acceso restringido al disco duro y al registro del sistema.

¿Por qué los clientes MMOG tienen diferentes requisitos que los juegos tradicionales comprados al por menor?

La naturaleza en constante evolución de los MMOG y la necesidad de estar siempre conectados hacen que sea requisito fundamental implementar actualizaciones periódicas del código cliente y contenido para subsanar vulnerabilidades de seguridad y ampliar la experiencia de juego. Al haber actualizaciones casi diarias, en los MMOG se debe realizar una administración cuidadosa para garantizar un sistema fácil de usar. Esto difiere del modelo de compra tradicional en el que se pueden incluir algunas revisiones o parches poco antes de la fecha de envío del producto para la venta al público. La tecnología limitada en la aplicación de parches y revisiones para usuarios de Windows Installer que ofrece el sistema operativo está diseñada para manejar pocas revisiones y parches de aplicaciones y no el gran volumen con elevada frecuencia que necesitan los MMOG. Por ello, a menudo es necesario desarrollar sistemas de aplicación de parches y revisiones personalizados para adaptarse al contexto de los MMOG, así como los requisitos especiales específicos de cada MMOG concreto que se esté desarrollando.

Como hay tantos equipos conectados a Internet, Windows Vista y Windows 7 tienen restricciones y medidas de seguridad más estrictas para los usuarios, lo que limita el acceso que las aplicaciones tienen a varias áreas del disco duro. A diferencia de Windows XP, estas restricciones están habilitadas en el modo predeterminado de las cuentas de usuario. Se deben tener en cuenta estas restricciones al diseñar un juego, el archivo ejecutable y los datos, así como el sistema de aplicación de parches y revisiones correspondiente. Para obtener más información sobre las medidas de seguridad del sistema operativo, consulte Control de cuentas de usuario para desarrolladores de juegos.

Introducción al modelo de cadena de confianza

El modelo de actualización personalizado presentado en estas notas del producto se basa en tener instalada una aplicación de cargador de confianza en la carpeta protegida Archivos de programa, al tiempo que se mantienen los archivos ejecutables y los datos de los juegos en un área compartida accesible para todos los usuarios. La cadena de confianza empieza con el cargador que realiza las comprobaciones de validez en los archivos binarios y los datos del juego antes iniciarse.

La cadena de confianza comienza con un cargador de confianza

El cargador de confianza debe tener suficiente lógica para poder comprobar que el ejecutable del juego y otros archivos binarios no se han alterado antes de iniciar el juego. El cargador también puede comprobar los datos del juego con la frecuencia necesaria, pero el tamaño de los datos suele ser demasiado grande para comprobarse de una sola vez. Hay un método alternativo que consiste en usar un patrón de muestreo que garantice que la comprobación de todo el conjunto de datos se produzca durante un período de tiempo prolongado. La aplicación del cargador puede incluir un motor de aplicación de revisiones de juegos, que aporta un método de confianza para integrar las actualizaciones en el juego instalado.

Todo está validado en el servidor, ¿por qué debo preocuparme si el cliente recibe un ataque?

Es imposible confiar en que el cliente no se ponga en peligro; por lo tanto, es habitual que los servidores de los MMOG validen todos los datos recibidos del cliente. Aunque este proceso puede identificar clientes de juegos en peligro o trampas dentro del universo del juego, el servidor no puede detectar fácilmente todos los problemas a los que se puede exponer el cliente del juego. Es importante reforzar la protección de los hackers que quieran aprovecharse de su cliente como plataforma para atacar su servicio, a otros usuarios o incluso como vector para atacar los propios equipos cliente. La aplicación de técnicas de firma de código y verificación de datos puede ayudar a detectar clientes en peligro antes de que se ejecuten. Dado que para el mecanismo de aplicación de revisiones es necesario exponer archivos binarios ejecutables y DLL que no están protegidos por los permisos estándar de solo lectura en Archivos de programa, es esencial validar estos archivos antes de abrirlos para proteger la seguridad general del sistema.

Este modelo no se encarga de los casos de usuarios administradores malintencionados donde el propio cargador puede estar amenazado, sino que se centra en proteger a los usuarios estándar de que se ejecute código manipulado por accidente. Las técnicas tradicionales de validación de servidor-cliente son la única posible forma de frenar a los administradores de sistemas cliente malintencionados.

Construcción de la aplicación de carga de confianza

Lectura en segundo plano

Los lectores deben familiarizarse con la siguiente documentación, que aporta detalles sobre la tecnología básica para garantizar los procedimientos recomendados para la confianza basada en software.

Firma de códigos

Firmas Authenticode para desarrolladores de juegos

SignTool

SignTool en MSDN

En la sección siguiente se detallan las API que se deben usar para construir la aplicación del cargador, que admitan el tipo de disco para la instalación y verificación de confianza.

Instalación del cargador de confianza y de la herramientas de revisiones

El cargador de confianza y la versión básica de la utilidad de revisiones deben instalarse en la carpeta protegida Archivos de programa en el disco duro, igual que en las instalaciones tradicionales. Para la instalación y aplicación de revisiones de la aplicación del cargador se necesitan derechos de administrador, por lo que es importante minimizar la frecuencia de las actualizaciones del cargador para que los usuarios finales no tengan que pedir permiso a menudo, aunque se podría usar la aplicación de revisiones limitada para usuarios de Windows Installer y así evitar la solicitud de permisos para las revisiones del cargador.

Consulte el artículo Aplicar revisiones de software de juegos en Windows XP, Windows Vista y Windows 7.

Instalación de archivos ejecutables, archivos DLL y datos de juegos

Para facilitar las actualizaciones estándar del juego para usuarios sin privilegios administrativos, el ejecutable, los archivos DLL y los datos del juego deben instalarse en un área del disco duro que sea accesible para todos los usuarios. El sistema operativo tiene habilitada la ruta "Todos los usuarios/Datos de aplicación" que se puede usar como ubicación predeterminada para la instalación. SHGetFolderPath debe usarse con la clave CSIDL_COMMON_APPDATA para determinar la ruta del archivo en esta ruta. Es importante que no se realice ninguna suposición sobre la ruta a la que se devuelve esta clave, ya que la puede configurar el usuario.

La instalación debe modificar o administrar los permisos de carpeta para habilitar el acceso all-user-shared-write (escritura compartida para todos los usuarios) necesario para actualizar el título. Con los permisos correctos, la funcionalidad de la utilidad de actualización del juego del programa del cargador puede aplicar fácilmente revisiones sin tener privilegios especiales a través de cualquier cuenta de usuarios, incluidas las veces en que los usuarios estándar lo inician.

Código de modificación de lista de control de acceso

En Windows XP, tendrá que ejecutar el código para cambiar manualmente la lista de control de acceso (ACL); aquí tiene una función de ejemplo que le enseña cómo hacerlo:

HRESULT ChangeACLtoAllowUserRW( WCHAR* strDir )
{
    EXPLICIT_ACCESS explicitaccess;
    PACL NewAcl = NULL;
    DWORD dwError;

    BuildExplicitAccessWithName( &explicitaccess, L"BUILTIN\\Users",
                                 GENERIC_ALL, GRANT_ACCESS,
                                 SUB_CONTAINERS_AND_OBJECTS_INHERIT );
                                 
    dwError = SetEntriesInAcl( 1, &explicitaccess, NULL, &NewAcl );
    if( dwError == ERROR_SUCCESS) 
    {
        dwError = SetNamedSecurityInfo( strDir, SE_FILE_OBJECT,
                                        DACL_SECURITY_INFORMATION,
                                        NULL, NULL, NewAcl, NULL );
        if( dwError == ERROR_SUCCESS)
        {
            if( NewAcl != NULL ) AccFree( NewAcl );
            return S_OK;
        }
    }

    if( NewAcl != NULL ) AccFree( NewAcl );
    return E_FAIL;
}

Este código de ejemplo también funciona en Windows Vista y Windows 7; sin embargo, también tiene disponible para usar la utilidad de línea de comandos icacls para editar las ACL del archivo.

La herramienta incluye información de ayuda detallada cuando se ejecuta. Aquí tiene, sin embargo, un ejemplo para usar la herramienta:

icacls "C:\Users\All Users\Game" /grant Rex:(D,WDAC)

Al usar esto, se concederá al usuario permisos Rex Delete y Write DAC a la carpeta del juego almacenada en las ubicaciones de Todos los usuarios del disco duro.

Instalaciones para usuarios avanzados

Cuando la instalación la realizan usuarios avanzados, es posible que un usuario quiera indicar manualmente la ruta de instalación de los juegos. La selección de directorio debe estar restringida a uno que esté fuera de los archivos de programa para asegurarse de que la carpeta se encuentra en un área de uso compartido del disco duro. La ruta seleccionada por el usuario solo debe usarse para los ejecutables y los datos del juego, ya que los ejecutables del cargador de juegos y de la herramienta de revisiones siempre deben instalarse en la carpeta segura Archivos de programa para mejorar la seguridad.

Verificación de confianza del cargador

Windows cuenta con la función WinVerifyTrust para comprobar la validez del código firmado y se basa en los servicios criptográficos del sistema operativo. La función está totalmente documentada en MSDN: Función WinVerifyTrust.

Para obtener más información sobre el uso de la función para determinar si un archivo ejecutable del programa está firmado con un certificado válido, consulte Programa C de ejemplo: Verificación de la firma de un archivo PE.

Para comprobar que el ejecutable del juego firmado es de confianza para ejecutarse a través del cargador, la acción Verificación genérica es suficiente:

Valor

WINTRUST_ACTION_GENERIC_VERIFY_V2

Significado

Verifique un archivo u objeto mediante el proveedor de directivas Authenticode.

La función toma el argumento de una estructura de entrada con información que el proveedor de confianza necesita para procesar la acción correspondiente. Normalmente, como en el caso de ejemplo anterior, la estructura incluye información que identifica el objeto que el proveedor de confianza debe evaluar.

El formato de la estructura es específico del identificador de acción. Para obtener más información sobre una estructura de ejemplo del proveedor de WinTrust, consulte la estructura WINTRUST_DATA.

Si el proveedor de confianza comprueba que el sujeto es de confianza para la acción correspondiente, el valor devuelto es cero. Ningún otro valor, aparte de cero, debe considerarse una devolución correcta.

Validación de datos

El mecanismo de codiseño solo admite la firma de algunos tipos específicos de archivos, como ejecutables, DLL, paquetes de Windows Installer (archivos .msi) y archivos de gabinete (.cab). La API WinVerifyTrust no debe usarse para comprobar que los archivos de datos grandes (archivos .cab, por ejemplo) no se han alterado, ya que se producen algunos problemas con el rendimiento y la estabilidad al validar archivos muy grandes. Los ejecutables del programa tienden a ser lo suficientemente pequeños como para que se produzca una verificación total de confianza con el proveedor de WinTrust, aunque los archivos de datos de los juegos suelen ocupar muchos gigabytes de tamaño. El método adoptado por el cargador para la verificación de los datos del juego debe ser uno en el que se pruebe una pequeña muestra del conjunto de datos durante el tiempo de ejecución del juego. Este modelo distribuye el coste de las pruebas de verificación mientras dure la experiencia de juego y puede ofrecer una experiencia de usuario fluida sin tiempos de espera largos. Para ello, es posible que se necesite organizar los datos de forma concienzuda. Algunos MMOG emplean un método basado en base de datos que permite administrar, mantener y comprobar si los recursos del juego son correctos a lo largo del tiempo.

Desde el punto de vista de la seguridad, el código de cliente debe diseñarse para no confiar en los archivos de datos, aunque se use algún tipo de validación de datos básica con el cargador de confianza. Se deben emplear comprobaciones de encabezados, hashes y otras verificaciones de integridad tradicionales. La tarea para proteger el código de E/S del cliente también debe realizarse mediante técnicas como pruebas de vulnerabilidades, así como aprovechar las herramientas automáticas de análisis de código estático, como el modificador /analyze en Visual Studio 2005 y Visual Studio 2008 (disponible en Visual Studio Team System y el compilador gratuito que se incluye con el SDK de Windows).

Para obtener más información sobre la seguridad del software, consulte Procedimientos recomendados de seguridad en el desarrollo de juegos.