Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #94, ОКТЯБРЬ 2006 г.

Hack-Faq

Скляров Иван

Хакер, номер #094, стр. 094-060-2


Non-authoritative answer:

Name: www.xakep.ru

Address: 194.67.128.2

Этот вывод означает, что был опрошен DNS-сервер ns.urtc.ru (его IP-адрес 195.38.32.2) и получен ответ IP (www.xakep.ru) = 194.67.128.2.

Эта же утилита позволяет произвести обратное преобразование:

> nslookup 194.67.128.2

Server: ns.urtc.ru

Address: 195.38.32.2

Name: game-land.rmt.ru

Address: 194.67.128.2

Как видишь, в реальности за IP-адресом 194.67.128.2 закреплено имя game-land.rmt.ru, следовательно, www.xakep.ru является виртуальным узлом.

Q: Пишу руткит под Linux для ядер версии 2.6.x и столкнулся с такой бедой: в этих ядрах не экспортируется таблица системных вызовов sys_call_table. Как быть?

A: Да, к сожалению, такая проблема есть. Разработчики ядер в целях безопасности сделали запрет на экспорт sys_call_table, начиная с ядер версии 2.5.41, поэтому простая подмена системных вызовов в этих ядрах не работает. Но хакерами были найдены способы обхода этого запрета. Я знаю три способа, как получить адрес sys_call_table:

1. Первый способ описан в электронном журнале Phrack#58 в статье «Linux on-the-fly kernel patching without LKM», но он зависит от текущей платформы и алгоритмически сложен.

2. Адрес таблицы можно найти простым поиском в файле /boot/System.map, например:

# grep sys_call_table /boot/System.map

c03ce760 D sys_call_table

Теперь в модуле можно сделать присваивания следующего вида:

unsigned long *sys_call_table;

*(long *)&sys_call_table=0xc03ce760;

и далее осуществлять подмену обычным образом, как в ядрах версии 2.4.x. В своем модуле ты можешь встроить функцию, которая открывала бы файл /boot/System.map и самостоятельно находила в нем адрес sys_call_table.

3. Третий способ придумал и описал (с исходным кодом) в своей статье российский хакер dev0id из UkR Security Team. Ищи эту статью на www.ustsecurity.info.

Вдобавок к перечисленному я тебе советую купить мою книгу «Программирование боевого софта под Linux» (автор - Иван Скляров), где эти способы описаны более подробно, а также реализован и разобран учебный руткит и кейлоггер под ядра 2.6.x.

Q: Как откомпилировать модуль ядра Linux версии 2.6.x?

A: Компиляция модулей для ядер 2.6.x существенно отличается от компиляции модулей в ядрах 2.4.x. Сначала необходимо создать Makefile со следующим содержимым (в качестве примера возьмем модуль с названием mod.c):

obj-m += mod.o

Затем нужно выполнить команду для сборки модуля следующего вида:

# make –C /usr/src/linux-`uname –r` SUBDIRS=$PWD modules

В том случае, если у тебя в каталоге /usr/src присутствует символическая ссылка linux на каталог с исходными текстами ядра, то команда сборки будет выглядеть так:

# make –C /usr/src/linux SUBDIRS=$PWD modules

Как ты понимаешь, исходные тексты ядра должны быть установлены в твоей системе в каталог /usr/src. Если у тебя исходные коды ядра отсутствуют, то их нужно установить, иначе сборка модуля закончится с ошибкой. Устанавливать пакеты удобно через KDE или Gnome (ищи в меню функцию вроде «Установка программ»). Нужный пакет с исходными кодами ядра обычно имеет название вида kernel-source-номер_версии.

Назад на стр. 094-060-1  Содержание  Вперед на стр. 094-060-3