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

Олдфаг
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
2,996
Реакции[?]
1,275
Поинты[?]
5K
когда грузишь драйвер под него выделяется память, чем больше регион памяти тем легче найти твой драйвер т.к они обычно много не весят, не скрытый системный поток, чтение и запись детект, вариантов много, ищи инфу на UC (noad)
 
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
362
Реакции[?]
92
Поинты[?]
24K
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.

Это тема очень большая и обширная, так много времени я тупо не могу посвятить объяснению базовых детектов, поэтому разобрал те, которые помню. ( Со временем когда пытался защитить малварь от детекта. )
 
Начинающий
Статус
Оффлайн
Регистрация
14 Май 2023
Сообщения
223
Реакции[?]
4
Поинты[?]
5K
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.

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