Поделиться через


Рекомендации по установке массовых многопользовательских игр в Интернете

В этой статье описывается создание цепочки доверия для установки клиента массовых многопользовательских игр (MMOG) и пользовательских систем обновления игр, которые хорошо работают с Windows и моделью безопасности Windows Vista и Windows 7. Этот подход предназначен для включения исправления заголовков MMOG при поддержке стандартных учетных записей пользователей, которые имеют ограниченный доступ к жесткому диску и системного реестра.

Почему клиенты MMOG имеют разные требования к традиционным розничным приобретенным играм

Постоянно подключенный и развивающийся характер MMOG делает его фундаментальным требованием обеспечить регулярные обновления клиентского кода и содержимого для устранения уязвимостей безопасности и расширения игрового процесса. С потенциалом почти ежедневных обновлений сценарий MMOG требует тщательного управления, чтобы обеспечить удобство работы с пользователем. Это отличается от традиционной модели розничной покупки, где небольшое количество исправлений может быть предоставлено близко к дате розничного корабля продукта. Технология ограниченного исправления для пользователей установщика Windows, предоставляемая операционной системой, предназначена для обработки небольшого количества исправлений приложений, а не большого количества и высокой частоты, необходимой mmOG. Поэтому часто необходимо разработать пользовательские системы исправления для решения потребностей MMOG, включая все особые требования, характерные для конкретной разработки MMOG.

Так как многие компьютеры подключены к Интернету, Windows Vista и Windows 7 имеют более жесткие ограничения безопасности и меры безопасности для пользователей, что ограничивает доступ к приложениям, имеющим различные области жесткого диска. В отличие от Windows XP, эти ограничения включены в режиме по умолчанию для учетных записей пользователей. Эти ограничения необходимо учитывать при проектировании макета игры, исполняемого файла и данных, а также связанной системы исправления. Дополнительные сведения о мерах безопасности, предоставляемых операционной системой, см. в разделе "Управление учетными записями пользователей для разработчиков игр".

Обзор подхода к цепочке доверия

Пользовательский подход к обновлению, представленный в этом техническом документе, основан на наличии надежного приложения загрузчика, установленного в защищенной папке Program Files, сохраняя исполняемые файлы и данные игр в общей области, доступной для всех пользователей. Цепочка доверия начинается с загрузчика, который выполняет проверки действительности в двоичных файлах игры и данных перед запуском.

цепочка доверия начинается с надежного загрузчика

Надежный загрузчик должен иметь достаточно логики, чтобы убедиться, что исполняемый файл игры и другие двоичные файлы не были изменены перед запуском игры. Загрузчик также может проверять данные игры по мере необходимости, однако размер игровых данных обычно слишком велик, чтобы его можно было проверять каждый раз в одном проходе. Альтернативный подход — использовать шаблон выборки, который гарантирует, что проверка всего набора данных происходит в течение длительного периода времени. Приложение-загрузчик может содержать подсистему исправления игры, которая предоставляет достойный метод для интеграции обновлений с установленной игрой.

Все проверяется на сервере, почему я должен беспокоиться, если мой клиент взломал?

Невозможно доверять тому, что клиент не скомпрометирован; Поэтому для серверов MMOG обычно проверяется все данные, полученные от клиента. Хотя эта обработка может идентифицировать скомпрометированные или обманывание клиентов игр в игровой вселенной, сервер не может легко определить все проблемы, которым может быть предоставлен клиент игры. Важно укрепить защиту от хакеров, желающих использовать клиент в качестве платформы для атак на службу, других пользователей или даже вектора для атак на клиентские компьютеры. Применение методов подписывания кода и проверки данных может помочь обнаружить скомпрометированные клиенты до их выполнения. Так как механизм исправления требует предоставления исполняемых файлов и двоичных файлов DLL, которые не защищены стандартными разрешениями только для чтения в Program Files, перед запуском этих файлов важно для общей системы безопасности.

Эта модель не пытается справиться с сценарием злоумышленника администратора, где сам загрузчик может стать скомпрометирован, но фокусируется на защите стандартных пользователей от случайного изменения кода. Традиционные методы проверки клиента сервера действительно возможны только для вредоносных системных администраторов.

Создание приложения-загрузчика trust-worthy

Фоновое чтение

Читатели должны ознакомиться со следующей документацией, которая содержит подробные сведения о базовой технологии для обеспечения оптимальной практики доверия на основе программного обеспечения.

Подписывание кода

Подписывание Authenticode для разработчиков игр

SignTool

SignTool в MSDN

В следующем разделе описаны API, которые следует использовать для создания приложения загрузчика, который поддерживает макет диска для установки и проверки доверия.

Установка доверенного загрузчика и исправления

Доверенный загрузчик и базовая версия программы исправления должна быть установлена в защищенной папке Program Files на HDD так же, как и в традиционных установках. Установка и исправление приложения загрузчика требуют прав администратора, поэтому важно свести к минимуму частоту обновления для загрузчика, чтобы конечные пользователи не должны часто повышать уровень, хотя установщик Windows с ограниченными пользователями может использоваться для предотвращения повышения прав для исправлений загрузчика.

