Перехват функций ядра — это базовый метод, позволяющий переопределить/расширить различные механизмы ядра.
Учитывая, что ядро Linux практически полностью написано на языке C, за исключением небольших архитектурно-зависимых частей, можно утверждать, что для реализации встраивания в большинство компонентов ядра достаточно иметь возможность перехватывать соответствующие функции.
Эта статья является продолжением ранее анонсированный цикл , посвященный конкретным вопросам реализации введенных мер безопасности и, в частности, интеграции в программные системы.
Целью перехвата любой функции является получение контроля в момент ее вызова.
Дальнейшие действия зависят от конкретных задач.
В одних случаях необходимо заменить системную реализацию алгоритма на свою, в других — дополнить ее.
При этом важно оставить возможность использования перехваченной функции в своих целях.
Традиционным подходом к перехвату стало использование концепции «оберток», позволяющей реализовать пред- и постобработку, сохраняя при этом возможность доступа к исходному функционалу, представленному перехватываемой функцией.
В основе большинства методов перехвата функций лежит патчинг — модификация кода ядра таким образом, чтобы обеспечить возможность передачи управления функции-перехватчику при вызове целевой функции.
Более того, благодаря развитой системе команд архитектуры x86, существует множество вариантов изменения потока выполнения (да, JMP — лишь один из них: подробнее ).
Техника перехвата
Суть описываемого метода перехвата будет заключаться в модификации пролога (начала) целевой функции таким образом, чтобы ее выполнение процессором приводило к передаче управления функции-обработчику.Другими словами, для каждой целевой функции мы модифицируем пролог, записывая в его начало команду JMP. Это переключит поток выполнения с целевой функции на соответствующий обработчик.
Например, если перед перехватом функция inode_permission имеет форму:
Теги: #ядро Linux #перехват #C++ #Системное программированиеinode_permission: 0xffffffff811c4530 <+0>:
-
Взгляд Клиента На Веб-Безопасность
19 Oct, 24 -
Xfce 4.10
19 Oct, 24 -
Деревянные Игрушки, Часть Десятая - 1996 Г.
19 Oct, 24 -
Кинетическое Зарядное Устройство
19 Oct, 24 -
Firefox И Распараллеливание Процессов
19 Oct, 24