ШПИОН ДЛЯ САМОГО СВЯТОГО ЗАЙЦЕВ ОЛЕГ Спецвыпуск: Хакер, номер #070, стр. 070-040-1 (HTTP://Z-OLEG.COM/SECUR) ВСЕ, ЧТО МОЖНО И НЕЛЬЗЯ ЗНАТЬ ПРО КЕЙЛОГГЕРЫ КЛАВИАТУРНЫЕ ШПИОНЫ — КЕЙЛОГГЕРЫ — БРАЗУЮТ БОЛЬШОЕ СЕМЕЙСТВО ЗЛОВРЕДНЫХ ПРОГРАММ ДЛЯ ШПИОНАЖА ЗА РАБОТОЙ ПОЛЬЗОВАТЕЛЕЙ. ПЕРВЫЕ КЕЙЛОГГЕРЫ ПОЯВИЛИСЬ ЕЩЕ ВО ВРЕМЕНА MSDOS – ТОГДА ОНИ ПРЕДСТАВЛЯЛИ СОБОЙ ОБРАБОТЧИКИ ПРЕРЫВАНИЯ КЛАВИАТУРЫ РАЗМЕРОМ ОКОЛО 1 КБ. ОДНАКО ФУНКЦИИ КЕЙЛОГГЕРА ЗА ПРОШЕДШЕЕ ВРЕМЯ НЕ ИЗМЕНИЛИСЬ – ПО-ПРЕЖНЕМУ ЕГО ПЕРВИЧНОЙ ЗАДАЧЕЙ ЯВЛЯЕТСЯ СКРЫТНАЯ РЕГИСТРАЦИЯ КЛАВИАТУРНОГО ВВОДА С ПОСЛЕДУЮЩЕЙ ЗАПИСЬЮ СОБРАННОЙ ИНФОРМАЦИИ НА ДИСК ИЛИ ПЕРЕДАЧЕЙ ПО СЕТИ. Кейлоггер представляет большую угрозу для безопасности пользователя. С точки зрения антивируса, это не вирус и не троянская программа, поэтому многие антивирусные пакеты если и ловят кейлоггеры, то только с расширенной базой. Другая проблема связана с тем, что кейлоггеров известно великое множество, да и написать его не составляет особого труда — как следствие, сигнатурный поиск против них малоэффективен. В этой статье мы расскажем о том, какие бывают кейлоггеры, как их пишут, а также – какие бывают антикейлоггеры и как их выбирают ;). [основные принципы построения кейлоггера] Рассмотрим основные принципы, которые используют (или могут потенциально использовать) клавиатурные шпионы. Стандартная клавиатурная ловушка. Это самый распространенный метод: состоит в установке ловушки типа WH_KEYBOARD. Код ловушки должен размещаться в DLL, которая проецируется в адресное пространство GUI-процессов по мере необходимости. Понятное дело, что эта библиотека весьма заметна и позволит следить только за GUI-процессами. Ловушка типа WH_JOURNALRECORD. Ее отличие от WH_KEYBOARD состоит в том, что код ловушки может располагаться в приложении, установившем ловушку, – как следствие, не требуется таскать DLL. Метод имеет некоторые особенности, которые мы рассмотрим далее на примере. Периодический опрос состояния клавиатуры. Примитивный до безобразия метод, состоящий в циклическом опросе состояния клавиатуры с большой скоростью. Как ни странно, но этот метод применятся даже некоторыми коммерческими продуктами. Установка драйвера-фильтра. Этот метод, равно как и ловушка, является документированным методом слежения за клавиатурным вводом. Фильтр подключается к стеку клавиатуры при помощи IoAttachDevice, а подключение обычно ведется к \\Device\\KeyboardClass0. Фильтр отлавливает IRP типа IRP_MJ_READ и устанавливает в них свою процедуру завершения при помощи функции IoSetCompletionRoutine. Подмена клавиатурного драйвера. Данный метод неприемлем для коммерческого кейлоггера, так как его создатели не могут знать заранее, какого типа клавиатура применяется на ПК пользователя. Шпион-руткит. Может реализовываться как в UserMode, так и в режиме ядра. В UserMode слежение за клавиатурным вводом может быть построено за счет перехвата обмена процесса csrss.exe драйвером клавиатуры или при помощи слежения за вызовами API-функций типа GetMessage и PeekMessage. В KernelMode классическим методом является поиск KeServiceDescriptorTableShadow и перехват в ней ряда функций, в частности PeekMessage. У руткита есть еще одно преимущество: он может перехватить еще 2-3 функции для маскировки. Самое смешное состоит в том, что от руткита-кейлоггера не спасает даже экранная клавиатура, которая часто преподносится как панацея от кейлоггера любого типа. Про UserMode и KernelMode ты сможешь прочитать в моей книги, которая должна выйти в конце лета. |