GMEREK Systemy Komputerowe Przemyslaw Gmerek или как Gmer убивает процесс

Тема в разделе "WASM.NT.KERNEL", создана пользователем galenkane, 13 апр 2025 в 15:04.

  1. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    360
    Как Gmer убивает защищенные процессы (вроде руткитов!) - Заглянем под капот
    Привет всем!
    Многие из нас использовали Gmer для поиска и удаления всякой заразы, особенно руткитов. Но задумывались ли вы, как ему удается прибить те процессы, которые намертво сопротивляются стандартному Диспетчеру задач Windows? Руткиты и другие хитрые зловреды часто используют механизмы защиты, чтобы их нельзя было просто так завершить. Давайте разберемся, как Gmer обходит эту защиту с помощью своего драйвера уровня ядра.
    Попытка №1: Вежливый запрос (Пользовательский режим)
    Когда Gmer решает, что процесс (скажем, с PID 1234) нужно завершить, он сначала действует по стандартной схеме Windows. Он использует обычные API-функции: пытается получить доступ к процессу (OpenProcess) с правами на его завершение, и если успешно – вызывает TerminateProcess.
    Проблема в том, что если процесс защищен (как это часто делают руткиты, используя флаги защиты на уровне ядра), то операционная система просто откажет Gmer в доступе. Стандартный метод не сработает.
    План Б: Вызов "тяжелой артиллерии" (Драйвер режима ядра)
    Вот тут-то Gmer и понимает, что нужны более серьезные меры. Его пользовательская часть (тот самый gmer.exe, который мы запускаем) отправляет специальную команду (через DeviceIoControl) своему драйверу, который работает в режиме ядра. Эта команда, по сути, говорит: "Эй, драйвер, стандартный метод не сработал. Заверши-ка принудительно процесс с PID 1234".
    В недрах ядра: Снимаем перчатки
    Теперь в игру вступает драйвер Gmer, обладающий максимальными привилегиями в системе. И вот тут начинается самое интересное:
    1. Получение доступа "с черного хода": Драйвер использует внутренние функции ядра (ZwOpenProcess), чтобы получить собственный, привилегированный дескриптор (handle) к целевому процессу. Этот дескриптор игнорирует стандартные ограничения прав доступа пользовательского режима.
    2. Отключение силового поля (Ключевой трюк!): Драйвер находит в памяти внутреннюю структуру ядра (EPROCESS), которая описывает целевой процесс. Зная точное расположение нужного поля в этой структуре (оно немного отличается в разных версиях Windows), драйвер напрямую изменяет значение этого поля, сбрасывая бит, отвечающий за защиту процесса! Это как найти главный рубильник защиты процесса и просто его выключить.
    3. Финальный удар: Теперь, когда защита процесса деактивирована, драйвер вызывает мощную функцию ядра (ZwTerminateProcess), чтобы завершить процесс. Поскольку флаг защиты был снят, эта команда выполняется успешно, в отличие от попытки из пользовательского режима.
    4. Уборка: Драйвер закрывает полученный им дескриптор процесса и сообщает пользовательской части Gmer об успехе.
    Заключение
    Как видите, Gmer не использует магию. Столкнувшись с защищенным процессом, он прибегает к помощи своего драйвера. Драйвер выполняет прямое низкоуровневое вмешательство в состояние процесса, отключая его защиту перед тем, как отдать команду на принудительное завершение. Это отлично демонстрирует, почему для эффективной борьбы с современными угрозами антируткит-инструментам необходим доступ на уровне ядра.
    Надеюсь, это объяснение было понятным и интересным!
     
    E.D. и Mikl___ нравится это.
  2. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.496
    Адрес:
    Россия, Нижний Новгород
    А что это за магическое поле, которое не даёт убить процесс?
     
    Ahimov нравится это.
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.031
    Вообще это решается отключением наследования привилений ntfs у исполняемого файла и перезагрузкой. Но прога наверное очень полезная.
     
  4. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    171
    Он использует магию. Магию чисел. Поскольку
    :grin:
     
  5. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    201
    > Но задумывались ли вы, как ему удается

    Да. Немного почитаю умные вещи, потом может обсудим.)
     
  6. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    360
    STATUS_IMAGE_CERT_REVOKED при использовании :L

    :grin:
     
  7. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    201
    galenkane,

    Глупое это всё. Вы можете провести атаку, это делается реверсом ядра. Вообще о чём речь, если вы много знаете и знания эти некуда засунуть, то вам помогут.
     
  8. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    360
    ну тема создавалась как обобщение того что под капотом, атаки меня не интересуют
     
  9. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.496
    Адрес:
    Россия, Нижний Новгород
    Так ничего же не ясно. Что там за магические поля и чем вызовы ZwOpenProcess -> ZwTerminateProcess из драйвера отличаются от OpenProcess -> TerminateProcess из юзермода?
     
  10. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    201
    HoShiMin,

    Под копотом такое, что там сам чёрт ноги сломит.

    Не понимаю о чём спор.

    galenkane,

    Опишите задачу подробно, что бы понять можно было.