Перехват системных сервисов в x64, ищу пример
От: M_A_V  
Дата: 24.05.09 08:57
Оценка:
В Windows XP и Vista 32bit использую перехват SDT для некоторых системных сервисов.

Необходимо также сделать аналогичный функционал в XP 64 и Vista 64. Но насколько я понял это не такая простая задача по причине Patch Guard и потому что в SDT теперь хранятся смещения.

Подскажите, есть ли где готовые примеры с исходниками, успешно перехватывающие SDT в указанных ОС?
Буду премного благодарен!
Re: Перехват системных сервисов в x64, ищу пример
От: Аноним  
Дата: 24.05.09 09:07
Оценка:
M_A>Необходимо также сделать аналогичный функционал в XP 64 и Vista 64. Но насколько я понял это не такая простая задача по причине Patch Guard и потому что в SDT теперь хранятся смещения.
M_A>Подскажите, есть ли где готовые примеры с исходниками, успешно перехватывающие SDT в указанных ОС?
M_A>Буду премного благодарен!
С какой целью ищете? Для трояна/руткита или честного приложения? Интересуюсь не по идейным соображениям, а по тому что для честного приложения про хукинг сдт можно забыть — мс, узнав про ваш тип хукинга, его тут же нейтрализует в следующем апдейте и ваша апликуха испустит дух, и хорошо еще если не угробит при этом юзеру систему.
Трояну конечно же можно спокойно положить прибор на систему юзера, потому хукингом он может пользоваться безо всяких ограничений) Единственное — вам нужен будет сертификат чтоб загрузить драйвер в ядро. А получить вам его скорее всего не удасться)
Re: Перехват системных сервисов в x64, ищу пример
От: x64 Россия http://x64blog.name
Дата: 24.05.09 09:38
Оценка:
M_A>Подскажите, есть ли где готовые примеры с исходниками, успешно перехватывающие SDT в указанных ОС?

Успешно перехватывать SDT-сервисы на x64 можно только двумя способами:

1. Загрузившись раньше PG.
2. Релизовав обход PG.

Первое достаточно трудно реализуемо, второе в общем случае не реализуемо вообще. В общем, примеров подобных я не видел, но настоятельно рекомендую попытаться найти аналогичный способ выполнить поставленную задачу (не через SDT), пусть и тоже недокументированный. Кстати, указатель на SDT не экспортируется из ядра, это раз. И её структура на 64-битных системах немного другая, это два. Хотя это уже нюансы, легко решаемые.
JID: x64j@jabber.ru
Re: Перехват системных сервисов в x64, ищу пример
От: 8086  
Дата: 24.05.09 10:54
Оценка:
В х64 для этого существует Data Filtering Support
Re[2]: Перехват системных сервисов в x64, ищу пример
От: x64 Россия http://x64blog.name
Дата: 24.05.09 12:42
Оценка:
8>В х64 для этого существует Data Filtering Support

