ГлавнаяНовостиСтатьиКаталогВендорыСтандартыОбучениеКонтакты  +7 (495) 231-4831    © 


[ Список статей ] ...


С-Терра СиЭсПи. Защита удаленного доступа. Доверенный сеанс связи

CNews. Fortinet включает защиту уровней доступа в систему обеспечения ИБ

CNews. ИТ-подразделениям всё труднее контролировать корпоративные данные в «облаке»

Jammer.ru. Apple следит за своими поль-зователями через Yosemite

Lenta.ru. Разоблачение «Корпорации добра»

Securelist. Доставка от спамеров: опасность гарантирована

Lenta.ru. Интернет-Мерфи

3DNews. Сноуден как повод

Компьютерра. Plug&Pray: скрытая атака через USB

SecurityLab. Как я взломал роутер

Securelist. Дыры в защите корпоративной сети: облачные сервисы

Андрей Козенко, Султан Сулейманов. «Не понимают, как работает интернет»

Евгений Золотов. Windows 8.1: ставка на PC (а PC харкает кровью)

Евгений Царев. Впечатление от PHDays 2013 или кто заказчик кибербезопасности в России?

Олег Парамонов. Десять страхов: крах интернета, Big Data, утрата знаний и другие вещи, которые пугают учёных и футурологов

Brian Donohue. Альтернативные браузеры с улучшенной защитой

Андрей Васильков. Десять лучших пакетов офисных программ

Securelist. Спам в марте 2013

Бёрд Киви. Специалисты предупреждают...

Андрей Шуклин. Big Data: новый рынок, новые перспективы

Luis Corrons. Twitter, Facebook, Apple, Microsoft… кто следующий?

Елена Гореткина. Роль ИТ в повышении конкурентоспособности российских университетов

Сергей Бобровский. Кому сегодня выгодна борьба с пиратством и кто в нём виноват?

Алексей Лукацкий. 1 сентября в отрасли ИБ может наступить коллапс...

Олег Парамонов. Десять перспективных технологий, о которых через несколько лет узнают все

Михаил Емельянников. СМС-оповещения о движении средств по счету: всегда ли это безопасно

Евгений Золотов. Мрачные итоги Pwn2Own: почему браузеры так легко взломать и почему линуксоидам можно волноваться меньше?

xakep.ru. Криминалистический подход к анализу временных атрибутов файлов в операционной системе семейства Microsoft Windows и файловой системе NTFS

Securelist. Спам в январе 2013

Pandalabs. По данным Pandalabs, в 2012 году была инфицирована треть мирового числа компьютеров

Евгений Золотов. Цифровые теракты: страшная сказка становится былью

Leyre. Безопасный Интернет-серфинг

Лаборатория Касперского. Операция 'Red October' — обширная сеть кибершпионажа против дипломатических и государственных структур

Юрий Михайлов. Пять древних поисковиков, которые не перевернули мир (не считая Lycos)

Алексей Лукацкий. ИБ в год Змеи. Прогнозы и перспективы

Panda Security. Уязвимости будут основной целью киберпреступников в 2013

Лаборатория Касперского. Дед Мороз:Мошенник или волшебник?

Vision 2030. Информационная безопасность в 2030 году: прежними останутся только люди

Андрей Колесов. 2012-й — юбилейный год отечественного ИТ-рынка

PC-Week. Обновление до Windows 8: ответы на наиболее часто задаваемые вопросы

Лаборатория Касперского. Факты года: TOP 5 ужасов Рунета

CRN. 10 важнейших событий 2012 года в сфере безопасности

Емельянников M.. Панегирик выставочному бизнесу [в области информационной безопасности]

Черевко С.А.. Аспекты и перспективы развития информационной безопасности мобильных устройств

Uncr0wneD. Крэкинг: практика взлома и теория защиты

3dnews. Вы не любите одноразовые пароли? Тогда мы идём к вам!

Luis Corrons. Правда ли, что там опубликованы мои откровенные фотки?..

Популярная механика. Как убить интернет

Vasilis Pappas, Michalis Polychronakis, Angelos D. Keromytis. Устранение гаджетов: противодействие возвратно-ориентированному программированию путем рандомизации кода на месте

Специалист «Лаборатории Касперского». miniFlame, он же SPE: «Элвис и его друзья»

Steve Durbin. Большие возможности — большие риски

Л.Бесцветный. Три дня InfoSecurity Russia глазами обычного человека

Мария Наместникова. Спам в августе 2012 года

Исследовательский центр "Лаборатории Касперского" (GReAT). Полный анализ командных серверов Flame

AV-Comparatives. AV-Comparatives Июль 2012: Тестирование проактивной защиты антивирусов

Ana Etxebarria. Интернет-груминг: орудие педофилов

Лукацкий Алексей. Какой была безопасность в 90-х годах?

Юрий Наместников. География киберпреступлений. Западная Европа и Северная Америка

Роб Шапланд. Методы защиты от brute-force login attack

Евгений Касперский. Что в виндовсе тебе моём?

SecurityLab. Эксперты: Малые и средние компании под угрозой хакерских атак

Доктор Веб. Обзор вирусной активности в августе 2012 года: растущие ботнеты, уязвимость Java и новые угрозы для Android

Panda Security. Подростковый секстинг: бегущие по лезвию

Дарья Гудкова и Мария Наместникова. Спам во втором квартале 2012

Евгений Касперский. Сейф для денег

PandaLabs. Ежеквартальный отчет PandaLabs

Юрий Наместников. Развитие информационных угроз во втором квартале 2012 года

Наталья Анищук. Защита от DDoS-атак: поле для творчества и фантазии

Ной Шахтман. Парадокс Евгения Касперского

WhatsBetter.ru. Что лучше: Windows 7, Vista или XP?

WhatsBetter.ru. Какой антивирус лучше?

Илья Шабанов. Названы самые комфортные в работе антивирусы

Мария «Mifrill» Нефедова. Облава: о том, как спецслужбы ловят дропов, и не только

Алексей Кадиев. Ботнет Bredolab. Конец истории?

Юрий Ильин. «Добровольные» DDoS-атаки: комментарии экспертов

Александр Панасенко. Угрозы в сфере информационной безопасности: итоги 2010 и прогнозы на будущее

Берд Киви. За кулисами кибервойны

Берд Киви. Шифровальщик устал...

Chad Perrin. Эффективное уничтожение данных на жестких дисках и других накопителях

Н.Н. Федотов. Риски системного администратора: семь и еще один способ подвести сисадмина под монастырь

Берд Киви. Ближе к железу

Microsoft TechNet. Десять непреложных законов безопасности

Анатолий Темкин. Как карта ляжет

Андрей Сидельников. Правообладатели не придумали, как делить болваночный сбор

Антон Носик. Лохотрон в зоне .рф

Максим Букин. Лжевирусы атакуют

habr.ru. Взгляд на современные системы защиты от спама веб-форм

Кристиан Функ. Мошенничество в онлайн-играх: развитие нелегальной игровой экономики

Роман Гольд. Stuxnet: война 2.0

Вячеслав Закоржевский. Лазутчики киберкриминала

Cio.com (перевод — Елена Фирсова). Самые опасные работы в области технологий

Берд Киви. Боевой червь Stuxnet

Юрий Машевский. Антивирусный прогноз погоды: облачно

xakep.ru. Как найти украденный ноутбук?

Евгений Асеев. Небезопасный интернет

Курт Баумгартнер. Фальшивые антивирусы: актуальные тенденции

Chad Perrin. Новый взгляд на безопасность Windows: побудит ли решение Google отказаться от продуктов Microsoft и другие компании?

Максим Букин. Безопасность виртуальных платежей

Наталья Касперская. Intel купил McAfee

Виталий Краснов. Хакеры атакуют: как уберечь DNS-сервер

Вадим Стеркин. Так ли страшен контроль учетных записей

Берд Киви. В постели со шпионами

Юрий Ильин. Zeus: вирус, который грабит банки

Виталий Краснов. Гонка вооружений антиспама нарастает

Валерий Марчук. Еще один 0-day в Microsoft Windows или Stuxnet атакует

Владислав Пономарев. Троянская война

Алехандро Мартинез-Кабрера. Стереть себя из Интернета невозможно

Ника Парамонова. Эпоха Windows XP закончилась

Владимир Жилинский. Аппаратные кейлоггеры

Берд Киви. Конфликт криптографии и бюрократии

Берд Киви. Человек против обмана

Мартин Пранкевич. На коротком поводке: ограничиваем пользователей, выслеживаем нарушителей и наводим порядок в локальной сети

