- ОС: Linux
- ioctl: vm areas
Разработать комплекс программ на пользовательском уровне и уровне ярда, который собирает информацию на стороне ядра и передает информацию на уровень пользователя, и выводит ее в удобном для чтения человеком виде. Программа на уровне пользователя получает на вход аргумент(ы) командной строки (не адрес!), позволяющие идентифицировать из системных таблиц необходимый путь до целевой структуры, осуществляет передачу на уровень ядра, получает информацию из данной структуры и распечатывает структуру в стандартный вывод. Загружаемый модуль ядра принимает запрос через указанный в задании интерфейс, определяет путь до целевой структуры по переданному запросу и возвращает результат на уровень пользователя.
Интерфейс передачи может быть один из следующих:
- syscall - интерфейс системных вызовов.
- ioctl - передача параметров через управляющий вызов к файлу/устройству.
- procfs - файловая система /proc, передача параметров через запись в файл.
- debugfs - отладочная файловая система /sys/kernel/debug, передача параметров через запись в файл.
Целевая структура может быть задана двумя способами:
- Именем структуры в заголовочных файлах Linux
- Файлом в каталоге /proc. В этом случае необходимо определить целевую структуру по пути файла в /proc и выводимым данным.
Интерфейс передачи между программой пользователя и ядром: ioctl - передача параметров через управляющий вызов к файлу/устройству. Целевая структура: Именем структуры в заголовочных файлах Linux.
Комплекс программ (модуль ядра + утилита на уровне пользователя):
- Принимает на вход PID из аргументов командной строки в пользовательской программе.
- Посылает этот PID в модуль ядра через ioctl.
- Модуль ядра собирает информацию о VMA (vm_area_struct) целевого процесса.
- Модуль ядра возвращает информацию обратно в пользовательскую программу.
- Пользовательская программа выводит результат в удобном для чтения виде.
Для сборки использовался CLion
- Соберите vma_driver.c и vma_user.c
Для более подробной информации о шагах 2-7, см. 1 или 2
-
Напишите свой ключ
x509.genkey. В текущем файле необходимо указать собственное значение CN. -
Сгенерируйте пару ключей запуская
key_creation.sh. -
С готовой парой ключей запустите
key_installation.sh. -
Перезапустите систему. При перезагрузке если у вас Linux с UEFI Secure Boot, то выберите Enroll MOK > Continue > Yes > Введите пароль установленный в предыдущем шаге.
-
Для подтверждения установки ключа можете запустить
mokutil -l. -
Подпишите
vma_driver.koс помощьюsign_module.sh. -
Загрузите модуль в систему с помощью
load_driver.sh. -
Запустите
vma_user. Пример:sudo cmake-build-debug/user/vma_user 3640, где 3640 - PID. Вставьте соответсвующий путь кvma_user.