Драйвер компьютерной игры Street Fighter V отключает встроенный механизм защиты Windows

    Драйверы компьютерных игр, которые используются для защиты целостности файлов игры, а также легитимности данных игроков не являются редкостью. Ранее публиковалось несколько обзоров наиболее известных подобных драйверов, например, nProtect GameGuard и Blizzard Lockdown. Такие драйверы могут использовать в своих целях перехваты API-вызовов на уровне ядра Windows, постоянное сканирование виртуального адресного пространства процессов, отслеживание доступа операций к системному реестру и др.



    Несколько дней назад компания Capcom уведомила своих пользователей об обновлении anti-hack драйвера (Capcom.sys), который используется для контроля за целостностью файлов игры и предотвращает возможную компрометацию содержимого памяти процесса игры с целью предотвращения читерства. Однако, пользователей в этом обновлении ждал неприятный сюрприз в одной из функций драйвера. Она позволяет отключать защитную меру ядра SMEP и исполнять код по указателю, полученному из пользовательского режима.

    SMEP (Supervisor Mode Execution Prevention) уже является довольно известной мерой, о которой было написано несколько обзоров. Она требует поддержки как со стороны микропроцессора, так и со стороны ОС (Windows 8+). SMEP используется для блокирования операции исполнения кода пользовательского режима (Ring 3) в режиме ядра (RIng 0). Как бы это не выглядело странно (код режима ядра является самым привилегированным и имеет возможность доступа ко всей памяти в системе), SMEP является хорошей мерой для блокирования активности LPE-эксплойтов, которые часто передают управление на блок кода, расположенный в пользовательской части виртуального адресного пространства.

    Драйверы Windows организованы таким образом, что для взаимодействия с клиентом из Ring 3, используется специальный интерфейс под названием IOCTL. Драйвер регистрирует специальный обработчик в ядре Windows, который может быть использован из пользовательского режима известной API-функцией DeviceIoControl. Приложение при использовании этого API передает драйверу код требуемой функции, набор аргументов и указывает входной, а также выходной буферы памяти для передачи аргументов и получения результата.

    Новое обновление Capcom.sys использует интерфейс IOCTL и две функции с кодами 0xAA012044, 0xAA013044. Особенность этих функций заключается в том, что они позволяют клиенту пользовательского режима исполнить код в режиме ядра по указателю, полученному оттуда, причем перед этим отключает SMEP. После исполнения функции SMEP включается обратно установкой соответствующего бита регистра CR4. Очевидно, что отключение используется для исполнения кода в режиме ядра из пользовательского режима.


    Рис. Функция Capcom.sys, которая исполняет указанную в IOCTL-запросе функцию с отключенным SMEP.

    Очевидно, что так как драйвер компьютерной игры подписан цифровой подписью и предоставляет такой потенциально опасный интерфейс для доступа из пользовательского режима, он создает в системе бэкдор. Сторонний код может использовать данный драйвер для исполнения своего кода в Ring 0.

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

    We are in the process of rolling back the security measures added to the PC version of Street Fighter V. After the rollback process to the PC version, all new content from the September update will still be available to players. We apologize for the inconvenience and will have an update on the time-frame for the PC rollback solution soon.
    ESET NOD32
    0,00
    Компания
    Поделиться публикацией

    Комментарии 34

      +16
      Компания Capcom уже выпустила обновление игры, закрывающее данную уязвимость.

      Я так понимаю, этого мало. Нужно отозвать цифровую подпись драйвера, чтобы никто не мог воспользоваться старой, дырявой версией, включив её в свой exploit pack
        +14
        Вот так примерно и выглядит добрая половина драйверов режима ядра от сторонних производителей. Людям нужно было решить проблему, и они ее решили, а как это выглядит с точки зрения безопасности — всем наплевать. Вот еще один пример похожего поведения.
        The ASUS «Generic Function Service» includes a couple of drivers, ASMMAP.sys / ASMMAP64.sys,
        the version resources describe them as «Memory mapping Driver».

        This description is very accurate, it has a pair of ioctls, 0x9C402580 and 0x9C402584, that map or
        unmap to the calling process' address space ANY PART OF PHYSICAL MEMORY, with READ/WRITE permissions.
        Using code that has been copypasta'd a bunch of times, but seems to originate from a sample driver for NT 3.1.
        1993 vintage code, everybody.

        It also has a couple of other ioctls that allocate or free some RAM and gives the physical and virtual pointers
        to it, and another one that can make any I/O request (does in/out byte/word/dword with parameters given in the ioctl buffer, and returns the result for the case of in).
          0
          Интересно, а как это было выявлено? Чтобы обнаружить подобную проблему нужно кропотливо сидеть хотя бы неделю с отладчиком WinDbg или дизассемблировать с Ida и изучать код. Скорее всего кто-то хотел взломать игру и нашел «это».
            0
            причем перед этим отключает SMEP

            Думаю по этому коду и нашлось каким-то автоматическим анализатором. А дальше раскурили уже спецы что и как происходит.
            +1
            И еще пример. И еще. И RW Everything со своим драйвером, который и подписан, и может вообще все.
            +6
            Сразу вспомнился драйвер защиты Frost от Innova Systems, печально известный тем, что одна из его версий без возражений принимала управляющие команды от любого приложения. Сам драйвер умел, например, скрывать указанные процессы и был подписан валидной цифровой подписью. Эдакий «официальный» руткит.
              +5
              Как майкрософт вообще подписывает такие драйвера, и почему не банит на веки вечные их производителей после таких косяков?

              Или о пользователях и их безопасности мелкомягкие способны беспокоиться лишь на словах? Зачем тогда вообще механизм подписей?
                0
                Я так понимаю — драйвер подписывается авторами, которые имеют делегированное от MS право подписывать свои драйверы.

                Механизм подписей нужен для того, чтобы в системе могли работать только авторизованные доверенными производителями программы. И чтобы можно было доказать вину автора программы.
                  0
                  Именно поэтому в Windows 10 все драйверы, работающие в режиме ядра, теперь обязаны получать подпись от Microsoft. До Windows 10 достаточно было подписи самого разработчика.

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

                    до Windows 10 для любого драйвера достаточно было подписи, приобретаемой разработчиком у Comodo, VeriSign и т.п. Бонусом существует способ обойтись без подписи вообще (не отключение этой защиты, а полный её обход прозрачно для пользователя).
                    начиная с Windows 10 (с августовского обновления) добавились условия: если включена безопасная загрузка (SecureBoot), то все драйверы режима ядра, выпущенные после 29 июля 2015 года должны быть подписаны Microsoft. Если SecureBoot отключена, то поведение аналогично предыдущим версиям Windows.
                      0
                      все драйверы режима ядра, выпущенные после 29 июля 2015 года должны быть подписаны Microsoft.

                      То есть, если во время написания левых вирусных драйверов, поставить дату локального времени до 29 июля 2015, то этот механизм защиты не будет работать?
                        0
                        Дата определяется по штампу времени независимого сервера и цифровой подписи на ней, локальное время значения не имеет.
                          0
                          Под выпуском понимается время подписывания. То есть, драйвер по-любому должен быть подписан: либо до 29.07.2015 легально приобретённой подписью разработчика драйвера (и при подписывании обязательно используется онлайн-сервер удостоверяющего центра, выдавшего этому разработчику сертификат), либо после этой даты — в Microsoft. Локальное время, как верно замечено в комментарии выше, роли не играет.
                        +1
                        Не расскажете про этот способ? Можно в личку.
                    0
                    Помню обновление Win7, которое ломало игры от Capcom. Интересно, они по этой же причине ломались или там ещё какие-то секреты
                      +1
                      Capcom VS Microsoft: 1-1
                      0
                      Ну а какие могут быть альтернативы таким драйверам?
                      Либо все игрушки только на консолях, либо с выполнением части логики игры на сервере, для которого быстро напишут эмулятор, либо DRM для приложений на уровне OS, как это сделано в iOS, который всё равно сломают, либо играть только в DRM-free инди-игры.
                        +3
                        DRM-free AAA-игры ))
                          +1
                          Ведьмак 3 всем показал что такое возможно.
                            +1
                            Зайдите на gog.com — откроете для себя много нового.
                            0

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

                              0
                              Имеется в виду альтернатива с т.з. разработчика для защиты, а не с т.з. пользователя.
                                0
                                Ага, этот отдельный компьютер для игр и прочих радостей называтся консоль — тем более, они сейчас здорово в цене упали.
                                  0
                                  У консолей в этом плане есть два недостатка — ограниченный выбор устройств ввода (Можно-ли к иксбоксу или к соньке подключить клаву с мышкой, или мой любимый подаренный на др. джойстик для авиасимуляторов) и ограниченный выбор магазинов приложений. (речь идет именно о легальных копиях ПО, а не о скачивании игр с торрентов)
                                  0
                                  Отдельный для игр, отдельный для банка, отдельный для котиков, отдельный для госуслуг. Не многовато ли?
                                  +3
                                  денува? ее конечно тоже уже ломают, но она, внезапно, не творит херни. за системный драйвер «защиты» просто нужно бить по морде до тех пор пока ответственные не перестанут шевелиться, а потом еще и обоссать.
                                    0
                                    На самом деле нет, эмулятор написать достаточно сложно и долго.
                                    Когда на сервере находится только механизм определения лицензии, то это обходится. Но в случае когда там лежат именно элементы игровых механик, таблицы контента и т.д., то требуется работа по фактически повторному созданию куска игры. Как пример до сих пор не взломанных — diablo 3. Были еще какие то, но кажется ни одной взломанной полноценно, так или иначе original game expirience всегда страдает.
                                    Но такие меры потребуют обязательного стабильного интернет соединения(проблема для игроков) + поддержки серверов от разработчика. Близзард это потянут, их фанаты тоже, более мелкие конторы уже вряд ли.
                                      +3
                                      За создание подобных игр хочется бить по рукам. Как только отключатся сервера, игра превратится в тыкву.
                                      Единственное приемлемое решение это f2p, будет потеряно только время.
                                        0
                                        Таких злобных примеров всего два — Prince Of Persia: Forgotten Sands и Dark Spore. Для первой быстренько написали эмулятор, а вторая да, погибла.

                                        Онлайн от Метелицы — это всё таки нечто большее чем просто сервера
                                      0
                                      Тут дело вообще не в DRM и защите от пиратства. Игра вполне могла быть DRM-free и бесплатной.
                                      Речь в новости об античите. Играть же против читеров банально неинтересно.
                                        0
                                        Да, виноват.
                                        Если DRM ещё как-то можно реализовать в ОС, то с читерами бороться намного сложнее.
                                      +1
                                      Ещё один неприятный побочный эффект подобных защит — невозможность запустить защищаемую игру под wine. А в некоторых случаях (ArcheAge как пример) даже и под VirtualBox не запустится.
                                        +1
                                        А разве не для таких случаев отзыв подписи придуман?
                                          0
                                          интересно, как microsoft подписывает такие драйвера? неужели у них нет тестов, которые должны следить за попытками возможного отключения внутренних механизмов защиты?

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

                                          Самое читаемое