Мэтью Саррел. Главные на данный момент угрозы безопасности

Татьяна Никитина. ТОР10 киберпреступлений, в которых Запад отыскал «российский след»

Берд Киви. Безмолвный очевидец

Наталья Касперская. Нужен ли пользователю интернет-паспорт?

Михаил Емельянников. Как защищать персональные данные в интернете

lifehacker.com. Как отличить одно вредоносное ПО от другого

Максим Букин. Как защититься от мобильных мошенников

habr.ru. Взлом сайта: простые советы по безопасности

Виталий Краснов. Бизнес под ударом: веб-приложения остаются «дырявыми»

Дарья Гудкова. Спам и закон

Николай Двас. Запад обвинил Россию в развязывании кибервойн

habr.ru. Узнаем пароли пользователей 1С

Анна Володина. Спам-реклама: дешево и эффективно?

arstechnica.com. Офисный копир — еще одна брешь в безопасности?

mail.ru. 10 самых опасных вирусов в истории Интернета

habr.ru. Ваш автомобиль в недалеком будущем может быть запросто взломан хакерами

Валерий Васильев. Текущее состояние ландшафта кибер-преступности

Артур Лоянич. Как украсть чужой пароль

habr.ru. Банкоматных вирусов пост

Андрей Сидельников. Цензура интернет-трафика становится обычной практикой

Берд Киви. Шпион в кармане

Юрий Машевский. CrimeWare: новый виток противостояния

THG.ru. Symantec: кризис киберпреступности не помеха

Георг Вишерски. Опасности на пути пользователей социальных сетей

Дмитрий Тараканов. За кем охотится ZeuS

Ольга Зайцева. Dr.Web 6.0: ищем изменения

Славик Маркович. Пять главных тенденций в области защиты данных в 2010 году

Дэвид Эмм. Как залатать человеческие уязвимости?

Максим Букин. «Левые» контракты и ошибочные счета

Валерий Васильев. Весна 2010: кибер-преступность и кибер-защита

Олег Зайцев. Интернет магазины — как не стать жертвой мошенников

marcofolio.net. Профилактика SQL-инъекций

Michael Kassner. Свободные адреса IPv4 почти закончились

Владимир Гайкович. Рынок ИБ — это взрослое существо в детской одежде

InfoWatch. Глобальное исследование утечек за 2009 год

habr.ru. Если пришла проверка

Леонид Черняк. Безопасность: облако или болото?

Мария Сысойкина. Internet Explorer 8: Безопасный или неуязвимый?

Александра Бершадская. Биометрическая идентификация: о надежности технологии

Валерий Васильев, Дмитрий Сергеев. Человек — самое слабое звено в ИБ

Иван Шадрин. Корпорации стали уязвимее для хакерских атак

Michael Kassner. Информационная безопасность: что год 2010-й нам готовит?

xakep.ru. 2009: cамые громкие дела ушедшего года

Tom's Hardware Guide. Резервирование и восстановление данных: обзор трёх решений для Windows 7

Игорь Бахарев, Андрей Ковалевский. Торрент потерял только имя

Павел Борисов. Пойман автор порноролика в Москве

Иван Шадрин. Фальшивые антивирусы научились запугивать пользователей

Андрей Крупин. Социальный бэкап

Иван Шадрин. Бизнес уходит в «облака»

Алексей Лукацкий. Информационная безопасность 2010

Андрей Крупин. Ещё раз о защите WiFi-сетей

Raymond.СС. Тестирование антивирусов на быстродействие (Raymond.CC, февраль 2010)

habr.ru. Распространенные заблуждения про банковские карточки

Максим Букин. Монетизация «зловредов»

Андрей Крупин. Киберугрозы: сценарий будущего по версии «Лаборатории Касперского»

Иван Шадрин. От программ-вымогателей можно избавиться вручную

George Kurtz. Операция «Aurora». Удар по Google и прочим

Алексей Алексеев. Как украсть мегабайт

Татьяна Фомичева. Вирус, ложь и видео

winblog.ru. Изучаем скрытые возможности Windows 7

VirusInfo. Кошелек или жизнь: деактивация троянов-вымогателей

Берд Киви. Сюжет из «Плейбоя»

Майор Мышкин. За что могут посадить компьютерщика?

Иван Шадрин. Скорая компьютерная помощь: мошенники по вызову

Андрей Колесов. Антивирусная атака Microsoft

Сергей Яремчук. Новый оборонительный рубеж: обзор популярных систем отражения локальных угроз

Борис Лихтман, Андрей Сидельников. Правительства берут интернет под контроль

Виталий Камлюк. Экосистема ботнетов

