/dev/null: драйвер режима ядра и жульничество
Внимание! Эта статья переполнена техническими подробностями, и в ней рассказывается об инструментах противодействия жульничеству, которые будут не только в League of Legends. В других играх (вроде "Проекта A") они появятся даже раньше, чем в Лиге.
Потратив на исследования около 8 лет и 20 миллионов долларов из государственного бюджета, ведущие ученые смогли установить, что жульничество было изобретено в период между 3,5 миллиардами лет до н. э. и 20 ноября 1985 года. Его точное происхождение до сих пор не определено, но одно известно наверняка: жулики будут всегда.
За последние 20 лет разработка инструментов для взлома и защиты от них переросла из благородной борьбы за контроль над памятью игрового клиента в технологии, которые модифицируют операционную систему – и даже "железо" – компьютера жулика. Современные методы жульничества могут помешать античитам получать необходимые данные, а если последним приходится работать в пользовательском режиме, ситуация еще больше усугубляется.
Что такое пользовательский режим?
Это самый ограниченный уровень привилегий в операционной системе, на котором может запускаться программное обеспечение. Браузер, честно купленный WinRAR и ваши любимые игры работают именно в пользовательском режиме. Такие программы не могут напрямую заглянуть во "внешний мир" вокруг себя – как правило, для чтения и записи данных вне собственных процессов их код должен полагаться на стандартные API операционной системы. Попробуем объяснить с помощью сравнения: если мы (в пользовательском режиме) хотим узнать, что именно было добавлено в наш говяжий гуляш (League of Legends), нам нужно обратиться к поварам на кухне (Microsoft Windows).
Если какой-то доморощенный гений заявит вам: "Лол, мой чит работает на 0-м уровне, его не засечь" – знайте, что он говорит именно об этом. И вот-вот улетит в бан.
В последние годы разработчики читов начали использовать уязвимости или взламывать инструменты проверки подписей Windows, чтобы запускать свои приложения (или их фрагменты) на уровне ядра. И у нас возникает проблема: код, выполняемый на этом уровне, может перехватывать системные вызовы, которые мы используем для получения данных. ПО жуликов меняет их таким образом, чтобы они казались нормальными, а нам сложно было что-то обнаружить. Мы даже видели специализированное аппаратное обеспечение, которое использует DMA1 для чтения и обработки системной памяти – и если все сделано правильно, обнаружить такое вмешательство в пользовательском режиме невозможно2.
И хотя большинство игроков откажутся ставить модифицированную сборку Windows, практика показывает, что пугающее количество жуликов без раздумий готовы стать частью ботнета какого-то парня в обмен на способность атаковать на бегу. В итоге множество современных читов работают на более высоком уровне привилегий, чем наш античит. Вернемся к замечательной кухонной аналогии: когда вы спрашиваете шеф-повара о происхождении мяса в гуляше, какой-то мутный чувак убеждает руководство ресторана, что он "во всем разберется", и отвечает на наш вопрос: "Прямо с фермы, ешьте на здоровье".
1DMA расшифровывается как "Direct Memory Access", то есть "прямой доступ к памяти". Это метод, с помощью которого аппаратное обеспечение может, как вы наверняка догадались, получить доступ сразу к памяти, минуя Windows API. Некоторые из самых продвинутых сообществ жуликов использовали его, чтобы перенаправлять память на отдельный компьютер для ее обработки и получения преимуществ в игре.
2Мы тут же наняли того парня, который разработал методы обнаружения такого рода жульничества.
Зачем вы мне это рассказываете?
Исторически ваша любимая команда по противодействию жульничеству была вынуждена играть в эту игру на пользовательском уровне – и все равно не оставляла от жуликов мокрого места. Нам не приходилось идти на крайние меры благодаря преимуществу в виде стабильной зарплаты и отсутствию необходимости ложиться спать, когда скажет мама. Но как бы нам ни нравилась идея набирающей обороты войны с подростками на поле безопасности, мы теперь входим в мультиигровую вселенную, где линейность времени и какая-никакая потребность в сне поставят крест на этой стратегии.
Поэтому некоторые из будущих игр от Riot будут защищены драйвером режима ядра.
Мне уже начинать паниковать?
Есть целый ряд причин не делать этого.
- Стресс может привести к облысению, а мы не хотим, чтобы у вас мерзла голова.
- Это не дает нам никаких возможностей для слежки, которых не было раньше. Если бы нам нужен был секретный рецепт рождественской запеканки вашей бабушки, мы без проблем могли бы заполучить его и в пользовательском режиме, а затем продать в какое-нибудь кулинарное шоу. Цель этого обновления – следить за целостностью системы (чтобы мы могли доверять получаемым данным) и не давать жуликам вмешиваться в наши игры (чтобы вы не винили вражеское автоприцеливание в собственных неудачах).
- Это не новая технология. Некоторые сторонние системы для противодействия жульничеству – вроде EasyAntiCheat, Battleye и Xigncode3 – уже используют драйвер режима ядра для защиты ваших любимых ААА-игр. Мы просто устанавливаем собственного помощника шеф-повара на кухню Windows, чтобы, задавая вопрос "а это блюдо точно без глютена?", мы были уверены, что получим честный ответ.
- Теперь создавать читы, которые невозможно обнаружить, будет гораздо сложнее. Так что мы сможем защитить вас от автоприцеливания, себя от постов на Reddit, а жуликов от них же самих.
Античит – одна из важнейших составляющих многопользовательской сетевой игры, и мы хотим, чтобы вы играли в мире, в котором не придется ставить под сомнение способности ваших соперников. От жульнической лихорадки нет лекарства, но мы продолжим делать все возможное, чтобы обеспечить вам максимальное качество игры.
Передача завершена, но примерно через четыре мегасекунды я вернусь с продолжением нашего бестселлера "Борьба с жуликами в LoL", в котором расскажу о ботах в ваших играх ARAM.