См. статью "Исправление игрового программного обеспечения" в Windows XP, Windows Vista и Windows 7.

Установка исполняемых файлов игры, библиотек DLL и данных

Чтобы упростить обновления стандартного пользователя игры без прав администратора, исполняемые файлы игр, библиотеки DLL и данные должны быть установлены в область жесткого диска, доступного для записи для всех пользователей. Операционная система предоставляет область "Все данные приложения пользователей", которую можно использовать в качестве расположения по умолчанию для установки. SHGetFolderPath следует использовать с ключом CSIDL_COMMON_APPDATA, чтобы определить путь к файлу для этой области. Важно, чтобы не было допущений о пути, к которому возвращается этот ключ, так как он может быть настраиваемым пользователем.

Установка должна изменить разрешения папки или управлять ими, чтобы обеспечить доступ для общего доступа для записи всех пользователей, необходимых для обновления заголовка. С правильными разрешениями функция средства обновления игры программы загрузчика может легко исправить игру без необходимости специальных привилегий от любой учетной записи пользователей, включая время запуска стандартных пользователей.

код изменения списка контроль доступа

Для Windows XP вам потребуется выполнить код, чтобы вручную изменить список управления доступом (ACL), вот пример функции, демонстрирующей, как это сделать:

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;
}

Этот пример кода также будет работать для Windows Vista и Windows 7; однако они также предоставляют программе командной строки icacls для редактирования ACLS-файлов, которые можно использовать вместо этого.

Средство предоставляет подробную справку при выполнении, однако одним из примеров использования для этого средства является:

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

Это использование предоставит пользователю разрешения rex Delete and Write DAC в папку игры, хранящуюся в областях жесткого диска "Все пользователи".

Установка для расширенных пользователей

Для расширенных сценариев установки пользователей пользователю может потребоваться указать путь установки игр вручную. Выбор каталога должен быть ограничен одним из внешних файлов программы, чтобы убедиться, что папка находится в действительно общей области жесткого диска. Выбранный пользователем путь должен использоваться только для игр exes и данных, так как игры Loader и Patcher exes всегда должны быть установлены в папке secure Program Files для повышения безопасности.

Проверка доверия загрузчика

Windows предоставляет функцию WinVerifyTrust для проверки допустимости подписанного кода и основана на криптографических службах в операционной системе. Функция полностью документирована в MSDN: Функция WinVerifyTrust .

Дополнительные сведения об использовании функции для определения того, подписан ли исполняемый файл программы допустимым сертификатом, см. в примере программы C: проверка подписи PE-файла.

Чтобы убедиться, что подписанный исполняемый файл игры является надежным для выполнения из загрузчика, действие универсальной проверки будет достаточно:

Ценность

WINTRUST_ACTION_GENERIC_VERIFY_V2

Значение

Проверьте файл или объект с помощью поставщика политик Authenticode.

Функция принимает аргумент входной структуры, содержащий сведения, необходимые поставщику доверия для обработки указанного действия. Как правило, как и в предыдущем примере, структура содержит сведения, определяющие объект, который должен оценивать поставщик доверия.

Формат структуры зависит от идентификатора действия. Дополнительные сведения о примере структуры для поставщика WinTrust см. в разделе WINTRUST_DATA Структура.

Если поставщик доверия проверяет, является ли субъект доверенным для указанного действия, возвращаемое значение равно нулю. Никакое другое значение, кроме нуля, не должно считаться успешным возвратом.

Проверка данных

Механизм назначения кода поддерживает только подписывание нескольких типов файлов, включая исполняемые файлы, библиотеки DLL, пакеты установщика Windows (.msi файлы) и файлы кабинетов (.cab). API WinVerifyTrust не следует использовать для проверки того, что большие файлы данных (например, .cab файлы) не были изменены, так как при проверке очень больших файлов возникают некоторые проблемы с производительностью и стабильностью. Исполняемые файлы программы, как правило, достаточно малы, чтобы проверка доверия выполнялось с помощью поставщика WinTrust, но файлы данных для игр часто являются областью многих гигабайтов в размере. Подход, принятый загрузчиком для проверки игровых данных, должен быть одним из тех случаев, когда небольшой образец набора данных проверяется во время выполнения игры. Этот подход распространяет стоимость тестов проверки на протяжении всего жизненного опыта игры и может обеспечить простой пользовательский интерфейс без длительного времени ожидания. Для этого может потребоваться тщательная организация данных. Некоторые MMOG используют подход к базе данных для управления, поддержания и проверки правильности игровых ресурсов с течением времени.

С точки зрения безопасности клиентский код должен быть разработан для того, чтобы не доверять файлам данных, даже если используется какая-то базовая проверка данных с доверенным загрузчиком. Следует использовать проверки заголовков, хэши и другие традиционные проверки целостности. Кроме того, следует использовать такие методы, как нечеткое тестирование, а также использование средств автоматического анализа статического кода, таких как переключатель /analysis в Visual Studio 2005 и Visual Studio 2008 (доступный в Visual Studio Team System и бесплатный компилятор, который поставляется с пакетом SDK для Windows).

Дополнительные сведения о безопасности программного обеспечения см. в рекомендациях по обеспечению безопасности в разработке игр.