До основного вмісту

Виявлення руткітів на Linux: rkhunter і chkrootkit

Безпека · 19.04.2026 · 4 хв читання
Ілюстрація до статті «Виявлення руткітів на Linux: rkhunter і chkrootkit»

Руткіти — це шкідливі програми, які приховують свою присутність у системі на рівні ядра або файлової системи. Регулярне сканування за допомогою rkhunter та chkrootkit дозволяє виявити компрометацію сервера.

Встановлення і налаштування rkhunter

apt install rkhunter -y

# Оновити базу даних хешів
rkhunter --update
rkhunter --propupd  # Зберегти поточні властивості файлів як еталон

# Запустити повне сканування
rkhunter --check --sk --rwo  # --sk = пропустити натискання клавіш, --rwo = лише попередження

Важливі налаштування /etc/rkhunter.conf

MAIL-ON-WARNING=admin@example.com
MAIL_CMD=mail -s "[rkhunter] Warning on $(hostname)"
CRON_DAILY_RUN=yes

# Виключити хибні спрацьовування
SCRIPTWHITELIST=/usr/sbin/adduser
ALLOWHIDDENFILE=/etc/.gitconfig
PKGMGR=DPKG  # Використовувати dpkg для перевірки пакетів

Встановлення і використання chkrootkit

apt install chkrootkit -y
chkrootkit
# Вивід: INFECTED означає потенційну загрозу
# Вивід: not infected — чисто

Автоматичне сканування за розкладом

# /etc/cron.daily/rkhunter-check
#!/bin/bash
/usr/bin/rkhunter --cronjob --update --quiet 2>&1 |   mail -s "rkhunter Daily Report - $(hostname)" admin@example.com

chmod +x /etc/cron.daily/rkhunter-check

Що робити при виявленні загрози

  1. Ізолювати сервер — відключити від мережі (не вимикати!)
  2. Зробити образ диска для forensics-аналізу
  3. Перевірити запущені процеси: ps aux, netstat -tulnp
  4. Перевірити cron і автозапуск: crontab -l, systemctl list-units
  5. Відновити з чистого бекапу на новий сервер
Найкраща практика: Запускайте rkhunter --propupd одразу після встановлення чистої системи і після кожного оновлення пакетів. Це створює актуальний еталон для порівняння під час наступного сканування.
Хибні спрацьовування rkhunter — часте явище. Кожне попередження потрібно досліджувати, перш ніж робити висновки про компрометацію. Почніть із перевірки через dpkg -V пакет.

Розбір типових попереджень сканерів

  • Warning: The command '/usr/bin/which' has been replaced by a script: /usr/bin/which — класичне хибне спрацювання на Debian та Ubuntu, де /usr/bin/which — звичайний shell-скрипт, а не бінарник. rkhunter очікує бінарний файл і плутає штатну особливість дистрибутива з підміною зловмисником.
  • Warning: The SSH configuration option 'PermitRootLogin' has been set to 'yes' — це попередження про саме налаштування sshd, а не про зараження. Виправляється правкою /etc/ssh/sshd_config, а не пошуком руткіта на диску.
  • Warning: The file properties have changed for: /usr/sbin/adduser із зазначенням поточного та збереженого хешу — повідомляє, що файл змінився після останнього rkhunter --propupd. Саме по собі це не означає компрометацію, якщо зміна прийшла від планового оновлення пакета через apt.
  • The following suspicious files and directories were found: — заголовок розділу у виводі chkrootkit, під яким перелічуються конкретні знахідки. Порожній список одразу під цим заголовком — і є очікуваним чистим результатом.
  • Підсумкова зведення System checks summary наприкінці виводу rkhunter показує кількість попереджень і шлях до докладного журналу /var/log/rkhunter.log — туди варто дивитися за будь-якого Warning, а не гадати за уривками консольного виводу.

rkhunter і chkrootkit: у чому різниця

Критерійrkhunterchkrootkit
Перевірка контрольних сум файлівТак, через базу --propupdНі
Перевірка конфігурації sshd і sudoТакНі
Пошук відомих руткітів за сигнатурамиТак, оновлювана базаТак, окремий вбудований список
Автоматизація за розкладомГотовий скрипт у /etc/cron.dailyПотрібно налаштовувати вручну
Активність підтримки проєктуОновлюється регулярноОновлюється помітно рідше
Зручно використовувати разомОсновний інструментДодаткова звірка іншим рушієм сигнатур

Коли сканери руткітів не захищають

  • Як єдиний метод захисту — і rkhunter, і chkrootkit шукають уже відомі сигнатури та типові сліди; таргетований руткіт, написаний під конкретну ціль, може пройти повз обидва сканери непоміченим.
  • Перевірка вже скомпрометованої системи її ж власними утилітами — якщо зловмисник отримав root, він міг підмінити самі бінарники rkhunter чи chkrootkit або бібліотеки, які вони використовують, і тоді сканер чесно відзвітує «чисто», хоча це вже неправда. Для реального розслідування потрібен образ диска й аналіз із зовнішнього носія.
  • Контейнери та immutable-інфраструктура, де сервер перестворюється з образу під час кожного деплою — ручне сканування на руткіти всередині контейнера втрачає сенс; там наголос роблять на незмінності образу і перевірці цілісності до запуску, а не після.
  • Продакшен із жорстким SLA щодо навантаження в момент повного сканування — --check обходить усю файлову систему і може дати помітне дискове навантаження; такі перевірки планують на вікно низького навантаження, а не запускають вручну в пік трафіку.

Перевірка, що сканування реально налаштоване

# Переконатися, що база властивостей файлів існує і не порожня
ls -la /var/lib/rkhunter/db/rkhunter.dat

# Перевірити дату останнього оновлення сигнатур
rkhunter --versioncheck

# Прогнати разову перевірку і одразу подивитися підсумкову зведення
rkhunter --check --sk --rwo | tail -20

# Переконатися, що завдання на щоденний автоматичний прогін справді існує
ls -la /etc/cron.daily/rkhunter-check

Чистий результат — це нуль попереджень у зведенні System checks summary, файл бази з нещодавньою датою зміни та виконуваний файл у cron.daily з правами rwxr-xr-x. Якщо cron-файлу немає або в нього немає біта на виконання — щоденні перевірки просто не запускаються, незалежно від того, що показав ручний прогін.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці