инги програмного типу
Клавіатурні шпигуни (кейлоггери) користувацького режиму - найбільш прості як для реалізації, так і для виявлення, оскільки для перехоплення вони використовують виклики відомих і добре документованих функцій програмного інтерфейсу Win32 API.
Установка пастки для клавіатурних повідомлень
Дана методика є найбільш поширеною для клавіатурних шпигунів, а суть її полягає в застосуванні механізму пасток (hook) операційної системи. Пастки дозволяють спостерігати за повідомленнями, які обробляються вікнами інших програм. Установка і видалення пасток виробляються за допомогою добре документованих функцій бібліотеки user32.dll (функція SetWindowsHookEx дозволяє встановити пастку, UnhookWindowsHookEx - зняти її). При установці пастки вказується тип повідомлень, для яких повинен викликатися обробник пастки. Зокрема, існує два спеціальних типи пасток: WH_KEYBOARD і WH_MOUSE - для реєстрації подій клавіатури і миші відповідно. Пастка може бути встановлена ??для заданого потоку і для всіх потоків системи, причому останнє дуже зручно для побудови клавіатурного шпигуна.
Код обробника подій пастки повинен бути розташований в DLL. Ця вимога пов'язана з тим, що DLL з обробником пастки проектується системою в адресний простір всіх GUI (Graphical user interface) -процесів. Цікавою особливістю є те, що проектування DLL відбувається не в момент установки пастки, а при отриманні GUI-процесом першого повідомлення, що задовольняє параметрам пастки.
Методика пасток дуже проста і ефективна, але у неї є ряд недоліків. Одним з них можна вважати те, що DLL з пасткою проектується в адресний простір всіх GUI-процесів, що може застосовуватися для виявлення клавіатурного шпигуна. Крім того, реєстрація подій клавіатури можлива тільки для GUI-додатків - це легко перевірити за допомогою демонстраційної програми.
Використання циклічного опитування стану клавіатури.
Дана методика заснована на періодичному опитуванні стану клавіатури. Для опитування стану клавіш у системі передбачена спеціальна функція GetKeyboardState, що повертає масив з 255 байт, в якому кожен байт містить стан певної клавіші на клавіатурі. Даний метод вже не вимагає впровадження DLL в GUI-процеси, і в результаті шпигун менш помітний.
Однак зміна статусу клавіш відбувається в момент зчитування потоком клавіатурних повідомлень з його черги, тому подібна методика працює тільки для стеження за GUI-додатками. Цього недоліку позбавлена ??функція GetAsyncKeyState, що повертає стан клавіші на момент виклику функції.
Впровадження в процес і перехоплення функцій Windows API.
Рідко реалізований метод реалізації кейлоггера. Кейлоггер впроваджується в усі процеси і перехоплює в них функції GetMessage або PeekMessage (див. Розділ Обробка повідомлень конкретним вікном ) з бібліотеки user32.dll. Для цього можуть бути використані різні методи: сплайсинг (сплайсинг - метод, який використовується для перехоплення виклику API-функцій; суть методу полягає в заміні декількох (зазвичай 5) перших байт функції інструкцією JMP, передавальної управління коду-перехоплювачу), модифікація таблиці адрес імпортованих функцій IAT, перехоплення функції GetProcAddress, що повертає адресу функції з завантаженою динамічної бібліотеки. Кейлоггер може реалізовуватися у вигляді DLL або за допомогою безпосереднього впровадження коду в цільової процес.
У результаті виходить наступне: коли додаток викликає, наприклад, функцію GetMessage для отримання наступного повідомлення з черги повідомлень, цей виклик приходить в код перехоплювача. Перехоплювач викликає вихідну функцію GetMessage з user32.dll та аналізує повертані результати на предмет типу повідомлень. При отриманні клавіатурного повідомлення вся інформації про нього витягується з параметрів повідомлення і протоколюється кілоггерів.
До переваг слід віднести ефективність: зважаючи на малу поширеності методу лише невелике число програм дозволяє знаходити подібні кейлоггери; крім того, проти подібних кейлоггеров марні стандартні екранні клавіатури, так як їх посилають ними повідомлення також перехоплюються.
Недоліки: модифікація таблиці IAT не гарантує перехоплення, тому адреси функцій бібліотеки user32.dll можуть бути збережені до того, як кейлоггер укорінювався; сплайсинг має свої складнощі, пов'язані, наприклад, з необхідністю переписувати на льоту тіло функції.
. 2. Клавіатурні моніторинги апаратного типу
Для пошуку клавіатурних шпигунів на домашньому комп'ютері цілком достатньо упевнитися у відсутності програм-кілоггерів. Але в корпоративному середовищі, зокрема на комп'ютерах, що застосовуються для виконання банківських операц...