РЕАЛИЗАЦИЯ LINUXKERNEL РУТКИТОВ - Студенческий научный форум

VIII Международная студенческая научная конференция Студенческий научный форум - 2016

РЕАЛИЗАЦИЯ LINUXKERNEL РУТКИТОВ

Нестеренко А.Е. 1, Пескова О.Ю. 1
1Южный Федеральный Университет
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
В работе приведен пример реализации rootkit – программы для linux систем. Представлен многопоточный драйвер, производящий скрытие и защиту указанных данных, а также дампинг и отсылку информации по сети о процессах, запускаемых пользователем.

Ключевые слова: rootkit, linux, драйвер, многопоточность, slab, ядро операционной системы.

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

  • маскировки объектов (процессов, файлов, директорий, драйверов)

  • контроля (событий, происходящих в системе)

  • сбора данных (параметров системы)

В систему руткит может быть установлен различными способами: загрузка посредством эксплойта, после получения шелл-доступа (в таком случае, может использоваться средство типа wget или исходный FTP-клиент для загрузки руткита с удаленного устройства), в исходном коде или ресурсах программного продукта.

Можно представить следующую классификацию руткитов по уровню привилегий:

  1. Уровень пользователя (user-mode) – категория основана на перехвате функций библиотек пользовательского режима. Руткиты этой категории получают те же права, что обычное приложение, запущенное на компьютере. Руткиты исполняются в непривилегированном кольце (с точки зрения архитектуры информационной безопасности). Они используют программные расширения (например, для проводника Windows), перехват сообщений, отладчики, эксплуатируют уязвимости в безопасности, а также производят перехваты функций (function hooking) широко используемых API (в памяти каждого отдельного процесса). Они внедряются в другие запущенные процессы и используют их память. Это более распространенный вариант. Легче обнаруживается и устраняется даже стандартными средствами операционной системы. Дёшевы в приобретении.

  2. Уровень ядра (kernel-mode) – категория основана на установке в систему драйвера, осуществляющего перехват функций уровня ядра. Руткиты этой категории работают на самом глубинном уровне ОС, получая максимальный уровень доступа на компьютере. После инсталляции такого руткита, возможности атакующего практически безграничны. Руткиты исполняются в привилегированном нулевом кольце (наивысший уровень привилегий ОС). Они могут встраиваться в драйверы устройств, проводить прямую модификацию объектов ядра (DKOM), а также влиять на взаимодействие между пользовательским режимом и режимом ядра. Руткиты уровня ядра обычно более сложны в создании, поэтому встречаются реже. Также их гораздо сложней обнаружить и удалить. Дороги в приобретении.

Самый распространенный метод, обеспечивающий функционирование руткита уровня ядра - это перехват системных вызовов путем подмены соответствующей записи в таблице системных вызовов sys_call_table. Этот метод имеет свои недостатки: в частности, он легко детектируется антируткитами; таблица вызовов в современных ядрах не экспортируется; и кроме того, перехват некоторых системных вызовов (например, execve()) нетривиален.

Другим распространенным механизмом в kernel-mode руткитах является патчинг VFS (Virtual Filesystem Switch). Этот подход применяется в рутките adore-ng. Он основан на подмене адреса какой-либо из функций-обработчиков для текущей файловой системы.

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

Основное назначение rootkit-программ — замаскировать присутствие постороннего лица и его инструментальных средств на машине. Представленная в работе программа предназначена для скрытной слежки за действиями пользователя. Она может быть полезна для системных администраторов, аналитиков DLP систем при контроле за пользователями на предприятии, для экспертов при расследовании инцидентов.

Программа rootkit работает в пространстве ядра, перехватывает системные вызовы, генерирует и отправляет udp пакеты, сохраняет информацию в файл, скрывает своё присутствие. Программа содержит следующий набор функций.

Функция выделения памяти – позволяет динамически выделить память под переменные определённого типажа, принимает параметрами имя структуры, её размер, смещение и флаги, возвращает указатель на выделенную память.

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

Директивы препроцессора позволяют создавать глобальные переменные, узнавать архитектуру системы(i386 или amd64), поиска таблицы системных вызовов по адресу в стеке.

Функция нахождения таблицы системных вызовов ищет её среди множества соответствующих адресов в системе, возвращает адрес таблицы, либо NULL, если ничего не нашла.

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

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

Структура описывающая перехваченный процесс, содержит поле имени процесса, имени команды, pid процесса и двусвязный список.

Структура контекста потока – содержит флаг остановки и информацию о дампе.

Функция записи в файл записывает перехваченную информацию о процессах в файл.

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

Функция потока генерации и отправки udp пакетов генерирует и отправляет пакет на хост.

Функция инициализации драйвера описывает инициализацию драйвера, создание потоков, его сокрытие.

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

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

Функция создания кеш – памяти – создаёт объект в кеше.

Функция выделения памяти для кеша выделяет память определенного размера в кеше.

Функция высвобождения памяти кеша – высвобождает ранее выделенную память.

Функция удаления объекта кеша – удаляет ранее созданный объект в кеше.

Макрос загрузки модуля в ядро берёт в себя конструктор и загружает в ядро.

Для использования программы системному администратору linux – системы или инженеру/аналитику DLP системы следует придерживаться следующей инструкции.

1) Перейти в директорию с файлами rootkit.c и Makefile на целевой машине.

2) Выполнить от root команду make, для того, чтобы собрался драйвер.

3) Выполнить от root команду insmod rootkit.ko dump_timeout= proc_name=

4) Запустить на своем компьютере скипт на scapy

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
  1. поиск ядерных функций. [Электронный ресурс]. – URL:http://lxr.free-electrons.com/ident. (дата обращения: 13.12.15)

  1. Перехват системных вызовов. [Электронный ресурс].  URL: http://jbremer.org/x86-api-hooking-demystified/#ah-basic (дата обращения: 13.12.15)

  1. Пример руткита. [Электронный ресурс].  URL: http://turbochaos.blogspot.ru/2013/09/linux-rootkits-101-1-of-3.html (дата обращения: 13.12.15)

  1. Информация о руткитах. [Электронный ресурс].  https://ru.wikipedia.org/wiki/%D0%A0%D1%83%D1%82%D0%BA%D0%B8%D1%82 (дата обращения: 13.12.15)

  1. Slab и slab allocator. [Электронный ресурс].  URL: https://ru.wikipedia.org/wiki/Slab (дата обращения: 13.12.15)

  1. Классификация руткитов [Электронный ресурс]. - https://blog.kaspersky.ru/chto-takoe-rutkit-i-kak-udalit-ego-s-kompyutera/650/

6

Просмотров работы: 687