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

ядро — на вилы

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

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


ЛИСТИНГ

#./find_syscall mkdir 1

Finding syscall 1: mkdir

sysent is 0x4 at 0xc03ca480

sysent[1] is at 0xc03ca488 and will execute function located at 0xc01ba2cc

Воспользовавшись функцией kvm_write, без труда поменяем указатель на mkdir в таблице системных вызовов или внедрим jump в начало самой mkdir (но последний способ не очень надежен и даже на однопроцессорных машинах может приводить к сбоям, поскольку существует вероятность, что правка функции совпадет с ее вызовом).

Остается решить последний вопрос — куда перенаправлять перехваченный системный вызов. На пользовательское адресное пространство — нельзя, система таких шуток не понимает. Теоретически, можно найти свободное место в ядре (заполненное, например, NOP'ми), записав в него крошечный «бустер», выделяющий немного памяти через malloc для размещения основного кода перехватчика, который затягивается внутрь ядра через copyin. Но никакой гарантии, что свободное место найдется, нет, поэтому лучше (и надежнее!) размещать перехватчик поверх какого-нибудь редко используемого системного вызова, например, устаревшего, но до сих пор поддерживаемого lstat, проходящего под номером 40. Или SYS_ptrace/SYS_ktrace, «ослепив» кучу утилит, предназначенных для выявления вредоносных программ, что, в конечном счете, не помешает собственной маскировке.

[Перехват системных вызовов —] прерогатива не только зловредных программ. Тем же самым занимаются и средства защиты, активно использующие интерфейс kvm, который поддерживает даже суперзащищенная OpenBSD. И вообще, следует различать действие и его мораль. А мораль такова, что распространенность BSD-систем создает все предпосылки для локальных и удаленных атак с применением всех доступных средств и интерфейсов. Главное — знать как. Все остальное — дело техники и... фантазии. В модификации ядра есть свое непередаваемое очарование, притягивающее словно магнитом и заставляющее рыскать в поисках скудной документации по всей Сети, перечитывать man и, конечно же, экспериментировать!

Проблема в том, что код, работающий на одной системе, может оказаться совершенно неработоспособным на другой. Поэтому желательно иметь в своем распоряжении хотя бы по одной версии каждой из BSD-систем. Для этой цели хорошо подходят виртуальные машины типа VM Ware. Дисковое пространство давно перестало быть проблемой, а в нормальной конфигурации (то есть без иксов) BSD-системы свободно умещаются в половину гигабайта — смехотворная по нынешним временам величина!

HTTP://HOME.UNIX-AG.ORG/BMEURER/NETBSD/HOWTO-LKM.HTML

СТАТЬЯ, РАССКАЗЫВАЮЩАЯ О ТОМ, КАК РЕАЛИЗОВАТЬ ПРОСТЕЙШИЙ МОДУЛЬ СИМВОЛЬНОГО УСТРОЙСТВА, ВЫВОДЯЩИЙ ЧИСЛА ФИБОНАЧЧИ, ПОД NETBSD (НА АНГЛИЙСКОМ ЯЗЫКЕ)

HTTP://ETUDIANT.EPITA.FR/~JAQUEM_O/NETBSD_LKM_DRIVER

САМОПИСНЫЙ МОДУЛЬ, РЕАЛИЗУЮЩИЙ ДРАЙВЕР ПОСЛЕДОВАТЕЛЬНОГО ПОРТА, ЧТОБЫ ПРОСМАТРИВАТЬ ДЕРЕВО ДРАЙВЕРОВ ПОД NETBSD (НА АНГЛИЙСКОМ ЯЗЫКЕ)

HTTP://EZINE.DAEMONNEWS.ORG/200109/OPENBSD-LKM.HTML

ПОЗНАВАТЕЛЬНАЯ СТАТЬЯ, ПОДРОБНО РАССКАЗЫВАЮЩАЯ О LKM-МОДУЛЯХ ПОД OPENBSD, С КУЧЕЙ РАЗЛИЧНЫХ ПРИМЕРОВ (НА АНГЛИЙСКОМ ЯЗЫКЕ)

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