Драйверы компьютерных игр, которые используются для защиты целостности файлов игры, а также легитимности данных игроков не являются редкостью. Ранее публиковалось несколько обзоров наиболее известных подобных драйверов, например, 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.
Поделиться с друзьями
-->

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


  1. qw1
    25.09.2016 12:41
    +16

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

    Я так понимаю, этого мало. Нужно отозвать цифровую подпись драйвера, чтобы никто не мог воспользоваться старой, дырявой версией, включив её в свой exploit pack


  1. CodeRush
    25.09.2016 13:06
    +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).


    1. nckma
      26.09.2016 11:44

      Интересно, а как это было выявлено? Чтобы обнаружить подобную проблему нужно кропотливо сидеть хотя бы неделю с отладчиком WinDbg или дизассемблировать с Ida и изучать код. Скорее всего кто-то хотел взломать игру и нашел «это».


      1. aspirineilia
        26.09.2016 16:44

        причем перед этим отключает SMEP

        Думаю по этому коду и нашлось каким-то автоматическим анализатором. А дальше раскурили уже спецы что и как происходит.


    1. CodeRush
      26.09.2016 21:56
      +1

      И еще пример. И еще. И RW Everything со своим драйвером, который и подписан, и может вообще все.


  1. dartraiden
    25.09.2016 14:28
    +6

    Сразу вспомнился драйвер защиты Frost от Innova Systems, печально известный тем, что одна из его версий без возражений принимала управляющие команды от любого приложения. Сам драйвер умел, например, скрывать указанные процессы и был подписан валидной цифровой подписью. Эдакий «официальный» руткит.


    1. Saffron
      25.09.2016 18:06
      +5

      Как майкрософт вообще подписывает такие драйвера, и почему не банит на веки вечные их производителей после таких косяков?

      Или о пользователях и их безопасности мелкомягкие способны беспокоиться лишь на словах? Зачем тогда вообще механизм подписей?


      1. Karpion
        26.09.2016 00:20

        Я так понимаю — драйвер подписывается авторами, которые имеют делегированное от MS право подписывать свои драйверы.

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


      1. dartraiden
        26.09.2016 04:30

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

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


        1. dartraiden
          26.09.2016 04:43

          Немного сумбурно вышло уточню:

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


          1. Aquilo
            26.09.2016 16:15

            все драйверы режима ядра, выпущенные после 29 июля 2015 года должны быть подписаны Microsoft.

            То есть, если во время написания левых вирусных драйверов, поставить дату локального времени до 29 июля 2015, то этот механизм защиты не будет работать?


            1. sumanai
              26.09.2016 16:16

              Дата определяется по штампу времени независимого сервера и цифровой подписи на ней, локальное время значения не имеет.


            1. dartraiden
              26.09.2016 19:29

              Под выпуском понимается время подписывания. То есть, драйвер по-любому должен быть подписан: либо до 29.07.2015 легально приобретённой подписью разработчика драйвера (и при подписывании обязательно используется онлайн-сервер удостоверяющего центра, выдавшего этому разработчику сертификат), либо после этой даты — в Microsoft. Локальное время, как верно замечено в комментарии выше, роли не играет.


        1. Evengard
          26.09.2016 07:04
          +1

          Не расскажете про этот способ? Можно в личку.


  1. Denai
    25.09.2016 16:00

    Помню обновление Win7, которое ломало игры от Capcom. Интересно, они по этой же причине ломались или там ещё какие-то секреты


    1. Dolbe
      26.09.2016 11:39
      +1

      Capcom VS Microsoft: 1-1


  1. Goodkat
    25.09.2016 16:56

    Ну а какие могут быть альтернативы таким драйверам?
    Либо все игрушки только на консолях, либо с выполнением части логики игры на сервере, для которого быстро напишут эмулятор, либо DRM для приложений на уровне OS, как это сделано в iOS, который всё равно сломают, либо играть только в DRM-free инди-игры.


    1. qw1
      25.09.2016 17:04
      +3

      DRM-free AAA-игры ))


      1. aspirineilia
        26.09.2016 09:25
        +1

        Ведьмак 3 всем показал что такое возможно.


      1. WayMax
        26.09.2016 11:38
        +1

        Зайдите на gog.com — откроете для себя много нового.


    1. nuclear_skillet21011
      25.09.2016 17:05

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


      1. Smi1e
        25.09.2016 17:55

        Имеется в виду альтернатива с т.з. разработчика для защиты, а не с т.з. пользователя.


      1. Goodkat
        25.09.2016 21:24

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


        1. RiseOfDeath
          26.09.2016 09:17

          У консолей в этом плане есть два недостатка — ограниченный выбор устройств ввода (Можно-ли к иксбоксу или к соньке подключить клаву с мышкой, или мой любимый подаренный на др. джойстик для авиасимуляторов) и ограниченный выбор магазинов приложений. (речь идет именно о легальных копиях ПО, а не о скачивании игр с торрентов)


      1. Pakos
        26.09.2016 17:14

        Отдельный для игр, отдельный для банка, отдельный для котиков, отдельный для госуслуг. Не многовато ли?


    1. vorphalack
      25.09.2016 18:20
      +3

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


    1. Arf
      26.09.2016 00:20

      На самом деле нет, эмулятор написать достаточно сложно и долго.
      Когда на сервере находится только механизм определения лицензии, то это обходится. Но в случае когда там лежат именно элементы игровых механик, таблицы контента и т.д., то требуется работа по фактически повторному созданию куска игры. Как пример до сих пор не взломанных — diablo 3. Были еще какие то, но кажется ни одной взломанной полноценно, так или иначе original game expirience всегда страдает.
      Но такие меры потребуют обязательного стабильного интернет соединения(проблема для игроков) + поддержки серверов от разработчика. Близзард это потянут, их фанаты тоже, более мелкие конторы уже вряд ли.


      1. Deosis
        26.09.2016 06:35
        +3

        За создание подобных игр хочется бить по рукам. Как только отключатся сервера, игра превратится в тыкву.
        Единственное приемлемое решение это f2p, будет потеряно только время.


        1. maniacscientist
          26.09.2016 16:14

          Таких злобных примеров всего два — Prince Of Persia: Forgotten Sands и Dark Spore. Для первой быстренько написали эмулятор, а вторая да, погибла.

          Онлайн от Метелицы — это всё таки нечто большее чем просто сервера


    1. dartraiden
      26.09.2016 19:34

      Тут дело вообще не в DRM и защите от пиратства. Игра вполне могла быть DRM-free и бесплатной.
      Речь в новости об античите. Играть же против читеров банально неинтересно.


      1. Goodkat
        26.09.2016 19:49

        Да, виноват.
        Если DRM ещё как-то можно реализовать в ОС, то с читерами бороться намного сложнее.


  1. Alexey2005
    25.09.2016 18:44
    +1

    Ещё один неприятный побочный эффект подобных защит — невозможность запустить защищаемую игру под wine. А в некоторых случаях (ArcheAge как пример) даже и под VirtualBox не запустится.


  1. niks255
    26.09.2016 00:20
    +1

    А разве не для таких случаев отзыв подписи придуман?


  1. jedai
    26.09.2016 16:14

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