Руткит Linux, который прятался на виду: как я его наконец обнаружил
Это перевод оригинальной статьи The Linux Rootkit That Hid in Plain Sight: How I Finally Detected It
Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.
Вступление:
Я думал, что у меня надёжная система. Нет открытых портов, включён auditd, fail2ban следит за SSH. Но что-то было не так — мой сервер Ubuntu иногда тормозил, даже когда не работал под нагрузкой. Я обнаружил не просто ошибку в настройках — это был руткит, скрывающийся на виду. Вот как я его обнаружил, удалил и окончательно укрепил свою систему.
1. Первый тревожный сигнал: необъяснимые скачки производительности CPU
Я заметил постоянные скачки производительности процессора в top, часто исходящие от процессов kworker или, казалось бы, безобидных системных процессов.
✅ Урок: Руткиты часто маскируются под задачи ядра или заменяют обычные двоичные файлы.
2. chkrootkit и rkhunter не особо помогли
sudo apt install chkrootkit rkhunter sudo chkrootkit sudo rkhunter --check
✅ Почему? Продвинутые руткиты изменяют двоичные файлы в /bin, /sbin и даже вмешиваются в работу таких инструментов, как ps, netstat и ls.
3. Что в итоге помогло: Live CD и сравнение файлов
Я перезагрузился в образ Live Ubuntu ISO и смонтировал свой диск:
sudo mount /dev/sda1 /mnt sudo diff -qr /mnt/bin /bin
Это помогло мне обнаружить такие двоичные файлы, как /bin/ps и /usr/bin/netstat, хэши или размеры которых отличались от ожидаемых.
✅ Исправление: Замените подозрительные двоичные файлы с помощью:
sudo apt reinstall coreutils net-tools procps
4. Руткит использовал скрытую запись в Cron
Даже после очистки скрытая задача cron повторно устанавливала вредоносное ПО:
sudo grep -r '' /etc/cron* sudo ls -la /var/spool/cron/crontabs
Нашел запутанную cron-задачу для root, загружающую скрипт в /tmp/.X11-unix/.
✅ Исправление: Удалил задачу, заблокировал cron и отключил неиспользуемые функции cron:
sudo chmod -R 700 /etc/cron.* sudo systemctl disable cron
5. Укрепили защиту после инцидента
✅ Принудительное использование SELinux (для Red Hat) или AppArmor (для Ubuntu)
✅ Служба auditd перенастроена для отслеживания выполнения скриптов
✅ SSH теперь использует только ключи (без паролей)
✅ /tmp и /var/tmpсмонтировано с noexec
✅ Регулярные сканирования AIDE, запланированные через cron
Вывод:
Руткиты сегодня уже не те, что раньше — они способны манипулировать даже надёжными инструментами. Мой вывод: не доверяйте тому, что говорит ваша система. Загрузитесь с внешнего устройства, сравните файлы и никогда не думайте, что защищённая система будет в безопасности навсегда.
На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.