Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #69, АВГУСТ 2006 г.

ядро — на вилы

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #069, стр. 069-032-5


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

Загрузка модуля в память осуществляется утилитой kldload («man 8 kldload»), которой указывается имя модуля (если модуль расположен в текущей директории, необходимо предварить его ./), и, при желании, ключ -v - для более жестокой проверки корректности модуля.

Убедиться в успешности загрузки поможет утилита kldstat («man 8 kldstat»), которая, будучи запущенной без аргументов, выводит «свиток» всех имеющихся модулей. Если среди них присутствует syshack.ko, то операция перехвата прошла успешно, и теперь всякая попытка создания новой директории будет обречена на провал. Вплоть до выгрузки модуля из памяти, что можно сделать в любое время утилитой kldunload («man 8 kldunload»), указав ей имя модуля без расширения.

ЛИСТИНГ

полный протокол перехвата и освобождения системного вызова mkdir посредством KLD-модулей

# kldstat ; запускаем kldstat, чтобы просмотреть список модулей

Id Refs Address Size Name

1 3 0xc0100000 394090 kernel ; ядро

2 1 0xc0cac000 3000 daemon_saver.ko ; хранитель экрана

3 1 0xc0caf000 14000 linux.ko ; эмулятор LINUX'а

; как видно, syshack-модуля среди них нет (было бы удивительно, если бы он был)

# ls ; просматриваем текущий каталог утилитой ls

Makefile syshack.c syshack.ko syshack.o

; файл syshack.ko - это и есть откомпилированный KLD-модуль

# kldload ./syshack ; загружаем наш модуль в память

syshack loaded

# Jun 22 13:58:20 /kernel: syshack loadedd

Jun 22 13:58:20 /kernel: syshack loadedd

; модуль рапортует об успешной загрузке,

; и система дублирует это сообщение, указывая время его появления

# kldstat ; снова просматриваем список загруженных модулей

Id Refs Address Size Name

1 4 0xc0100000 394090 kernel ; ядро

2 1 0xc0cac000 3000 daemon_saver.ko ; хранитель экрана

3 1 0xc0caf000 14000 linux.ko ; эмулятор LINUX'а

10 1 0xc08e3000 2000 syshack.ko ; вот он, наш модуль!

; как видно, syshack появился в списке модулей,

; значит, загрузка и перехват системного вызова mkdir прошли успешно

# mkdir TEST-DIR ; пытаемся создать каталог TEST-DIR

rock you! ; сообщение нашего модуля

# Jun 22 13:58:57 /kernel: rock you!

Jun 22 13:58:57 /kernel: rock you!

; ...но вместо создания нового каталога

; mkdir пищит спикером и посылает нас на хутор за бабочками!

# ls ; просматриваем текущий каталог

Makefile syshack.c syshack.ko syshack.o

; директории TEST-DIR действительно нет,

; вот что значит правильно организованный перехват!

# kldunload syshack ; выгружаем модуль из памяти

syshack unloadedd

# Jun 22 14:00:44 /kernel: syshack unloadedd

Назад на стр. 069-032-4  Содержание  Вперед на стр. 069-032-6