
Модуль ядра Linux, который предоставляет root-привилегии, скрывает процессы/файлы и защищает себя от выгрузки, предназначен для образовательных целей на ядрах Ubuntu.
Простой руткит для ядра Linux, написанный ради интереса, а не для зла.
Руткит умеет следующее:
Руткит был протестирован на ядрах Linux 2.6.32-38 и 4.4.0-22, поставляемых Ubuntu в Ubuntu 10.04.4 LTS и Ubuntu 16.04 LTS соответственно, но его должно быть очень легко портировать на промежуточные ядра, а также на более новые.
В рутките есть некоторый архитектурно-зависимый код, реализованный только для архитектур x86 и x86-64. Это код для поиска таблицы системных вызовов, отключения защиты памяти от записи и одного из двух методов перехвата функций. Его должно быть очень легко портировать на новую архитектуру, и часть этого кода не является строго необходимой для работы руткита, например, непереносимый метод перехвата можно просто удалить, хотя вы должны быть очень скучным человеком, если готовы отказаться от удовольствия перехвата функций, который перезаписывает машинный код целевой функции ядра таким образом, чтобы вместо неё вызывалась наша функция-перехватчик.
Руткит тестировался только с 1 ядром CPU, поэтому он может работать или не работать корректно на многоядерной системе. Скорее всего, он будет плохо работать на многоядерной системе, поскольку руткит написан в расчёте на то, что в любой момент времени выполняется только один поток, поэтому в нём отсутствуют атомарные записи/чтения и мьютексы вокруг структур данных списков.
Разогрейте вашу виртуальную машину по выбору.
Скачайте и установите нужный образ Ubuntu:
Для Ubuntu 10.04 пропатчите адрес репозитория пакетов:
sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
Установите компилятор, заголовочные файлы Linux и всё остальное, необходимое для сборки руткита:
apt-get update
apt-get install build-essential
Убедитесь, что не вызываете apt-get upgrade, так как это обновило бы ядро, тогда как руткит тестировался только на предустановленной версии ядра.
make
Загрузка руткита:
insmod rootkit.ko
Использование руткита:
$ ./client --help
Usage: ./client [OPTION]...
Options:
--root-shell Grants you root shell access.
--hide-pid=PID Hides the specified PID.
--unhide-pid=PID Unhides the specified PID.
--hide-file=FILENAME Hides the specified FILENAME globally.
Must be a filename without any path.
--unhide-file=FILENAME Unhides the specified FILENAME.
--hide Hides the rootkit LKM.
--unhide Unhides the rootkit LKM.
--help Print this help message.
--protect Protects the rootkit from rmmod.
--unprotect Disables the rmmod protection.
Выгрузка руткита:
./client --unhide
./client --unprotect
rmmod rootkit.ko
Вовсе нет, в интернете полно статей о том, как написать Linux-руткит, с полным исходным кодом, не говоря уже о бесчисленных репозиториях на GitHub.
При написании этого руткита использовались следующие материалы:
Этот проект распространяется под лицензией GPLv2.
| Ядро / архитектура | x86 | x86-64 |
|---|
| 2.6.32 | Ubuntu 10.04.4 i386 (694M) [torrent] [iso] | Ubuntu 10.04.4 amd64 (681M) [torrent] [iso] |
| 4.4.0 | Ubuntu 16.04 i386 (647M) [torrent] [iso] | Ubuntu 16.04 amd64 (655M) [torrent] [iso] |