Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Руткит

Лекция



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

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

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

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

Руткиты — это тип вредоносного ПО, созданный для скрытия своего присутствия в системе и обеспечения длительного контроля над устройством. Впервые термин появился в 1990-х годах, когда хакеры начали применять «руткиты» для маскировки вредоносных действий в Unix-подобных системах. С тех пор руткиты стали более сложными и распространяются на многие операционные системы, включая Windows и Linux. Знание того, что такое руткит, и как с ним бороться, является ключевым для обеспечения кибербезопасности.

Что такое руткит?

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

Классификация руткитов

  • По уровню привилегий
    • Уровень пользователя (user-mode)
    • Уровень ядра (kernel-mode)
  • По принципу действия
    • изменяющие алгоритмы выполнения системных функций (Modify execution path)
    • изменяющие системные структуры данных (Direct kernel object manipulation)

Руткиты делятся на несколько типов в зависимости от уровня доступа и методов проникновения. Основные виды руткитов:

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

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

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

  4. Виртуальные руткиты (Hypervisor rootkits): Самый сложный вид руткитов, который устанавливает себя как виртуальный гипервизор и запускает ОС как виртуальную машину. Это позволяет руткиту перехватывать все операции, выполняемые на устройстве, и делает его практически неуловимым.

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

Как работают руткиты?

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

  1. Проникновение в систему: Внедрение руткита может произойти через зараженные файлы, фишинговые атаки, загрузки и уязвимости системы.
  2. Получение привилегий администратора: Руткит стремится получить наивысшие права, чтобы выполнять скрытые команды и манипулировать системой.
  3. Скрытие присутствия: Руткит маскирует файлы, процессы и записи в реестре, чтобы оставаться незамеченным.
  4. Поддержание постоянного доступа: После установки руткит создает «заднюю дверь», которая позволяет злоумышленнику получить доступ к системе в любое время.

Основные методы реализации

В Microsoft Windows

Существуют разнообразные технологии руткитов, наиболее распространенные: захват таблиц вызовов (IAT, IDT, SSDT, GDT), перехват функций (например, модификацией начальных байт), непосредственное изменение системных объектов (DKOM), методы использования драйверов.

Захват таблиц вызовов

Таблица вызовов представляет собой массив, в котором каждый элемент хранит адрес соответствующей процедуры. Такие таблицы существуют и в режиме ядра (IDT, CPU MSRs, GDT, SSDT, IRP dispatch table), и в режиме пользователя (IAT).

Import Address Table (IAT) — основная таблица вызовов модулей пользовательского режима. Большинство исполняемых файлов имеет одну или несколько встроенных IAT, содержащих адреса библиотечных процедур, импортируемых из DLL.

На многопроцессорной машине существуют несколько экземпляров таблиц вызовов (например, IDT, GDT, MSR). Так как каждый процессор имеет собственные системные регистры (в частности, GDTR — регистр глобальной таблицы дескрипторов (GDT), IDTR — регистр дескриптора таблицы прерываний (IDT) и IA32_SYSENTER_EIP — содержит виртуальный адрес входной точки в режим ядра (MSR)), он также имеет собственные системные структуры.

При изменении записи в таблице вызовов контролируется исполнение программ и, при необходимости, перенаправляется на требуемые функции. Перехваченная процедура может :

  • блокировать вызовы, производимые определенными приложениями (например, антивирус)
  • замещать исходную процедуру
  • производить мониторинг системы путем перехвата вводимых параметров
  • фильтровать выходные параметры

Общая идея захвата состоит в следующем:

  • Идентифицировать таблицу вызовов, получить ее адрес
  • Сохранить существующую в таблице запись
  • Подменить запись новым адресом
  • Восстановить исходную запись

Руткит

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

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

  • Получить доступ к адресному пространству процессора
  • Локализировать IAT в образе памяти процессора
  • Модифицировать требуемую IAT
Руткит
Перехват таблицы вызовов (IAT)

Для манипуляции IAT, требуется доступ к адресному пространству приложения, которому таблица принадлежит. Одним из способов является внедрение DLL. Среди методов внедрения DLL в адресное пространство процесса можно указать

  • Модификация значения реестра AppInit_DLL
  • API-вызов SetWindowsHookEx()
  • Использование удаленных потоков

Перехват модификацией кода функции

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

  1. код перехватчика может быть установлен только в начале функции;
  2. для каждого вызова перехваченной функции перехватчику необходимо восстановить ее машинный код до вызова и повторно перехватить после завершения вызова.

Алгоритм работы руткита:

  1. В теле перехватчика создается массив, в который записываются первые N байт каждой из перехваченных функций (обычно размер модифицированного кода не превышает 20 байт)
  2. Массив заполняется эталонным машинным кодом перехватываемых функций.
  3. В начало каждой перехватываемой функции записывается код, осуществляющий передачу управления перехватчику.

Алгоритм работы перехватчика:

  1. Последовательность действий, определенных злоумышленником.
  2. Восстановление первых N байт перехваченной функции.
  3. Вызов перехваченной функции.
  4. Повторная модификация машинного кода перехваченной функции: перезапись кода, передающего управление перехватчику, в первые байты.
  5. Анализ и, при необходимости, модификация результатов выполнения исходной функции.
  6. Выполнение операции ret, возвращение управления вызвавшей функцию программе.

Руткит

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

Следует отметить, что простейшие системы зашиты от атак такого типа проверяют первый байт вызываемых функций на предмет наличия в них машинного кода операции jmp. В качестве меры противодействия разработчики руткитов применяют методики «маскировки» кода, записываемого в начало функции перехватчика(применения команд вида PUSH/RET, размещения нескольких операторов NOP или мусорного кода типа PUSH AX/POP АХ, а также элементы полиморфизма).

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

DKOM (Direct Kernel Object Manipulation)

Операционные системы семейства Windows NT используют стандартные модели объектов. Различные компоненты исполняющей системы определяют один или несколько типов объектов. Каждый компонент экспортирует в режиме ядра набор поддерживаемых функции и свойств, называемый COM-интерфейсом, для манипуляции этим типом объектов. Ни один компонент не может напрямую получить доступ к другому объекту компонента. Типичными объектами режима ядра являются:

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

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

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

EPROCESS — это структура, служащая для внутреннего представления процесса (объект процесса). Windows использует круговой двусвязный список структур EPROCESS для отслеживания процесса исполнения. Ссылки, связывающие объекты EPROCESS, содержаться в поле ActiveProcessLink, структура которого LIST_ENTRY :

typedef struct _LIST_ENTRY {

 struct _LIST_ENTRY  *Flink;
 struct _LIST_ENTRY  *Blink;

} LIST_ENTRY, *PLIST_ENTRY;

Простейший алгоритм скрытия процесса:

  1. Получение указателя на процесс, к которому принадлежит текущий поток, с помощью вызова PsGetCurrentProcess()
  2. Получение PID процесса
  3. При несовпадении PID с искомым осуществляется переход по двусвязному списку (поле ActiveProcessLinks, тип LIST_ENTRY)
  4. Изменение полей ActiveProcessLinks. В частности, ссылка на следующий блок EPROCESS блока А устанавливается на блок С, аналогично ссылка на предыдущий блок в блоке С. Ссылки блока B замыкаются на своей записи. Таким образом, создаются два списка, один из которых состоит из одного элемента

Исключение процесса из списка процессов не влияет на его исполнение. В Windows планирование кода на исполнение производится на уровне потоков, процессы определяют контекст, в котором запускаются потоки. Скрытие процесса производиться на внешнем уровне в инструментах, опирающихся на объекты процессов EPROCESS, таких как Диспетчер задач. Диспетчер ядра использует другую схему учета ресурсов, полагающуюся на другие структуры данных (главным образом объекта ETHREAD). Данный метод позволяет скрывать процессы без потери функциональности.

Драйверы. Модель драйверов Microsoft поддерживает многоуровневую архитектуру, поэтому запрос ввода/вывода (I/O request, обмен данными между приложениями и драйверами) может обслуживаться серией подключенных драйверов, каждый из которых выполняет свою задачу. Цепь драйверов, обслуживающих физическое устройство, называется стеком. Такой модульный подход позволяет новым драйверам быть включенными в стек для увеличения функциональности. При этом изменяется или добавляется только отдельный участок цепи. Также некоторые периферийные устройства используют одинаковые контроллеры (и, соответственно, шины ввода/вывода). Модульность позволяет оптимизировать использование одинаковых блоков кода, вместо написания отдельного драйвера для каждого устройства.

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

IRP пакет (I/O request packet) — структура данных ядра Windows, обеспечивающая обмен данными между приложениями и драйвером, а также между драйвером и драйвером. При поступлении запроса от приложения менеджер ввода/вывода формирует соответствующий IRP, который локализует и пересылается верхнему объекту в стеке драйверов. Если верхний драйвер смог самостоятельно обработать поступивший IRP, он завершает запрос и возвращает IRP менеджеру ввода/вывода. В противном случае, драйвер выполняет частичную обработку, локализует нижележащий объект в стеке и запрашивает менеджер ввода/вывода на передачу IRP следующему драйверу

При создании IRP менеджер ввода/вывода резервирует область памяти, находящуюся после заголовка. Выделенная память используется для записи массива структур IO_STACK_LOCATION, выделяемых для каждого драйвера стека:

Размер памяти соответствует количеству драйверов в стеке. Массив нумеруется с 1, соответствующую нижнему драйверу стека. Структура содержит информацию о вызываемой менеджером ввода/вывода функции управления драйвера (поля MajorFunction и MinorFunction), передаваемые функции параметры (поле Parameters, содержимое варьируется в зависимости от функции), указатель на объект драйвера (DeviceObject), указатель на функцию завершения (поле CompletionRoutine, данная функция находится в драйвере верхнего уровня).

Функция управления драйвера при первом получении IRP восстанавливает из соответствующей позиции стека ввода/вывода параметры, производя вызов IoGetCurrentIrpStackLocation(). Далее выполняются предписанные действия, после чего, в случае пересылки IRP нижнему драйверу стека, происходит:

  • установка позиции стека ввода/вывода в IRP
  • регистрация функции завершения (опционально)
  • отправка IRP нижнему драйверу
  • возврат кода статуса (NTSTATUS)

Существуют два стандартных способа установить позицию стека для следующего драйвера:[10]

  • Текущая позиция пересылается без изменений, функция:

VOID IoSkipCurrentIrpStackLocation (IN PIRP Irp);

Функция уменьшает на единицу указатель на массив IO_STACK_LOCATION. Таким образом, при пересылке IRP произойдет восстановление указателя (автоматически увеличится на единицу), в итоге, будет использован тот же участок стека. При использовании данного способа, возникнет неиспользуемый участок в конце стека.

  • Если необходимо передать содержимое текущей позиции стека, за исключением указателя на функцию завершения (поле CompletionRoutine), используется:

VOID IoCopyCurrentIrpStackLocationToNext (IN PIRP Irp);

Пересылка IRP следующему драйверу производиться с помощью функции: NTSTATUS IoCallDriver (IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp);

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

Руткит
Завершение обработки IRP

Каждый запрос должен быть завершен либо последним драйвером в стеке (дальнейшая пересылка IRP невозможна), либо одним из вышестоящих.

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

Собственно, установленный таким образом драйвер-фильтр позволяет обрабатывать не только приходящие IRP-пакеты (например, блокировать чтение определенного сектора диска), но и управлять результатами обработки нижестоящих драйверов посредством инициализации функции завершения.[11]

Еще одним методом реализации руткитов является модификация MBR и загрузка до ядра операционной системы — буткиты (например, BackDoor.MaosBoot).

Данный вид вредоносных кодов в среде Windows известен с начала 1990-х годов под названием стелс-вирусов.

В UNIX и linux

  • реализуемые подменой основных системных утилит (очень легко обнаруживаются средствами контроля целостности, кроме того, легко блокируются средствамимандатного управления доступом типа SELinux или AppArmor;
  • реализованные в виде модуля ядра и основанные на патчинге VFS или перехвате таблицы системных вызовов (sys_call_table);
  • основанные на модификации физической памяти ядра.

Дополнительные возможности

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

Легальные руткиты

Руткиты могут «подкидывать» не только злоумышленники. Небезызвестен случай, когда корпорация Sony встраивала подобие руткита в свои лицензионные аудиодиски. Руткитами по сути является большинство программных средств защиты от копирования (и средств обхода этих защит — например, эмуляторы CD- и DVD-приводов). От «нелегальных» они отличаются только тем, что ставятся с ведома пользователя .

Методы распространения руткитов

Руткиты используют различные методы для проникновения в системы:

  • Загрузка зараженных программ: Пользователь скачивает программу из ненадежного источника, которая содержит руткит.
  • Фишинговые атаки: Мошенники отправляют письма с вредоносными ссылками или вложениями, которые заражают устройство при открытии.
  • Уязвимости операционной системы и программного обеспечения: Руткиты могут проникать через «дыры» в безопасности ОС или сторонних приложений.
  • Поддельные обновления: Под видом обновлений операционной системы или ПО руткит может проникнуть в устройство.

Как обнаружить руткит?

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

  1. Антивирусное ПО и антируткит-утилиты: Специализированные программы, такие как Malwarebytes, Avast, и Sophos, предлагают функции для обнаружения руткитов.
  2. Сканирование системы в автономном режиме: Сканирование при загрузке с загрузочного носителя или в безопасном режиме может помочь выявить руткиты.
  3. Мониторинг аномального поведения: Если система стала медленнее работать, наблюдаются неожиданные изменения в конфигурации или проблемы с безопасностью, это может быть признаком руткита.
  4. Журналы событий и сетевой трафик: Мониторинг логов событий и сетевого трафика может выявить подозрительную активность, связанную с руткитом.

Как защититься от руткитов?

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

Защита от руткитов заключается в нескольких ключевых шагах:

  1. Обновление операционной системы и ПО: своевременные обновления устраняют уязвимости, которые могут быть использованы для проникновения руткита.
  2. Использование надежного антивируса: современные антивирусные программы предлагают защиту от руткитов и других скрытых угроз.
  3. Осторожность с загрузкой программ и файлов: избегайте загрузки файлов из ненадежных источников и всегда проверяйте вложения в письмах.
  4. Регулярное резервное копирование данных: позволяет восстановить систему, если руткит нанесет критический ущерб.

Антируткиты

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

Поиск расхождений

Против MEP-руткитов. Одна и та же информация получается несколькими способами с использованием API и «напрямую» и ищутся расхождения. В частности, обычно сканируются таблицы импорта, таблица Native API, файловая система.

Заключение

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

создано: 2014-08-31
обновлено: 2024-10-27
268



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Криптоанализ, Виды уязвимости и защита Информации

Термины: Криптоанализ, Виды уязвимости и защита Информации