December 1

Руткит 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, где будет еще больше полезной информации.