ядро — на вилы КРИС КАСПЕРСКИ АКА МЫЩЪХ Спецвыпуск: Хакер, номер #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 |