Всем доброго времени суток!
Возникла такая тема по поводу обнаружения кейлоггеров режима ядра(драйверов-фильтров), перекопал достаточно много материала, но не нашел ничего конкретного. На некоторых источниках(как пример, в книге Зайцева "rootkits,spyware, keyloggers ...") промелькнула такая фраза по поводу мониторинга стека драйвера keyboardclass, но как? Посоветуйте, люди добрые, хотя бы в какую сторону копать, в ядреном режиме новичок.
Здравствуйте, woors, Вы писали:
W>Всем доброго времени суток! W>Возникла такая тема по поводу обнаружения кейлоггеров режима ядра(драйверов-фильтров), перекопал достаточно много материала, но не нашел ничего конкретного. На некоторых источниках(как пример, в книге Зайцева "rootkits,spyware, keyloggers ...") промелькнула такая фраза по поводу мониторинга стека драйвера keyboardclass, но как? Посоветуйте, люди добрые, хотя бы в какую сторону копать, в ядреном режиме новичок.
W>Заранее спасибо.
Для начала — разобраться, что такое драйверы устройств, PnP-стек, фильтры класса, фильтры устройств, legacy-фильтры. После этого станет понятно, как проверять целостность стека.
Здравствуйте, woors, Вы писали:
W>Возникла такая тема по поводу обнаружения кейлоггеров режима ядра(драйверов-фильтров), перекопал достаточно много материала, но не нашел ничего конкретного.
Драйверы клавиатуры, в том числе фильтры, регистрируются стандартно, через реестр.
Например, фильтры класса клавиатуры прописываются в ключе реестра
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e96b-e325-11ce-bfc1-08002be10318}, в
значениях UpperFilters и LowerFilters, аналогичные ключи существуют и для фильтров
уровня устройств. Один из вариантов защиты — мониторить данные ветки на предмет
добавления туда новых записей.
В malware частенько используется другой способ — хуки Major Table, в этом случае для
обнаружения драйвера нужно ставить наблюдение за Major Table всех драйверов стека.
Еще можно установить перехват на загрузку модулей — PsSetLoadImageNotifyRoutine и
отслеживать загрузку драйверов, не входящих в состав Windows.
Мне интересно вот что — допустим, поймали Вы некоторое "тело" в стеке клавиатуры.
Как определить, что это именно кейлоггер, а не обычный легальный драйвер, который, к
примеру, просто исправляет ошибки работы с питанием нижележащего драйвера ?
O>В malware частенько используется другой способ — хуки Major Table, в этом случае для O>обнаружения драйвера нужно ставить наблюдение за Major Table всех драйверов стека.
Этот способ сейчас представляет скорее историческую ценность. От современных руткитов стоит ожидать, например, модификацию списка устройств.
O>Мне интересно вот что — допустим, поймали Вы некоторое "тело" в стеке клавиатуры. O>Как определить, что это именно кейлоггер, а не обычный легальный драйвер, который, к O>примеру, просто исправляет ошибки работы с питанием нижележащего драйвера ?
Обычно фиксируется "чистое" состояние и любые его изменения считаются нарушением.
D>А что можно сделать, если драйвер просто мониторит таблички _gafAsyncKeyStateXXX (аналогично вызову GetAsyncKeyState из UserMode) ?
Ну, наверное, сообщать о таком драйвере пользователю и пусть сам думает? Ещё, как вариант, можно переместить эту таблицу в памяти, исправив ссылки на неё внутри Win32k, но во-первых, кейлоггер может попытаться сделать аналогичное, во-вторых, вряд ли PG отнесётся к этому спокойно на 64-битных системах.
Здравствуйте, acDev, Вы писали:
D>А что можно сделать, если драйвер просто мониторит таблички _gafAsyncKeyStateXXX (аналогично вызову GetAsyncKeyState из UserMode) ?
Наверное, уже ничего Драйвер в системе — система скомпрометирована.
Он может маскировать свое присутствие и противодействовать попыткам сделать что-то с ним.
С такими угрозами лучше бороться превентивно, не допуская их попадания на компьютер.
А отлавливать "тварей" на уже зараженной машине — последнее дело...
D>А что можно сделать, если драйвер просто мониторит таблички _gafAsyncKeyStateXXX (аналогично вызову GetAsyncKeyState из UserMode) ?
поставить в дебаг регистрах бряку на доступ к памяти и отловить всех читателей по-одному.
Как много веселых ребят, и все делают велосипед...
Re[6]: Обнаружение кейлоггеров режима ядра
От:
Аноним
Дата:
28.03.13 09:20
Оценка:
Здравствуйте, ononim, Вы писали:
D>>А что можно сделать, если драйвер просто мониторит таблички _gafAsyncKeyStateXXX (аналогично вызову GetAsyncKeyState из UserMode) ? O>поставить в дебаг регистрах бряку на доступ к памяти и отловить всех читателей по-одному.
Удачи ставить дебаг регистровые бряки на х64 системах