УДК 004

Использование механизмов перехвата событий клавиатуры в операционной системе общего назначения Astra Linux

Микков Александр Дмитриевич – студент Санкт-Петербургского государственного университета телекоммуникаций имени профессора М. А. Бонч‑Бруевича.

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

Ключевые слова: кейлоггер, Astra Linux, X Window System, стандартные потоки.

Astra Linux – отечественная операционная система специального назначения на базе Linux, разработанная для использования в государственных и коммерческих организациях.

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

В Linux системах существует несколько стандартных потоков ввода/вывода данных:

  • Стандартный поток ввода (standard input). В данный поток содержит данные, передаваемые в терминал, например инструкции, которые передаваемые в оболочку. Как правило, данные вводятся с клавиатуры.
  • Стандартный поток вывода (standard output). Поток, через который программа отправляет вывод. Результат работы программы или сообщения об ошибках выводятся в этот поток, который по умолчанию направлен на экран.
  • Стандартный поток ошибок (standard error). Этот поток используется для вывода сообщений об ошибках и другой отладочной информации. Он по умолчанию также направлен на экран.

Потоки в Linux, обрабатываются как файлы. Обработка потока аналогична чтению из файла и записи в файл. Каждому подобному файлу, связанному с процессом, присваивается идентификатор – файловый дескриптор. Всякий раз, выполняя действие с файлом, система присваивает ему такой идентификатор.

Для организации ввода/вывода в LUNIX используются три файла: stdin, stdout и stderr, для которых резервируются дескрипторы 0, 1 и 2.

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

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

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

Для того чтобы перехватить значения нажимаемых клавиш, требуется понимать принцип работы клавиатуры в системе Linux (рис. 1):

1

Рисунок 1. Взаимодействие клавиатуры и операционной системы.

При нажатии пользователем на клавишу, в систему передается уникальный байт, называемый кодом клавиши (keycode) или скан-кодом (scancode). Он передается на каждое событие нажатия или отпускания материнской плате через интерфейс, к которому подключено устройство ввода, после чего она запускает прерывание для процессора.

Видя прерывание, процессор запускает обработчик прерывания, принимающий информацию, передаваемую клавиатурой, и передает ее ядру, которое выводит ее в devtmpfs (/dev/input/eventX).

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

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

  • Кейлоггер считывает данные из файла клавиатурного устройства
  • Кейлоггер запрашивает информацию о событиях у X Window System (X-сервера).

Для определения клавиатуры или мыши требуется итерировать все файлы в директории /dev/input/, после чего осуществить поиск файлов, принадлежащих символьному устройству и проверить, поддерживает ли данный файл события клавиатуры, а также, есть ли в нем клавиши, встречающиеся на клавиатуре.

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

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

Найдя клавиатуру, реализуем считывание событий:

  1. Записываем данные в структуру input_event;
  2. Проверяем тип и значение события EV_KEY;
  3. Сопоставляем код с названием клавиши.

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

Список литературы

  1. Операционная система общего назначения «Astra Linux Common Edition» Руководство пользователя [Электронный ресурс]. – https://astralinux.ru/products/astra-linux-common-edition/documents-astra-ce/rukovodstvo-polzovatelya-os-astra-linux-common-edition.pdf (30.05.2023).

Интересная статья? Поделись ей с другими: