The module was created as a part of my master thesis in the 2010 year. The master thesis theme is Keylogging in Linux kernel. The main idea was to find out a way to intercept system calls for x64 arch Linux kernel, especially for kernel 2.6.34.7-61.fc13.x86_64.
Рубрика «hooking»
System call interception in Linux-kernel module
2019-01-23 в 5:23, admin, рубрики: C, hooking, kernel, linux, rootkit, x86-64, Настройка Linux, Разработка под LinuxПерехват функций в ядре Linux с помощью ftrace
2018-06-05 в 5:57, admin, рубрики: C, ftrace, hooking, hooks, kernel module, kprobes, linux, linux kernel, перехват функций, Разработка под Linux, системное программирование, системные вызовы, сплайсинг, хуки, ядро LinuxВ одном проекте, связанном с безопасностью Linux-систем, нам потребовалось перехватывать вызовы важных функций внутри ядра (вроде открытия файлов и запуска процессов) для обеспечения возможности мониторинга активности в системе и превентивного блокирования деятельности подозрительных процессов.
В процессе разработки нам удалось изобрести довольно неплохой подход, позволяющий удобно перехватить любую функцию в ядре по имени и выполнить свой код вокруг её вызовов. Перехватчик можно устанавливать из загружаемого GPL-модуля, без пересборки ядра. Подход поддерживает ядра версий 3.19+ для архитектуры x86_64.
Читать полностью »
Встраивание в ядро Linux: перехват системных вызовов
2014-12-22 в 13:15, admin, рубрики: hooking, linux kernel, Блог компании Код Безопасности, системное программированиеПод термином «системный вызов» в программировании и вычислительной технике понимается обращение прикладной программы к ядру операционной системы (ОС) для выполнения какой-либо операции. Ввиду того что такое взаимодействие является основным, перехват системных вызовов представляется важнейшим этапом встраивания, т.к. позволяет осуществлять контроль ключевого компонента ядра ОС — интерфейса системных вызовов, что, в свою очередь, даёт возможность инспектировать запросы прикладного ПО к сервисам ядра.
Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты, и, в частности, встраиванию в программные системы.
Патчим процессы в Linux на лету при помощи GDB
2014-09-24 в 16:01, admin, рубрики: gdb, hooking, linux, python, отладкаТехники перехвата функций в Linux хорошо известны и описаны в интернете. Наиболее простой метод заключается в написании динамической библиотеки с «функциями-клонами» и использовании механизма LD_PRELOAD для переопределения таблицы импорта на этапе загрузки процесса.
Недостаток LD_PRELOAD в том что необходимо контролировать запуск процесса. Для перехвата функций в уже работающем процессе или функций отсутствующих в таблице импорта можно использовать «сплайсинг» — запись команды перехода на перехватчик в начало перехватываемой функции.
Также известно, что в Python имеется модуль ctypes
позволяющий взаимодействовать с данными и функциями языка Си (т.е. большим числом динамических библиотек имеющих Си интерфейс). Таким образом ничто не мешает перехватить функцию процесса и направить её в Python метод обёрнутый в С-callback с помощью ctypes
.
Читать полностью »
Встраивание в ядро Linux: перехват функций
2014-09-22 в 17:46, admin, рубрики: hooking, linux, linux kernel, Блог компании Код Безопасности, системное программированиеПерехват функций ядра является базовым методом, позволяющим переопределять/дополнять различные его механизмы. Исходя из того, что ядро Linux почти полностью написано на языке C, за исключением небольших архитектурно-зависимых частей, можно утверждать, что для осуществления встраивания в большинство из компонентов ядра достаточно иметь возможность перехвата соответствующих функций.
Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты и, в частности, встраиванию в программные системы.
Динамическое расширение ядра Linux — добавляем функцию «удалить в корзину»
2014-01-26 в 19:02, admin, рубрики: hooking, linux, linux kernel, системное программирование, метки: hooking, linux, linux kernelМногим пользователям Linux, особенно тем, кто по тем или иным причинам перешёл на эту ОС с Windows, не хватает возможности удаления файлов «в корзину». Кроме того, наверняка, каждый, кто пользовался Linux'ом испытывал и по ошибке удалял какой-либо файл, испытывал смешаные чувства от отсутствия простой возможности восстановить утраченные данные.
В продолжение предшествующего материала, посвящённого перехвату функций ядра Linux, представляю способ использования разработанного ранее фреймворка для создания модуля ядра Linux, реализующего возможность удаления файлов «в корзину» (just for fun).
Перехват функций ядра Linux с использованием исключений (kprobes своими руками)
2014-01-08 в 18:25, admin, рубрики: hooking, kernel, linux, x86, системное программирование, метки: hooking, kernel, linux, x86Перехват функций ядра является базовым методом, позволяющим переопределять (дополнять) различные его механизмы. Исходя из того, что за исключением небольших архитектурно-зависимых частей, ядро Linux почти полностью написано на языке C, можно утверждать, что для осуществления встраивания в большинство из компонентов ядра, достаточно иметь возможность перехвата соответствующих функций ЯВУ, реализующих ту или иную логику.
Данная статья является практическим обобщением представленных ранее статей:
- Управляемый PageFault в ядре Linux
- Кошерный способ модификации защищённых от записи областей ядра Linux
Далее будет рассмотрено каким образом использование данных материалов может быть применимо в обеспечении возможности перехвата функций ядра Linux.
Читать полностью »