• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос Как античит понимает, что я играю с kernel читом?

  • Автор темы Автор темы f1nk175
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Май 2023
Сообщения
339
Реакции
9
типо как
 
я ему на ушко шепчу
 
твой kernel драйвер детекто
 
когда грузишь драйвер под него выделяется память, чем больше регион памяти тем легче найти твой драйвер т.к они обычно много не весят, не скрытый системный поток, чтение и запись детект, вариантов много, ищи инфу на UC (noad)
 
1. Проверка цифровой подписи драйвера. В более "популярных" античитах идет проверка на хэш-суммы заявленного драйвера. Т.е. если драйвер маскируется под какой-то оригинальный виндовский драйвер, то античит сравнивает хэш-суммы оригинального и "suspected driver".
2. Не могу сказать за все античиты, но, как правило, идет анализ кода, т.е. трассировка модулей, проверка немаппированных участков кода ( по поводу проверки на немаппированные участки кода - hattab ). Также, понятное дело, проверка SSDT/IDT/GDT/LDT ( The System Service Dispatch Table/Interrupt Dispatch Table ). Лень писать далее - загуглишь.
3. ( Для программистов, имеющих опыт работы в Ring0, я не расскажу ничего нового, можете смело скипать это. )

Также хочу отметить, может быть, не очень актуально, но существует метод для скрытия идентификатора - DKOM ( Direct Kernel Object Manipulation ). Обнаруживается же с помощью анализа ZwQuerySystemInformation. Более подробно рассказывать и тем более давать рабочий POC не собираюсь - все легко гуглится, если тема действительно заинтересовала.
4. Также, если затронуть DMA ( Direct Memory Access ), в античитах по типу Faceit используются инструкции, которые защищают память от прямого доступа к ней. Это изменение IOMMU, а точнее создание разрешенного региона памяти для изменения с помощью устройств DMA, таких как ThunderBolt. Если драйвер пытается обратиться к защищенному региону, то это уже так скажем "ред флаг" для античита.
5. Поговорим еще про SMEP ( Supervisor Mode Execution Prevention ). SMEP запрещает выполнение кода из Ring3 в Ring0. Если драйвер пытается выполнить код из Ring3, то выдается ошибка Page Fault.
1732212790037.png

Код, опять же, я не собираюсь предоставлять. Но если пытаться обойти SMEP, то также стоит избегать флагов CR4 — античиты их тоже замечают. Хоть код защиты я не предоставляю, но ссылку на гитхаб обхода почему бы и не предоставить:
Пожалуйста, авторизуйтесь для просмотра ссылки.

6. Также нередко встречается трассировка указателей процессора, переходы между функциями и т.д. Спросишь, как это работает? Твой процессор записывает последовательность выполняемых инструкций в буфер, и античит анализирует вызовы функций и так далее. Если драйвер подменяет адреса функций ядра, то трассировка как раз-таки укажет на это. Данные, как правило, собираются через регистры MSR.

Это тема очень большая и обширная, так много времени я тупо не могу посвятить объяснению базовых детектов, поэтому разобрал те, которые помню. ( Со временем когда пытался защитить малварь от детекта. )
 
1. Проверка цифровой подписи драйвера. В более "популярных" античитах идет проверка на хэш-суммы заявленного драйвера. Т.е. если драйвер маскируется под какой-то оригинальный виндовский драйвер, то античит сравнивает хэш-суммы оригинального и "suspected driver".
2. Не могу сказать за все античиты, но, как правило, идет анализ кода, т.е. трассировка модулей, проверка немаппированных участков кода ( по поводу проверки на немаппированные участки кода - hattab ). Также, понятное дело, проверка SSDT/IDT/GDT/LDT ( The System Service Dispatch Table/Interrupt Dispatch Table ). Лень писать далее - загуглишь.
3. ( Для программистов, имеющих опыт работы в Ring0, я не расскажу ничего нового, можете смело скипать это. )

Также хочу отметить, может быть, не очень актуально, но существует метод для скрытия идентификатора - DKOM ( Direct Kernel Object Manipulation ). Обнаруживается же с помощью анализа ZwQuerySystemInformation. Более подробно рассказывать и тем более давать рабочий POC не собираюсь - все легко гуглится, если тема действительно заинтересовала.
4. Также, если затронуть DMA ( Direct Memory Access ), в античитах по типу Faceit используются инструкции, которые защищают память от прямого доступа к ней. Это изменение IOMMU, а точнее создание разрешенного региона памяти для изменения с помощью устройств DMA, таких как ThunderBolt. Если драйвер пытается обратиться к защищенному региону, то это уже так скажем "ред флаг" для античита.
5. Поговорим еще про SMEP ( Supervisor Mode Execution Prevention ). SMEP запрещает выполнение кода из Ring3 в Ring0. Если драйвер пытается выполнить код из Ring3, то выдается ошибка Page Fault.
Посмотреть вложение 291110
Код, опять же, я не собираюсь предоставлять. Но если пытаться обойти SMEP, то также стоит избегать флагов CR4 — античиты их тоже замечают. Хоть код защиты я не предоставляю, но ссылку на гитхаб обхода почему бы и не предоставить:
Пожалуйста, авторизуйтесь для просмотра ссылки.

6. Также нередко встречается трассировка указателей процессора, переходы между функциями и т.д. Спросишь, как это работает? Твой процессор записывает последовательность выполняемых инструкций в буфер, и античит анализирует вызовы функций и так далее. Если драйвер подменяет адреса функций ядра, то трассировка как раз-таки укажет на это. Данные, как правило, собираются через регистры MSR.

Это тема очень большая и обширная, так много времени я тупо не могу посвятить объяснению базовых детектов, поэтому разобрал те, которые помню. ( Со временем когда пытался защитить малварь от детекта. )
спасибо
 
Назад
Сверху Снизу