Этот Data Filtering Support есть суть следующее:

  • ObRegisterCallbacks()
  • CmRegisterCallbackEx()
  • PsSetCreateProcessNotifyRoutineEx()

    И всё, господа. При чём даже эти крохи есть только для Vista и выше. И более того: 1 и 2 ещё нельзя просто так использовать, нужно заморачиваться с получением персональной Altitude для своего фильтра. Так что, господа, нету альтернативы-то документированной.
  • JID: x64j@jabber.ru
    Re[2]: Перехват системных сервисов в x64, ищу пример
    От: M_A_V  
    Дата: 24.05.09 14:41
    Оценка:
    Здравствуйте, Аноним, Вы писали:
    А>С какой целью ищете? Для трояна/руткита или честного приложения? Интересуюсь не по идейным соображениям, а по тому что для честного приложения про хукинг сдт можно забыть — мс, узнав про ваш тип хукинга, его тут же нейтрализует в следующем апдейте и ваша апликуха испустит дух, и хорошо еще если не угробит при этом юзеру систему.
    Хуки нужны для честного приложения. Расширение функционала терминального сервера. В приложении надо перехватить некоторые АПИ, в частности недокументированные.
    Re[2]: Перехват системных сервисов в x64, ищу пример
    От: M_A_V  
    Дата: 24.05.09 14:46
    Оценка:
    Здравствуйте, x64, Вы писали:

    x64>2. Релизовав обход PG.

    Я видел в интернете несколько статей с обходом PatchGuard, правда кода рабочего к сожалению нет.

    x64>настоятельно рекомендую опытаться найти аналогичный способ выполнить поставленную задачу (не через SDT), пусть и тоже недокументированный.

    Боюсь что это нереально. Как мне например перехватить ZwCreateEvent ?

    А как насчет перехвата сплайсом или например установить свой обработчик на Syscall? Работает ли такой подход?
    Re[3]: Перехват системных сервисов в x64, ищу пример
    От: M_A_V  
    Дата: 24.05.09 14:51
    Оценка:
    Кстати, господа, кто что скажет на это: http://code.google.com/p/easyhook-continuing-detours/ ?
    Re[3]: Перехват системных сервисов в x64, ищу пример
    От: x64 Россия http://x64blog.name
    Дата: 24.05.09 15:06
    Оценка:
    M_A>Я видел в интернете несколько статей с обходом PatchGuard, правда кода рабочего к сожалению нет.

    Код есть, но он устаревший уже. Сам PG постоянно меняется и в конце концов он придёт к такому виду, в котором затраты на его обход будут несоизмеримо превосходить затраты на создание самого продукта.

    M_A>Как мне например перехватить ZwCreateEvent ?


    В этом случае помогут хуки на методы типов, например.

    M_A>А как насчет перехвата сплайсом или например установить свой обработчик на Syscall? Работает ли такой подход?


    Нет.
    JID: x64j@jabber.ru
    Re[4]: Перехват системных сервисов в x64, ищу пример
    От: M_A_V  
    Дата: 24.05.09 15:19
    Оценка:
    Здравствуйте, x64, Вы писали:
    x64>Код есть, но он устаревший уже. Сам PG постоянно меняется и в конце концов он придёт к такому виду, в котором затраты на его обход будут несоизмеримо превосходить затраты на создание самого продукта.
    Вы не смотрели вот этот код? http://code.google.com/p/easyhook-continuing-detours/downloads/list Заявлен обход PacthGuard а также хуки.

    M_A>>Как мне например перехватить ZwCreateEvent ?

    x64>В этом случае помогут хуки на методы типов, например.
    ObRegisterCallbacks? Так он же только в Windows Vista SP1 и выше есть. А мне надо и для Win XP 64.

    M_A>>А как насчет перехвата сплайсом или например установить свой обработчик на Syscall? Работает ли такой подход?

    x64>Нет.
    А вот как же антивирусы тогда действуют? Ведь им для нормальной защиты надо отслеживать большинство действий в системе?
    Re[5]: Перехват системных сервисов в x64, ищу пример
    От: Аноним  
    Дата: 24.05.09 15:26
    Оценка: +1
    M_A>>>Как мне например перехватить ZwCreateEvent ?
    x64>>В этом случае помогут хуки на методы типов, например.
    M_A>ObRegisterCallbacks? Так он же только в Windows Vista SP1 и выше есть. А мне надо и для Win XP 64.
    В ХРх64 нету патчгварда потому мона обычным хукингом. Но ХРх64 — мертворожденная ось. На нее можно положить.

    M_A>>>А как насчет перехвата сплайсом или например установить свой обработчик на Syscall? Работает ли такой подход?

    x64>>Нет.
    M_A>А вот как же антивирусы тогда действуют? Ведь им для нормальной защиты надо отслеживать большинство действий в системе?
    Достаточно открытие процессов/потоков (ObRegisterCallbacks), ключей реестра (CmRegisterCallback(Ex)), файловой системы (фильтры или минимильтры). Все это документировано. Но повторяю — чтобы загрузить драйвер в ядро нужно иметь сертификат подписанный правильной конторой. А чтобы получить такой сертификат нужно быть юридтическим лицом. Вы юридическое лицо или физическая морда? Если второе — можете пока для начала озабодится поиском сертификата, ибо задача эта боюсь будет несоизмеримо сложнее обхода текущей имплементациии ПГ.
    Re[4]: Перехват системных сервисов в x64, ищу пример
    От: x64 Россия http://x64blog.name
    Дата: 24.05.09 15:26
    Оценка:
    M_A>Кстати, господа, кто что скажет на это: http://code.google.com/p/easyhook-continuing-detours/ ?

    И что ты хочешь услышать? Для запуска на Vista x64 драйвер должен иметь цифровую подпись. Для этого ты (твоя организация) должна будет купить сертификат. Если вдруг Microsoft (или кто там) узнает, что твой драйвер, подписанный таким вот доверенным сертификатом, занимается тем, что обходит PatchGuard, то однажды драйвер может просто перестать загружаться на пользовательских системах. Потому что сертификат будет отозван. Прецеденты уже были и запросто могут повториться. И до кучи подумай ещё вот над чем:

    1. Если ты обходишь PatchGuard полностью отключая его, то таким образом ты ставишь безопасность всей системы под угрозу, потому что хуки может ставить теперь не только твой драйвер, но и всякого рода руткиты.
    2. Даже если метод обхода PatchGuard'а таки работает в коде, который ты привёл по ссылке, кто тебе сказал, что он и дальше будет работать? Завтра Microsoft выпустит какой-нибудь хотфикс и всё, системы пользователей "вдруг" начнут падать.

    Тебе оно надо? Думаю, что нет.
    JID: x64j@jabber.ru
    Re[6]: Перехват системных сервисов в x64, ищу пример
    От: M_A_V  
    Дата: 24.05.09 15:34
    Оценка:
    А>В ХРх64 нету патчгварда потому мона обычным хукингом. Но ХРх64 — мертворожденная ось. На нее можно положить.
    Да вообще x64 не шибко пользуются пока. На будущее надо реализовать поддержку 64-бит систем, в крайнем случае начиная с Vista. Вот почему и хотелось реализовать эти функции как они уже есть. А с новыми колбеками придется весь драйвер переписывать. Хочется чтобы работало как раньше, и все. И не гнатся за каждыми прихотями МС.

    M_A>>А вот как же антивирусы тогда действуют? Ведь им для нормальной защиты надо отслеживать большинство действий в системе?

    А>Достаточно открытие процессов/потоков (ObRegisterCallbacks), ключей реестра (CmRegisterCallback(Ex)), файловой системы (фильтры или минимильтры). Все это документировано. Но повторяю — чтобы загрузить драйвер в ядро нужно иметь сертификат подписанный правильной конторой. А чтобы получить такой сертификат нужно быть юридтическим лицом. Вы юридическое лицо или физическая морда? Если второе — можете пока для начала озабодится поиском сертификата, ибо задача эта боюсь будет несоизмеримо сложнее обхода текущей имплементациии ПГ.
    Юр лицо. Я читал, что сертификат стоит около 600 баксов в год, хотелось бы подешевле конечно и чтобы просто подписал и все- а не проходить еще какие-то проверки.
    Re[5]: Перехват системных сервисов в x64, ищу пример
    От: x64 Россия http://x64blog.name
    Дата: 24.05.09 15:36
    Оценка:
    M_A>Вы не смотрели вот этот код? http://code.google.com/p/easyhook-continuing-detours/downloads/list Заявлен обход PacthGuard а также хуки.

    Отписал выше по ветке.

    M_A>>>Как мне например перехватить ZwCreateEvent ?

    x64>>В этом случае помогут хуки на методы типов, например.
    M_A>ObRegisterCallbacks?

    Нет, см. здесь
    Автор: Andrew.W Worobow
    Дата: 17.01.08
    .

    M_A>А вот как же антивирусы тогда действуют? Ведь им для нормальной защиты надо отслеживать большинство действий в системе?


    Для реализации антивирусного функционала вполне достаточно документированных возможностей ядра.
    JID: x64j@jabber.ru
    Re[7]: Перехват системных сервисов в x64, ищу пример
    От: x64 Россия http://x64blog.name
    Дата: 24.05.09 15:41
    Оценка:
    M_A>Юр лицо. Я читал, что сертификат стоит около 600 баксов в год, хотелось бы подешевле конечно и чтобы просто подписал и все- а не проходить еще какие-то проверки.

    Проверки нужны только в случае WHQL-подписи. В твоём случае достаточно купить сертификат, скачать кросс-сертификат, подписать драйвер обоими и радоваться жизни. До тех пор, конечно, пока твой сертификат не отзовут, когда узнают, какими грязными кривохуками в ядре ты занимаешься.
    JID: x64j@jabber.ru
    Re[8]: Перехват системных сервисов в x64, ищу пример
    От: M_A_V  
    Дата: 24.05.09 15:45
    Оценка:
    Здравствуйте, x64, Вы писали:

    x64>Проверки нужны только в случае WHQL-подписи. В твоём случае достаточно купить сертификат, скачать кросс-сертификат, подписать драйвер обоими и радоваться жизни. До тех пор, конечно, пока твой сертификат не отзовут, когда узнают, какими грязными кривохуками в ядре ты занимаешься.


    Спасибо за ответы! :) Скорее всего буду смотреть таки в сторону документированных функций, благо время еще не поджимает, и можно их поизучать, в частности как они: подходят для наших задач или нет.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.