Мачей Жарек. %^ef$g73$5r(@&#!! — несколько слов о шифровании и алгоритмах

Андрей Крупин. Безопасность в Windows 7 во всех ракурсах

Дмитрий Копытин. Безопасность при межпроектном взаимодействии

habr.ru. Вы несете деньги в Банк, Банки несут деньги в Bitrix

Андрей Анненков, Ольга Федина. Чужая ОС — потемки, или Где купить XP

Валентин Маков. Сайтокрушение

Mark Russinovich. Миф о дублировании SID компьютера

itsec.ru. SSL-защита ваших данных

Андрей Крупин. Обзор Returnil Virtual System 2010

Лариса Погонина. Скандальное потепление

Андрей Родин. Наилучшая защита беcпроводных сетей

Рик Фэрроу. Переполнение буфера

Берд Киви. Атака c воздуха

Игорь Осколков. Google Chrome OS — это просто, быстро и безопасно!

Вячеслав Закоржевский. Лжеспасатели

katkovonline.com. Ботнет: «был твой — стал мой» или как ботнеты работают

Валерий Васильев. Защита персональных данных накануне 01.01.10

Michael Kassner. Десять способов обнаружения вредоносного ПО

Вадим Стеркин. Управление UAC в Windows 7 и Windows Server 2008 R2

Хайрук Сергей. Проверка на зрелость: сертификация средств антивирусной защиты

Brien Posey. Десять наиболее распространенных проблем, которые можно решить редактированием реестра

Наталья Касперская. Защита от утечек в малом бизнесе — неосвоенный кусок пирога!

SecurityLab.ru. Статистика уязвимостей web-приложений за 2008 год

habr.ru. Способы сокрытия IP-адреса в сети Internet

Дон Рейзингер. 10 аргументов, чтобы остаться на XP до выхода Windows 7 SP1

Николас Колаковски. Windows 7 завершит эпоху Windows XP

Марина Мякишева. Infosecurity 2009: под страхом ФЗ о персональных данных

Алексей Лукацкий. Психология и информационная безопасность

Евгений Зобнин. Устоять любой ценой: методы борьбы с DoS/DDoS-атаками

Дмитрий Чеканов. Режим Windows XP Mode и VirtualBox: когда без XP не обойтись

Кристиан Функ. Ловушки интернета

Игорь Крейн. Бесплатный антивирус Microsoft разгонит платных конкурентов?

Рашид Нургалиев. Электронный патруль

Дмитрий Дурасов. Forefront TMG Beta3: отчет о 3-х месячном тестировании

Джеймс Тернер. Особенности контроля учетных записей Vista

Кеннет Касс. Обратная сторона DLP

Валерий Коржов. Кризис, виртуализация и персональные данные

CNews. Виртуализация: Microsoft готовится к реваншу

Andy Smith. Результаты тестирования: Windows 7 RTM против Vista и XP

Андрей Крупин. Microsoft Security Essentials: антивирус не для всех

Владимир Безмалый. Технологии социальной инженерии

Алексей Стародымов. Возврат денег за ОС: первые результаты

habr.ru. Шнайер о проблеме деидентификации

Влад Чучко. Интервью с Натальей Касперской

Андрей Крупин. Новый подход к защите ПК от Symantec

Степан Ильин. 10 зло-вирусов. Самая нашумевшая малварь за последние 10 лет

Владимир Безмалый. Безопасность мобильных носителей информации

Максим Букин. «Зловреды» для мобильных пользователей

Валерий Васильев. Закон о персональных данных: «градус» обсуждения растет

Ольга Зайцева. Антивирусная защита: нужен второй эшелон

Владимир Безмалый. Автозагрузка в Windows 7

webplanet.ru. МГУ vs DDoS: «Мы даем защиту. Бесплатно.»

Дамир Диздаревич. Механизм хранения имен пользователей и паролей

Владимир Безмалый. BitLocker в Windows 7

Андрей Крупин. Kaspersky Internet Security 2010: территория безопасности

Игорь Крейн, Владислав Михеев. «ВКонтакте» с фишерами и без

Ryan Singel. Google против Microsoft

Дмитрий Евтеев. Анализ проблем парольной защиты в российских компаниях

Андрей Крупин. Первый взгляд на Microsoft Security Essentials

Ольга Зайцева. Нужны ли антивирусы пользователям Mac OS?

Алексей Стародымов, Марина Пелепец. Спам в ICQ: механизмы и способы защиты

Дарья Гудкова. Спамеры Рунета

Андрей Крупин. Microsoft Office 2010: первые впечатления

Вениамин Левцов, Илья Новиков. Защита персональных данных: откладывать больше нельзя

Debra Littlejohn Shinder. Десять причин, по которым Vista-ненавистникам может понравиться Windows 7

Джон Грин. Защита на последнем рубеже (сравнение корпоративных антивирусов)

Артем Рябинков. Усиливаем аутентификацию или зачем нужны одноразовые пароли

Кирилл Алехин. 15 вопросов про спам

xakep.ru. Hyper-V: технология виртуализации для Windows Server 2008

Андрей Колесов. О Cloud Computing замолвите слово

Алексей Стародымов, Марина Пелепец. Вирусы в банкоматах: заключение

Андрей Колесов. О порядке смены ОС

Андрей Крупин. Тонкая настройка Internet Explorer 8

InfoSecurity.ru. Боевые заслуги червя Conficker

Группа информационной безопасности Group-IB. Краткий аналитический вопросник по бот-сетям в РФ 2009 год

Аналитический центр InfoWatch. Глобальное исследование утечек 2008

Владимир Безмалый. Новые технологии, старые проблемы

Евгений Шахов. Круговая защита вашего ПК (сравнение продуктов Internet Security 2009)

John Markoff. Нам нужен новый Интернет?

Питер Брайт, arstechnica.com (перевод – xakep.ru). Windows 7: бета-экскурсия

Данил Анисимов. Утечки данных: текущий год уже обогнал прошедший?

Ольга Федина. Пароль «123456» знаешь? Проходи!

Вадим Ференец. Новый альянс на рынке ИБ делает первые шаги

Андрей Крупин. Секреты Windows 7 Beta

SecurityLab. Тенденции ИБ в условиях кризиса

Владимир Ульянов. Итоги 2008: самые необычные утечки

Марина Мякишева. Кибервойна: вирусные аналитики подводят итоги года

Сергей Гордейчик. Оценка рисков использования Web-приложений

Владимир Ульянов. Персональные данные на практике остаются беззащитными (на основании исследования «Персональные данные в России 2008»)

Денис Зенкин. Уничтожение данных: скрытая угроза растет

Chad Perrin. Десять самых распространенных ошибок в сфере компьютерной безопасности, которые ни в коем случае нельзя совершать

SecurityLab. Международная статистика уязвимостей WEB

Владимир Ульянов. Инсайд 2008: Самые громкие и самые глупые утечки

Прокофьев Никита. Обзор Kaspersky Internet Security 2009

SecurityLab. Сравнение программных пакетов Internet Security – 2008

Интервью с Владимиром Мамыкиным. Информационная безопасность Microsoft

Tom's Hardware Guide. Сравнение программ резервного копирования для рабочих станций

Владимир Безмалый. Контроль использования USB-накопителей в Windows Server 2008

Жан де Клерк. Изоляция угроз из Internet в Windows Server 2008 и Vista

Михаил Карпов. Windows 7: первые сведения о новой системе

Иван Стогов. Сравнительный анализ антивирусного ПО

Дмитрий Антиномов. Защитное ПО в России: секретно ли секретное?

Законодательство. Федеральный закон Российской Федерации № 152-ФЗ «О персональных данных»

Законодательство. Постановление Правительства РФ от 17 ноября 2007 г. N 781 «Об утверждении Положения об обеспечении безопасности персональных данных при их обработке в информационных системах персональных данных»

Winblog. Защита файлов паролем

Сабадаш Даниил. Обзор Nero 8

Дмитрий Соколов. Подпись для электронного документа

Денис Михайлов. Взлом и защита учетной записи Windows XP

Андрей Письменный. Тестирование антивирусов

Елена Панасенко. Сменные носители – главное орудие инсайдеров

Михаил Ратнер. Побеждаем вирусы в Vista без использования антивирусных программ

Николай Гребенников. Методы защиты конфиденциальных данных в современных решениях класса Security Suite

Николай Полевой. Шпионит ли Microsoft за обладателями Vista?

Григорий Рудницкий. Kaspersky Internet Security 7.0: первый взгляд

Исследование компании InfoWatch и портала Zoom.CNews. Безопасность мобильных устройств 2007

Николай Гребенников. Клавиатурные шпионы. Часть II. Варианты реализации кейлоггеров в ОС Windows

Николай Гребенников. Клавиатурные шпионы. Принципы работы и методы обнаружения

Виталий Денисов. Опасность безопасных соединений

Андрей Шипилов. «Битрикс» сливается с «1С»

Александр Астахов. Борьба с инсайдерами: подбираем амуницию

InfoWatch. Утечки 2006 - глобальное исследование от InfoWatch

Наталья Касперская. Безопасность от Microsoft: шаг к обновленному миру?

Александр Астахов. Как построить систему управления информационной безопасностью

Константин Черезов. Проблема внутри? Решение там же!

Михаил Пышкин. Международный опыт управления информационной безопасностью для российских компаний

Юрий Машевский. Кража собственности в компьютерных сетях

Интервью с Сергеем Груздевым. Сегмент AAA в России является самым быстрорастущим в ИБ

Алексей Сабанов. Обзор технологий идентификации и аутентификации

Алексей Сабанов, Антон Крячков, Константин Демченко, Сергей Белов. Как управлять закрытыми ключами

Александр Астахов. История стандарта BS 7799

Марат Давлетханов. Secret Disk для защиты корпоративных данных

Ника Комарова. Как защитить компанию от кражи баз данных

Марат Давлетханов. Концепция одноразовых паролей в системе аутентификации

Алексей Доля. Защита конфиденциальных данных на ноутбуках и КПК

Rainbow Technologies. UTM-устройства на страже компьютерной сети

Rainbow Technologies. Атаки на сеть через переполнение буфера – технологии и способы борьбы

Алексей Лукацкий. Предотвращение сетевых атак: технологии и решения

Rainbow Technologies. Технология Precise BioMatch™ - объединяя лучшее в биометрической аутентификации

Опрос. Хакеры и сетевые вандалы: разница в мотивации

Обзор. Безопасность популярных операционных систем в 2006 г.

Полезные советы. Кардинг или безналичный обман

Исследование. Социокультурный аспект внедрения некоторых категорий средств защиты в организациях с преимущественно женским контингентом

Обзор. Развитие вредоносных программ: уязвимости в MacOS X, 2005 — 2006 год

Евгений Касперский. Прогнозы изменений в антивирусной индустрии

Олег Гудилин. Проактивность как средство борьбы с вирусами

Виктор Дронов. Портрет заказчика спамерских услуг в России

Пол Даклин. Простые советы по более разумному выбору и использованию паролей

Круглый стол. Источник со стороны

СофтПоинт. Проблемы безопасности данных в системе 1С Предприятие 7.7 и MSSQL 2000

Алексей Лукацкий. Размышления о Web-студиях и защищенном сайте

Аналитика. Почему ВУЗ не способен подготовить специалиста по безопасности

Законодательство. Правительство РФ утвердило "Положение о лицензировании деятельности по технической защите конфиденциальной информации"

 Николай Гребенников 

Клавиатурные шпионы. Варианты реализации кейлоггеров в ОС Windows. Часть II


  Данная статья является продолжением предыдущей обзорной статьи, посвященной кейлоггерам, и представляет детальный анализ технических аспектов реализации кейлоггеров. Как было сказано в первой статье, принципиальная идея кейлоггера состоит в том, чтобы внедриться между любыми двумя звеньями в цепи прохождения сигнала от нажатия клавиш на клавиатуре до появления символов на экране. Мы проанализируем, какие звенья содержатся в данной цепи, а также рассмотрим варианты построения программных и аппаратных кейлоггеров.

  Статья рассчитана на технических специалистов и квалифицированных пользователей. Остальным читателям достаточно запомнить, что в ОС Windows существует множество способов перехватить вводимые с клавиатуры данные, хотя большинство реально существующих кейлоггеров использует лишь два их них (см. раздел «Принципы построения кейлоггеров» первой части статьи).

  Сразу оговоримся: в данной статье не будет приведено никаких примеров исходных вариантов реализации кейлоггеров. Мы не разделяем мнение некоторых экспертов по безопасности, которые считают возможным публиковать подобные коды.


[ Содержание ]

•  Обработка клавиатурного ввода в OC Windows
     -  Принципы работы клавиатуры как физического устройства
     -  Низкоуровневое взаимодействие с клавиатурой через порты ввода-вывода
     -  Архитектура «интерактивных устройств ввода»
     -  Драйвера режима ядра для PS-2 клавиатуры
         -  Стек драйверов для системных устройств ввода
         -  Стек драйверов для Plug and Play PS/2-клавиатуры
         -  Стек устройств для Plug and Play PS/2-клавиатуры
     -  Обработка клавиатурного ввода приложениями
         -  Поток необработанного ввода (получение данных от драйвера)
         -  Обработка сообщений конкретным окном
         -  Массив синхронного состояния клавиш
     -  Клавиатурные ловушки
     -  Общая схема обработки
     -  Модель прямого ввода (Raw Input)
•  Варианты реализации кейлоггеров
    1. Кейлоггеры пользовательского режима
         1.1. Установка глобального перехватчика событий (SetWindowsHook)
         1.2. Циклический опрос
         1.3. Внедрение в процесс и перехват функций GetMessage/PeekMessage
         1.4. Использование функций DirectX
    2. Кейлоггеры режима ядра
         2.1. Драйвера-фильтры драйвера класса kbdclass
         2.2. Драйвера-фильтры функционального драйвера i8042prt
         2.3. Модификация dispatch table в драйвере kbdclass
         2.4. Патч KeServiceDescriptorTableShadow
         2.5. Сплайсинг NtUserGetMessage/PeekMessage
         2.6. Подмена драйвера в клавиатурном стеке драйверов
         2.7. Драйвер-обработчик прерывания IRQ 1
•  Выводы

Обработка клавиатурного ввода в OC Windows

  Существует несколько базовых технологий перехвата нажатий клавиш и событий мыши, на основе которых создано множество кейлоггеров. Однако перед тем как рассматривать конкретные типы кейлоггеров, необходимо познакомиться со схемой обработки клавиатурного ввода, реализованной в ОС Windows. Для описания всей схемы — от нажатия клавиши на клавиатуре до срабатывания системного прерывания контроллера клавиатуры и получения активным окном сообщения WM_KEYDOWN — мы воспользуемся тремя источниками:

  1. Книгой «Аппаратное обеспечение IBM PC». Александр Фролов, Григорий Фролов, Том 2, книга 1, М.: Диалог-МИФИ, 1992. Глава 2 «Клавиатура» описывает принципы работы клавиатуры, используемые порты и аппаратное прерывание клавиатуры;
  2. Разделом Human Input Devices библиотеки MSDN Library, в котором описана низкоуровневая (драйверная) часть схемы обработки клавиатурного ввода;
  3. Книгой Джеффри Рихтера «Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows». В главе 27 «Модель аппаратного ввода и локальное состояние ввода» приведено описание высокоуровневой части схемы обработки клавиатурного ввода (реализованной в пользовательском режиме).

Принципы работы клавиатуры как физического устройства

  В настоящее время большинство клавиатур выполнено в виде отдельного устройства, подключаемого к компьютеру с помощью одного из разъемов, чаще всего PS/2 или USB. Существуют два микроконтроллера, обеспечивающие процесс обработки клавиатурного ввода: один — на материнской плате ПК, второй — в самой клавиатуре. Таким образом, клавиатура персонального компьютера сама по себе является компьютерной системой. Она построена на основе микроконтроллера 8042, который постоянно сканирует нажатия клавиш на клавиатуре — независимо от активности на центральном процессоре x86.

  За каждой клавишей клавиатуры закреплен определенный номер, однозначно связанный с распайкой клавиатурной матрицы и не зависящий напрямую от обозначений, нанесенных на поверхность клавиш. Этот номер называется скан-кодом (название подчеркивает тот факт, что компьютер сканирует клавиатуру для поиска нажатой клавиши). Скан-код — это случайное значение, выбранное IBM еще тогда, когда она создавала первую клавиатуру для ПК. Скан-код не соответствует ASCII-коду клавиши, одной и той же клавише могут соответствовать несколько значений ASCII-кода. Таблицу скан-кодов можно посмотреть, например, в двадцатой главе книги The Art of Assembly Language Programming.

  На самом деле клавиатура генерирует два скан-кода для каждой клавиши — когда пользователь нажимает клавишу и когда отпускает. Наличие двух скан-кодов важно, так как некоторые клавиши имеют смысл только тогда, когда они нажаты (Shift, Control, Alt).



Рисунок 1. Упрощенная схема клавиатуры

  Когда пользователь нажимает клавишу на клавиатуре, он замыкает электрический контакт. В результате при следующем сканировании микроконтроллер фиксирует нажатие определенной клавиши и посылает в центральный компьютер скан-код нажатой клавиши и запрос на прерывание. Аналогичные действия выполняются и тогда, когда оператор отпускает нажатую ранее клавишу.

  Второй микроконтроллер получает скан-код, производит преобразование скан-кода, делает его доступным на порту ввода-вывода 60h и затем генерирует аппаратное прерывание центрального процессора. После этого процедура обработки прерывания может получить скан-код из указанного порта ввода-вывода.

  Следует отметить, что клавиатура содержит внутренний 16-байтовый буфер, через который она осуществляет обмен данными с компьютером.


Низкоуровневое взаимодействие с клавиатурой через порты ввода-вывода

  Взаимодействие с системным контроллером клавиатуры происходит через порт ввода-вывода 64h. Считав байт из этого порта, можно определить статус контроллера клавиатуры, записав байт — послать контроллеру команду.

  Взаимодействие с микроконтроллером в самой клавиатуре происходит с помощью портов ввода-вывода 60h и 64h. Биты 0 и 1 в байте статуса (порт 64h в режиме чтения) предоставляют возможность управлять процедурой взаимодействия: перед записью данных в эти порты бит 0 порта 64h должен быть выставлен в 0. Когда данные доступны для чтения из порта 60h, бит 1 порта 64h равен 1. Биты включения/выключения клавиатуры в командном байте (порт 64h в режиме записи) определяют, является ли клавиатура активной, и будет ли контроллер клавиатуры вызывать прерывание в системе, когда пользователь нажмет клавишу.

  Байты, записанные в порт 60h, посылаются контроллеру клавиатуры, а байты, записанные в порт 64h, посылаются системному контроллеру клавиатуры. Списки разрешенных команд, которые можно послать контроллеру клавиатуры, представлены, например, в документе «8042 Keyboard Controller IBM Technical Reference Manual» или в двадцатой главе книги The Art of Assembly Language Programming.

  Байты, считываемые из порта 60h, приходят от клавиатуры. Порт 60h при чтении содержит скан-код последней нажатой клавиши, а в режиме записи он используется для расширенного управления клавиатурой. При использовании порта 60h на запись программа дополнительно получает следующие возможности:

  • установка времени ожидания перед переходом клавиатуры в режим автоповтора;
  • установка периода генерации скан-кода в режиме автоповтора;
  • управление светодиодами, расположенными на лицевой панели клавиатуры — Scroll Lock, Num Lock, Caps Lock.

  Резюмируя, отметим, что для чтения данных, вводимых с клавиатуры, достаточно уметь считывать значения портов ввода-вывода 60h и 64h. Однако в ОС Windows приложениям пользовательского режима запрещено работать с портами, поэтому эту задачу выполняют драйвера операционной системы.


Архитектура «интерактивных устройств ввода»

  Кто же обрабатывает аппаратное прерывание, которое генерируется при появлении в порту 60h данных, полученных от клавиатуры? Очевидно, тот, кто зарегистрировал процедуру обработки аппаратного прерывания клавиатуры IRQ 1. В ОС Windows эту обработку производит драйвер i8042prt.sys. В отличие от времен MS DOS, когда каждый системный компонент был как бы «сам по себе», в Windows все компоненты построены согласно четкой архитектуре и работают по строго определенным правилам, закрепленным программными интерфейсами. Поэтому перед тем как приступить к рассмотрению драйвера i8042prt, мы рассмотрим архитектуру интерактивных устройств ввода, в рамках которой функционируют все программные компоненты, связанные с обработкой клавиатурного (и «мышиного») ввода.

  Устройства, используемые для прямого управления операциями на компьютере, в ОС Windows называются интерактивными устройствами ввода. Клавиатура является одним из таких устройств, наряду с манипулятором «мышь», джойстиками, трекболами, игровыми педалями, колесами, шлемами виртуальной реальности и др.

  Архитектура управления интерактивными устройствами ввода базируется на стандарте USB Human Interface Device (HID), предложенном организацией USB Implementers Forum. Однако архитектура не ограничена только USB-устройствами и поддерживает другие типы устройств ввода, в частности, bluetooth-клавиатуру, клавиатуру и мышь, подключаемые по PS/2 порту, а также устройства, подключаемые по игровому порту (I/O port 201).

  Далее мы рассмотрим принципы построения стека драйверов и стека устройств для PS/2-клавиатур, так как исторически они являются первый типом устройств. USB-клавиатуры используют ряд элементов, введенных при разработке программной поддержки PS/2-клавиатур.


Драйвера режима ядра для PS/2 клавиатуры

Стек драйверов для системных устройств ввода

  Драйвера клавиатуры, независимо от схем физического подключения, используют системные драйвера класса клавиатуры для обработки не зависимых от аппаратной части операций. Данные драйвера называются драйверами класса, так как обеспечивают требуемые системой, но не зависимые от аппаратной реализации требования к конкретному классу устройств.

  Соответствующий функциональный драйвер (драйвер порта) реализует зависимую от конкретного устройства поддержку выполнения операций ввода-вывода. В ОС Windows для x86-платформ реализован единый драйвер системной клавиатуры (i8042) и мыши.



Рисунок 2. Драйверные стеки для системных устройств ввода: клавиатуры и мыши Стек драйверов для Plug and Play PS/2-клавиатуры


Стек драйверов для Plug and Play PS/2-клавиатуры



Рисунок 3. Стек драйверов для PS/2-клавиатуры

  Стек драйверов содержит (сверху вниз):

  1. Kbdclass — верхнеуровневый фильтр-драйвер класса клавиатуры;
  2. опциональный верхнеуровневый фильтр-драйвер класса клавиатуры;
  3. i8042prt — функциональный драйвер клавиатуры;
  4. корневой драйвер шины.

  В ОС Windows 2000 и старше драйвером класса клавиатуры является драйвер Kbdclass, основными задачами которого являются:

  • обеспечение общих и аппаратно-независимых операций класса устройств;
  • поддержка Plug and Play, поддержка управления питанием и Windows Management Instrumentation (WMI);
  • поддержка операций для legacy-устройств;
  • одновременное выполнение операций более чем одного устройства;
  • реализация class service callback routine, которая вызывается функциональным драйвером для передачи данных из входного буфера устройства в буфер данных драйвера класса устройств.

  В ОС Windows 2000 и старше функциональным драйвером для устройств ввода, использующих PS/2-порт (клавиатуры и мыши), является драйвер i8042prt, основные функции которого следующие:

  • обеспечение аппаратно-зависимых одновременных операций PS/2-устройств ввода (клавиатуры и мыши разделяют общие порты ввода вывода, но используют разные прерывания, процедуры обработки прерываний (ISR) и процедуры завершения обработки прерываний);
  • поддержка Plug and Play, поддержка управления питанием и Windows Management Instrumentation (WMI);
  • поддержка операций для legacy-устройств;
  • вызов class service callback routine для классов клавиатуры и мыши для передачи данных из входного буфера данных i8042prt в буфер данных драйвера класса;
  • вызов набора функций обратного вызова, которые могут реализовать драйвера-фильтры высокого уровня для гибкого управления устройством.


Рисунок 4. Список аппаратных ресурсов, используемых драйвером i8042prt

  На рисунке показан список аппаратных ресурсов, используемых драйвером i8042prt. Их можно просмотреть, например, с помощью утилиты DeviceTree, разработанной компанией Open Systems Resources. Для тех, кто прочел разделы «Принципы работы клавиатуры как физического устройства» и «Низкоуровневое взаимодействие с клавиатурой через порты ввода-вывода», значения портов ввода-вывода (IO) 60h и 64h и аппаратного прерывания (IRQ) 1 не будут сюрпризом.

  В показанном драйверном стеке новый драйвер-фильтр может быть добавлен, например, для специфичной обработки клавиатурного ввода поверх драйвера класса клавиатуры. Данный драйвер должен поддерживать ту же обработку всех типов запросов ввода-вывода и управляющих команд (IOCTL), что и драйвер класса клавиатуры. В этом случае перед передачей в подсистемы пользовательского режима данные будут отданы на обработку в этот драйвер-фильтр.


Стек устройств для Plug and Play PS/2-клавиатуры

  Рассмотрим теперь стек устройств, которые создают указанные выше драйвера в драйверном стеке клавиатуры. Ниже на рисунке слева изображен стек устройств, приведенный в MSDN Library для PS/2-клавиатуры, справа — скриншот программы DeviceTree, показывающий реальную ситуацию на машине автора статьи.

Увеличить рисунок

Рисунок 5. Конфигурация объектов устройств для Plug and Play PS/2-клавиатуры

  В целом стек устройств (правильнее говорить о стеке объектов устройств) PS/2-клавиатуры состоит из:

  1. физического объекта устройства клавиатуры (PDO), созданного драйвером шины (в данном случае, шины PCI) – \Device\00000066;
  2. функционального объекта устройства клавиатуры (FDO), созданного и присоединенного к PDO драйвером i8042prt — неименованный объект (unnamed);
  3. опциональных фильтр-объектов устройства клавиатуры, создающихся фильтр-драйверами клавиатуры, разрабатываемыми сторонними разработчиками;
  4. верхнеуровневого фильтр-объекта устройства класса клавиатуры, созданного драйвером класса Kbdclass – \Device\KeyboardClass0.

Обработка клавиатурного ввода приложениями

Поток необработанного ввода (получение данных от драйвера)

  В предыдущем разделе мы наблюдали примеры построения клавиатурных стеков в режиме ядра операционной системы. Теперь мы рассмотрим, как происходит передача информации о нажатии клавиш приложениям пользовательского режима.

  Подсистема Microsoft Win32 получает доступ к клавиатуре, используя поток необработанного ввода (Raw Input Thread, RIT), который является частью системного процесса csrss.exe. Операционная система при старте создает RIT и системную очередь аппаратного ввода (system hardware input queue, SHIQ).

  RIT открывает объект «устройство» драйвера класса клавиатуры для эксклюзивного использования и с помощью функции ZwReadFile направляет ему запрос ввода-вывода (IRP) типа IRP_MJ_READ. Получив запрос, драйвер Kbdclass отмечает его как ожидающий завершения (pending), ставит в очередь и возвращает код возврата STATUS_PENDING. Потоку необработанного ввода приходится ждать завершения IRP, для чего используется вызов асинхронной процедуры (Asynchronous Procedure Call, APC).

  Когда пользователь нажимает или отпускает одну из клавиш, системный контроллер клавиатуры вырабатывает аппаратное прерывание. Его обработчик вызывает специальную процедуру обработки прерывания IRQ 1 (interrupt service routine, ISR), зарегистрированную в системе драйвером i8042prt. Данная процедура считывает из внутренней очереди контроллера клавиатуры появившиеся данные. Обработка аппаратного прерывания должна быть максимально быстрой, поэтому ISR ставит в очередь вызов отложенной процедуры (Deferred Procedure Call, DPC) I8042KeyboardIsrDpc и завершает свою работу. Как только это станет возможно (IRQL понизится до DISPATCH_LEVEL), DPC будет вызвана системой. В этот момент будет вызвана процедура обратного вызова KeyboardClassServiceCallback, зарегистрированная драйвером Kbdclass у драйвера i8042prt. KeyboardClassServiceCallback извлечет из своей очереди ожидающий завершения запрос IRP, заполнит максимальное количество структур KEYBOARD_INPUT_DATA, несущих всю необходимую информацию о нажатиях/отпусканиях клавиш, и завершит IRP. Поток необработанного ввода пробуждается, обрабатывает полученную информацию и вновь посылает IRP типа IRP_MJ_READ драйверу класса, который опять ставится в очередь до следующего нажатия/отпускания клавиши. Таким образом, у стека клавиатуры всегда есть по крайней мере один ожидающий завершения IRP, и находится он в очереди драйвера Kbdclass.

Увеличить рисунок

Рисунок 6. Последовательность запросов от RIT к драйверу клавиатуры

  С помощью утилиты IrpTracker, разработанной упоминавшейся ранее компанией Open Systems Resources, можно отследить последовательность вызовов, происходящих при обработке клавиатурного ввода.



Рисунок 7. Обработка клавиатурного ввода в пользовательском режиме

  Как же RIT обрабатывает поступившую информацию? Все пришедшие клавиатурные события помещаются в системную очередь аппаратного ввода, после чего они последовательно преобразуются в сообщения Windows (типа WM_KEY*, WM_?BUTTON* или WM_MOUSEMOVE) и ставятся в конец очереди виртуального ввода (virtualized input queue, VIQ) активного потока. В сообщениях Windows скан-коды клавиш заменяются на коды виртуальных клавиш, соответствующие не расположению клавиши на клавиатуре, а действию, которое выполняет эта клавиша. Механизм преобразования кодов зависит от активной раскладки клавиатуры, одновременных нажатий других клавиш (например, SHIFT) и других факторов.

  Когда пользователь входит в систему, процесс Windows Explorer порождает поток, который создает панель задач и рабочий стол (WinSta0_RIT). Этот поток привязывается к RIT. Если пользователь запускает MS Word, то его поток, создавший окно, немедленно подключится к RIT. После этого поток, принадлежащий Explorer, отключается от RIT, так как единовременно с RIT может быть связан только один поток. При нажатии клавиши в SHIQ появится соответствующий элемент, что приведет к тому, что RIT пробудится, преобразует событие аппаратного ввода в сообщение от клавиатуры и поместит его в VIQ потока приложения MS Word.


Обработка сообщений конкретным окном

  Как же поток обрабатывает сообщения от клавиатуры, попавшие в его очередь сообщений?

  Стандартный цикл обработки сообщений обычно выглядит следующим образом:

while(GetMessage(&msg, 0, 0, 0))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

  С помощью функции GetMessage события от клавиатуры извлекаются из очереди и перенаправляются с помощью функции DispatchMessage оконной процедуре, которая производит обработку сообщений для окна, где в данный момент сосредоточен фокус ввода. Фокус ввода — атрибут, который может присваиваться окну, созданному приложением или Windows. Если окно имеет фокус ввода, соответствующая функция этого окна получает все клавиатурные сообщения из системной очереди. Приложение может передавать фокус ввода от одного окна другому, например, при переключении на другое приложение с помощью комбинации Alt+Tab.

  Перед функцией DispatchMessage обычно вызывается функция TranslateMessage, которая на основе сообщений WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP создает «символьные» сообщения WM_CHAR, WM_SYSCHAR, WM_DEADCHAR и WM_SYSDEADCHAR. Образованные символьные сообщения помещаются в очередь сообщений приложения, причем оригинальные клавиатурные сообщения из этой очереди не удаляются.


Массивы состояния клавиш клавиатуры

  Одной из задач при разработке модели аппаратного ввода Windows было обеспечение ее отказоустойчивости. Отказоустойчивость обеспечивается независимой обработкой ввода потоками, что предотвращает неблагоприятное воздействие одного потока на другой. Но этого недостаточно для надежной изоляции потоков друг от друга, поэтому система поддерживает дополнительную концепцию — локальное состояние ввода. Каждый поток обладает собственным состоянием ввода, сведения о котором хранятся в структуре THREADINFO. В информацию об этом состоянии включаются данные об очереди виртуального ввода потока, а также группа переменных. Последние содержат управляющую информацию о состоянии ввода. Относительно клавиатуры поддерживаются следующие сведения: какое окно находится в фокусе клавиатуры, какое окно активно в данный момент, какие клавиши нажаты, каково состояние курсора ввода.

  Информация о том, какие клавиши нажаты, сохраняется в массиве синхронного состояния клавиш. Этот массив включается в переменные локального состояния ввода каждого потока. В то же время массив асинхронного состояния клавиш, в котором содержится аналогичная информация, — только один, и он разделяется всеми потоками. Массивы отражают состояние всех клавиш на данный момент, и функция GetAsyncKeyState позволяет определить, нажата ли сейчас заданная клавиша. GetAsyncKeyState всегда возвращает 0 (не нажата), если ее вызывает другой поток, а не тот, который создал окно, находящееся сейчас в фокусе ввода.

  Функция GetKeyState отличается от GetAsyncKeyState тем, что возвращает состояние клавиатуры на тот момент, когда из очереди потока извлечено последнее сообщение от клавиатуры. Эту функцию можно вызвать в любой момент; для нее неважно, какое именно окно в фокусе.


Клавиатурные ловушки

  В операционной системе Microsoft Windows ловушкой, или хуком (hook) называется механизм перехвата событий с использованием особой функции (таких как передача сообщений Windows, ввод с мыши или клавиатуры) до того, как они дойдут до приложения. Эта функция может затем реагировать на события и, в некоторых случаях, изменять или отменять их.

  Функции, получающие уведомления о событиях, называются фильтрующими функциями и различаются по типам перехватываемых ими событий. Для того чтобы Windows смогла вызывать функцию-фильтр, эта функция должна быть прикреплена к хуку (например, к клавиатурному хуку). Прикрепление одной или нескольких фильтрующих функций к какому-нибудь хуку называется установкой хука. Для установки и удаления фильтрующих функций приложения используют функции Win32 API SetWindowsHookEx и UnhookWindowsHookEx. Некоторые хуки можно устанавливать как для всей системы, так и для одного конкретного потока.

  Если к одному хуку прикреплено несколько фильтрующих функций, Windows реализует очередь функций, причем функция, прикрепленная последней, оказывается в начале очереди, а самая первая функция — в ее конце. Очередь функций-фильтров (см. рисунок 8) поддерживается самой Windows, что позволяет упростить написание фильтрующих функций и улучшить производительность операционной системы.

  Система поддерживает отдельные цепочки для каждого типа хуков. Цепочка хуков -— это список указателей на фильтрующие функции (специальные функции обратного вызова, определяемые приложением). Когда происходит некоторое событие, связанное с конкретным типом хука, система последовательно передает сообщение каждой фильтрующей функции в цепочке хуков. Действие, которое может выполнить фильтрующая функция, зависит от типа ловушки: некоторые функции могут только отслеживать возникновение событий, другие могут модифицировать параметры сообщений или даже остановить обработку сообщений, заблокировав вызов следующей фильтрующей функции в цепочке хуков или функции обработки сообщений окна-назначения.



Рисунок 8. Цепочка функций-фильтров в Windows

  Когда к хуку прикреплена одна или более функций-фильтров и происходит событие, приводящее к срабатыванию хука, ОС Windows вызывает первую функцию из очереди функций-фильтров, и на этом ее ответственность заканчивается. Далее функция ответственна за то, чтобы вызвать следующую функцию в цепочке, для чего используется функция Win32 API CallNextHookEx.

  ОС поддерживает несколько типов хуков, каждый из которых предоставляет доступ к одному из аспектов механизма обработки сообщений Windows.

  Для автора кейлоггера могут представлять интерес хуки почти всех типов: WH_KEYBOARD, WH_KEYBOARD_LL (перехват клавиатурных событий при добавлении их в очередь событий потока), WH_JOURNALRECORD и WH_JOURNALPLAYBACK (запись и воспроизведение клавиатурных и «мышиных» событий), WH_CBT (перехват множества событий, включая удаление клавиатурных событий из системной очереди аппаратного ввода), WH_GETMESSAGE (перехват событий, получаемых из очереди событий потока).


Общая схема обработки

  Обобщим все полученные выше знания о процедуре клавиатурного ввода в едином алгоритме. Итак, алгоритм прохождения сигнала от нажатия пользователем клавиш на клавиатуре до появления символов на экране можно представить следующим образом:

  • Операционная система при старте создает в системной процессе csrss.exe поток необработанного ввода и системную очередь аппаратного ввода.
  • Поток необработанного ввода в цикле посылает запросы чтения драйверу класса клавиатуры, которые остаются в состоянии ожидания до появления событий от клавиатуры.
  • Когда пользователь нажимает или отпускает клавишу на клавиатуре, микроконтроллер клавиатуры фиксирует нажатие/отпускание клавиши и посылает в центральный компьютер скан-код нажатой клавиши и запрос на прерывание.
  • Системный контроллер клавиатуры получает скан-код, производит преобразование скан-кода, делает его доступным на порту ввода-вывода 60h и генерирует аппаратное прерывание центрального процессора.
  • Контроллер прерываний вызывает процедуру обработки прерывания IRQ 1, — ISR, зарегистрированную в системе функциональным драйвером клавиатуры i8042prt.
  • Процедура ISR считывает из внутренней очереди контроллера клавиатуры появившиеся данные, переводит скан-коды в коды виртуальных клавиш (независимые значения, определенные системой) и ставит в очередь вызов отложенной процедуры I8042KeyboardIsrDpc.
  • Как только это становится возможным, система вызывает DPC, которая в свою очередь вызывает процедуру обратного вызова KeyboardClassServiceCallback, зарегистрированную драйвером класса клавиатуры Kbdclass.
  • Процедура KeyboardClassServiceCallback извлекает из своей очереди ожидающий завершения запрос от потока необработанного ввода и возвращает в нем информацию о нажатой клавише.
  • Поток необработанного ввода сохраняет полученную информацию в системной очереди аппаратного ввода и формирует на ее основе базовые клавиатурные сообщения Windows WM_KEYDOWN, WM_KEYUP, которые ставятся в конец очереди виртуального ввода VIQ активного потока.
  • Цикл обработки сообщений потока удаляет сообщение из очереди и передает его соответствующей оконной процедуре для обработки. При этом может быть вызвана системная функция TranslateMessage, которая на основе базовых клавиатурных сообщений создает дополнительные «символьные» сообщения WM_CHAR, WM_SYSCHAR, WM_DEADCHAR и WM_SYSDEADCHAR.

Модель прямого ввода (Raw Input)

  Описанная выше модель клавиатурного ввода имеет ряд недостатков с точки зрения разработчиков приложений. Так, для получения ввода от нестандартного устройства приложение должно выполнить значительное число операций: открыть устройство, периодически его опрашивать, заботиться о возможности параллельного использования устройства другим приложением и т.д. Поэтому в последних версиях ОС Windows была предложена альтернативная модель ввода, названная моделью прямого ввода, упрощающая разработку приложений, использующих нестандартные устройства ввода (см. рисунок 3, приложения DirectInput).

  Модель прямого ввода отличается от оригинальной модели ввода Windows. В обычной модели приложение получает устройство-независимый ввод в форме сообщений (таких как WM_CHAR), которые посылаются окнам приложения. В модели прямого ввода приложение должно зарегистрировать устройства, от которых оно хочет получать ввод. Далее приложение получает пользовательский ввод через сообщение WM_INPUT. Поддерживается два способа передачи данных — стандартный и буферизированный; для интерпретации введенных данных приложению нужно получить информацию о природе устройства ввода, что можно сделать с помощью функции GetRawInputDeviceInfo.


Варианты реализации кейлоггеров

  Далее мы рассмотрим основные методы реализации кейлоггеров, основываясь на описанной выше модели обработки клавиатурного ввода в ОС Windows. Зная, как устроена эта модель, проще понять, какие механизмы могут быть использованы кейлоггерами.

  Кейлоггеры могут внедряться в любом месте последовательности обработки, перехватывая данные о нажатых клавишах, передаваемые одной подсистемой обработки следующей подсистеме в цепочке обработчиков. Рассматриваемые ниже методы реализации программных кейлоггеров мы раздели на методы пользовательского режима и методы режима ядра. На рисунке 9 отображены все подсистемы обработки клавиатурного ввода и их взаимосвязи. Рядом с некоторыми подсистемами расположены цифры в красных кружочках — они соответствуют разделу статьи, в которой описывается метод реализации кейлоггеров, связанный с заменой или использованием выделенной подсистемы.

Увеличить рисунок

Рис. 9. Общая схема обработки клавиатурного ввода в ОС Windows

  В данном разделе мы не будем рассматривать аппаратные методы реализации кейлоггеров. Заметим лишь, что существуют три основных разновидности реализации аппаратных кейлоггеров: кейлоггер, встраиваемый в саму клавиатуру; кейлоггер, встраиваемый в разрыв кабеля, соединяющего клавиатуру и системный блок; кейлоггер, встраиваемый в системный блок компьютера. Самым распространенным является второй тип аппаратных кейлоггеров, один из самых известных примеров которых — KeyGhost USB Keylogger.

  К сожалению, в настоящее время одним из немногих антивирусных решений, предоставляющих необходимый уровень защиты от потенциальной опасности, которую несут кейлоггеры, являются антивирусные продукты линейки 6.0 «Лаборатории Касперского» (подробнее см. статью «Защита от кейлоггеров с помощью Антивируса Касперского версии 6.0 и Kaspersky Internet Security 6.0»).


1. Кейлоггеры пользовательского режима

  Кейлоггеры пользовательского режима — наиболее простые как для реализации, так и для обнаружения, поскольку для перехвата они используют вызовы известных и хорошо документированных функций программного интерфейса Win32 API.


1.1. Установка ловушки для клавиатурных сообщений

  Пожалуй, это самый распространенный метод реализации кейлоггеров. Посредством вызова функции SetWindowsHookEx кейлоггер устанавливает глобальную ловушку на клавиатурные события для всех потоков в системе (см. раздел «Клавиатурные ловушки»). Фильтрующая функция ловушки в этом случае располагается в отдельной динамической библиотеке, которая внедряется во все процессы системы, занимающиеся обработкой сообщений. При выборке из очереди сообщений любого потока клавиатурного сообщения система вызовет установленную фильтрующую функцию.

  К достоинствам этого метода перехвата относится простота и гарантированный перехват всех нажатий клавиатуры, из недостатков можно отметить необходимость наличия отдельного файла динамической библиотеки и относительную простоту обнаружения по причине внедрения во все системные процессы.

  Примером кейлоггеров, использующих данный метод реализации, являются AdvancedKeyLogger, KeyGhost, Absolute Keylogger, Actual Keylogger, Actual Spy, Family Key Logger, GHOST SPY, Haxdoor, MyDoom и другие.

  Kaspersky Internet Security проактивно детектирует такого рода кейлоггеры как invader (loader) (должна быть включена опция «Внедрение оконных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).


1.2. Использование циклического опроса состояния клавиатуры

  Является вторым по распространенности методом реализации кейлоггеров. Состояние всех клавиш с небольшим интервалом опрашивается с помощью функций GetAsynсKeyState или GetKeyState. Данные функции возвращают массивы асинхронного или синхронного состояния клавиш (см. раздел «Массив синхронного состояния клавиш»); анализируя их, можно понять, какие клавиши были нажаты или отпущены после последнего опроса.

  Достоинства данного метода — предельная простота реализации, отсутствие дополнительного модуля (как и в случае с использованием ловушки), недостатки — отсутствие гарантии обнаружения всех нажатий, могут быть пропуски; легко обнаруживается мониторингом процессов, опрашивающих клавиатуру с высокой частотой.

  Данный метод реализации используется в таких кейлоггерах, как Computer Monitor, Keyboard Guardian, PC Activity Monitor Pro, Power Spy, Powered Keylogger, Spytector, Stealth KeyLogger, Total Spy.

  Kaspersky Internet Security проактивно детектирует подобные кейлоггеры как Keylogger (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).


1.3. Внедрение в процесс и перехват функций обработки сообщений

  Редко реализуемый метод реализации кейлоггера. Кейлоггер внедряется во все процессы и перехватывает в них функции GetMessage или PeekMessage (см. раздел «Обработка сообщений конкретным окном») из библиотеки user32.dll. Для этого могут быть использованы различные методы: сплайсинг (сплайсинг — метод, используемый для перехвата вызова API-функций; суть метода состоит в замене нескольких (обычно 5) первых байт функции инструкцией JMP, передающей управление коду-перехватчику), модификация таблицы адресов импортируемых функций IAT, перехват функции GetProcAddress, возвращающей адрес функции из загруженной динамической библиотеки. Кейлоггер может реализовываться в виде DLL или при помощи непосредственного внедрения кода в целевой процесс.

  В результате получается следующее: когда приложение вызывает, к примеру, функцию GetMessage для получения следующего сообщения из очереди сообщений, этот вызов приходит в код перехватчика. Перехватчик вызывает исходную функцию GetMessage из user32.dll и анализирует возвращаемые результаты на предмет типа сообщений. При получении клавиатурного сообщения вся информации о нем извлекается из параметров сообщения и протоколируется кейлоггером.

  К достоинствам следует отнести эффективность: ввиду малой распространенности метода лишь небольшое число программ позволяет находить подобные кейлоггеры; кроме того, против подобных кейлоггеров бесполезны стандартные экранные клавиатуры, так как посылаемые ими сообщения также перехватываются.

  Недостатки: модификация таблицы IAT не гарантирует перехвата, т.к. адреса функций библиотеки user32.dll могут быть сохранены до того, как кейлоггер внедрился; сплайсинг имеет свои сложности, связанные, например, с необходимостью переписывать «на лету» тело функции.

  Kaspersky Internet Security проактивно детектирует такие кейлоггеры как invader (должна быть включена опция «Внедрение в процесс (invaders)» подсистемы «Анализ активности приложений» модуля проактивной защиты).


1.4. Использование модели прямого ввода

  В настоящий момент известен лишь один пример реализации данного метода — утилита тестирования защищенности системы от кейлоггеров. Суть метода заключается в использовании новой модели прямого ввода (см. раздел «Модель прямого ввода (Raw Input)»), для чего кейлоггер регистрирует клавиатуру в качестве устройства, от которого он хочет получать ввод. После этого кейлоггер начинает получать данные о нажатых и отпущенных клавишах через сообщение WM_INPUT.

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

  Недостатки — простота обнаружения по причине необходимости специальной регистрации на получение приложением прямого ввода (по умолчанию ни один из процессов в системе его не получает).

  Kaspersky Internet Security 7.0 будет проактивно детектировать такие кейлоггеры как Keylogger (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).


2. Кейлоггеры режима ядра

  Кейлоггеры режима ядра значительно более сложные, чем кейлоггеры пользовательского режима — как для реализации, так и в плане обнаружения. Они требуют специальных знаний для написания, но позволяют создавать кейлоггеры, абсолютно незаметные для всех приложений пользовательского режима. Для перехвата могут использоваться как документированные в Microsoft Driver Development Kit, так и недокументированные методы.


2.1. Использование драйвер-фильтра драйвера класса клавиатуры Kbdclass

  Документированный в DDK способ перехвата (см. раздел «Стек драйверов для Plug and Play PS/2-клавиатуры»). Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре посредством установки фильтра поверх устройства «\Device\KeyboardClass0», созданного драйвером Kbdclass (см. раздел «Стек устройств для Plug and Play PS/2-клавиатуры»). Фильтруются только запросы типа IRP_MJ_READ, поскольку именно они позволяют получить коды нажатых и отпущенных клавиш.

  Достоинства — гарантированный перехват всех нажатий, невозможность обнаружения без использования драйвера, благодаря чему не все антикейлоггеры их определяют. Недостатки — необходимость установки собственного драйвера.

  Самыми известными кейлоггерами, использующими данный метод реализации, являются ELITE Keylogger и Invisible KeyLogger Stealth.

  Kaspersky Internet Security проактивно детектирует такие кейлоггеры как Keylogger путем мониторинга клавиатурного стека устройств (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).


2.2. Использование драйвер-фильтра функционального драйвера i8042prt

  Документированный в DDK способ перехвата. Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре посредством установки фильтра поверх безымянного устройства, создаваемого драйвером i8042prt под устройством Device\KeyboardClass0 (см. раздел «Стек устройств для Plug and Play PS/2-клавиатуры»). Драйвер i8042prt предоставляет собой программный интерфейс для добавления дополнительной функции обработки прерывания IRQ1 (IsrRoutine), в которой можно произвести анализ полученных от клавиатуры данных.

  Достоинства и недостатки аналогичны описанным для метода, в предыдущем пункте. Но есть и дополнительный недостаток — зависимость от типа клавиатуры: драйвер i8042prt обрабатывает запросы только от PS/2 клавиатуры, поэтому рассматриваемый метод не пригоден для перехвата данных, вводимых через USB или беспроводную клавиатуру.

  Kaspersky Internet Security проактивно детектирует такие кейлоггеры как Keylogger путем мониторинга клавиатурного стека устройств (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).


2.3. Модификация таблицы обработки системных запросов драйвера Kbdclass

  Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре, подменяя точку входа IRP_MJ_READ в таблице обработки системных запросов (dispatch table) драйвера Kbdclass. Функционально похож на драйвер-фильтр драйвера Kbdclass (см. раздел «2.1. Драйвера-фильтры драйвера класса kbdclass»). Особенности те же. В другом варианте используется перехват иной функции обработчика запросов — IRP_MJ_DEVICECONTROL. В этом случае кейлоггер становится подобным драйверу-фильтру драйвера i8042 (см. раздел «2.2. Драйвера-фильтры функционального драйвера i8042prt»).

  Kaspersky Internet Security проактивно детектирует такие кейлоггеры как Keylogger (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).


2.4. Модификация таблицы системных сервисов KeServiceDescriptorTableShadow

  Достаточно распространенный метод реализации кейлоггеров, функционально аналогичный методу реализации пользовательского режима, описанному в разделе «1.3. Внедрение в процесс и перехват функций GetMessage/PeekMessage». Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре посредством патчинга точки входа NtUserGetMessage/PeekMessage во второй таблице системных сервисов (KeServiceDescriptorTableShadow) драйвера win32k.sys. Информация о нажатии клавиши приходит в перехватчик, когда в каком-либо потоке завершается вызов функций GetMessage или PeekMessage.

  Достоинством данного метода является сложность его обнаружения, недостатком — относительная сложность реализации (поиск самой таблицы KeServiceDescriptorTableShadow — непростая задача; помимо этого, другие драйвера могут ранее пропатчить точки входа в этой таблице) и необходимость установки отдельного драйвера.

  Kaspersky Internet Security проактивно детектирует такие кейлоггеры как Keylogger (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).


2.5. Модификация кода функций NtUserGetMessage или NtUserPeekMessage путем сплайсинга

  Крайне редко встречаемый тип кейлоггера. Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре, модифицируя код функций NtUserGetMessage или NtUserPeekMessage методом сплайсинга. Данные функции реализованы в ядре системы в драйвере win32k.sys и вызываются из соответствующих функций библиотеки user32.dll. Как указано в разделе «1.3. Внедрение в процесс и перехват функций GetMessage/PeekMessage», эти функции позволяют фильтровать все получаемые приложениями сообщения и получать данные о нажатии и отпускании клавиш из клавиатурных сообщений.

  Достоинством данного метода является сложность его обнаружения, недостатком — трудности реализации (необходимость переписывать тело функции «на лету», зависимость от версии операционной системы и установленного программного обеспечения), а также необходимость установки драйвера.


2.6. Подмена драйвера в клавиатурном стеке драйверов

  Данный метод основан на подмене драйвера Kbdclass или одного из низкоуровневых драйверов клавиатуры драйвером собственной разработки. Явным недостатком данного метода является сложность реализации, так как заранее не известен тип применяемой пользователем клавиатуры, а потому подмену драйвера сравнительно просто обнаружить. Вследствие этого подобный метод практически не реализуется на практике.


2.7. Реализация собственного драйвера-обработчика прерывания IRQ 1

  Метод заключается в написании своего драйвера режима ядра, перехватывающего прерывание от клавиатуры (IRQ 1) и напрямую обращающегося к ее портам ввода-вывода (60h, 64h). В связи со сложностью реализации и не совсем ясным способом взаимодействия с системным обработчиком прерывания IRQ 1 (драйвером i8042prt.sys) в настоящее время метод является сугубо теоретическим.


Выводы

  В данной статье рассмотрен алгоритм прохождения данных от нажатия пользователем клавиш на клавиатуре до появления символов на экране монитора, проанализированы звенья цепи обработки сигнала, рассмотрены методы реализации кейлоггеров, основанные на перехвате клавиатурного ввода на определенных этапах данного алгоритма.

  1. Рассмотренная схема клавиатурного ввода в ОС Windows достаточно сложна, и практически на любом ее этапе можно установить перехватчик. На некоторых шагах алгоритма перехватчики уже реализованы, на некоторых еще нет.
  2. Существует зависимость распространенности кейлоггера от сложности его реализации. Так, наиболее распространенные методы перехвата — установка ловушки на события ввода и циклический опрос состояния клавиатуры — являются в то же время самыми простыми в реализации. Написать кейлоггер, использующий данные методы, может даже человек, научившийся программировать неделю назад.
  3. Основная масса существующих в настоящее время кейлоггеров представляет собой достаточно простой в реализации инструмент, который можно легко использовать во вредоносных целях, в первую очередь для кражи вводимой с клавиатуры конфиденциальной информации.
  4. Антивирусным компаниям необходимо обеспечить пользователей защитой от угрозы, которую представляют используемые злоумышленниками кейлоггеры.

  По мере совершенствования средств защиты авторам кейлоггеров придется обращаться к реализации более сложных клавиатурных шпионов, использующих драйвера ядра операционной системы Windows, — на этом поле деятельности у них остается еще много возможностей.





Рейтинг @Mail.ru

Rambler's Top100
Rambler's Top100