Установка, настройка и использование сканера уязвимостей chkrootkit

  • Tutorial
В предыдущей моей публикации про сканер уязвимостей rkhunter в комментариях хабрапользователем Indexator был упомянут сканер chrootkit. При схожем функционале c rkhunter, есть ряд отличий, который будет интересно рассмотреть в этой статье. Интересно также то, что совсем недавно была выпущена новая версия сканера, разработка которого казалась замороженной c 2009 года.



Chkrootkit — это сокращение от словосочетания «check rootkit» (поиск руткитов). В свою очередь руткитами называются вредоносные приложения, разработанные для скрытого проникновения на сервер и маскировки под обычные процессы или программы, с целью получения полного доступа на сервер.

Шелл-скрипт chkrootkit разработан в помощь системным администраторам для проверки системы на наличие известных руткитов. Первый же вопрос, который может возникнуть при этой информации: А почему шелл? Почему не perl или bash, как тот же rkunter? Разработчики стремились максимально унифицировать скрипт, чтобы он запускался на всех системах с шеллом. А во времена начала разработки скрипта, тот же perl был далеко не везде.

Суть поиска проста. С помощью системных инструментов типа strings и grep (если быть более точным, то в FAQ на сайте разработчика указан список используемых программ — awk, cut, echo, egrep, find, head, id, ls, netstat, ps, strings, sed, uname) chkrootkit ищет подозрительные участки кода в программах, сравнивает запущенные процессы с информацией из /proc, выявляя расхождения.

Инструмент состоит из некоторого количества модулей, отвечающие за разные методы проверки
  • chkrootkit: шелл-скрипт, проверяющий системные бинарные файлы на модификацию руткитами.
  • ifpromisc.c: модуль поиска интерфейсов, работающих на перехват пакетов.
  • chklastlog.c: модуль, проверяющий на наличие фактов удаления записей из лог-файла lastlog.
  • chkwtmp.c: аналогично предыдущему модулю, проверяет лог-файл wtmp.
  • chkutmp.c: проверяет лог-файл utmp на наличие следов удаления записей.
  • check_wtmpx.c: актуально для ОС Solaris. проверяет факт удаления записей из лога wtmpx.
  • chkproc.c: поиск следов известных LKM-троянов (Linux Kernel Module).
  • chkdirs.c: поиск следов известных LKM-троянов (Linux Kernel Module).
  • strings.c: аналог утилиты strings.

Увы, поиск фактов удаления строк из лог-файлов не гарантирован на все 100%.

На текущий момент последней версией является 0.50 от 4 июня 2014 г. Разработчики обещают работу сканера под FreeBSD начиная с 2.0 и прочих из семейства *BSD, различными дистрибутивами Linux с ядрами от 2.2 и выше, MacOS X, Solaris и другими более экзотичными операционными системами.

В CentOS присутствует версия 0.49 в репозитариях EPEL, в портах/пакетах FreeBSD отсутствует. Для сборки последней версии потребуется установить gcc. На примере CentOS 6.x это будет выглядеть следующим образом:

Установим gcc:

yum install gcc

Скачиваем последнюю на текущий момент версию с официального ftp:

wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz

Распаковываем:

tar -xzf chkrootkit.tar.gz

Переходим в директорию:

cd chkrootkit-0.50

Собираем модули:

make sense

Запускаем шелл-скрипт:


./chkrootkit


Проверил так же на FreeBSD 10.1 — сборка модулей и проверка прошла без проблем.

В принципе, можно не собирать модули, и тогда на проверках, где требуются дополнительные модули, будут ошибки типа:


Checking `ldsopreload'... can't exec ./strings-static, not tested
Checking `lkm'... not tested: can't exec
Checking `sniffer'... not tested: can't exec ./ifpromisc
Checking `wted'... not tested: can't exec ./chkwtmp
Checking `z2'... not tested: can't exec ./chklastlog
Checking `chkutmp'... not tested: can't exec ./chkutmp

По умолчанию происходит полная проверка системы по всем доступным тестам, список которых можно получить, выполнив скрипт с ключом ‘-l’. К сожалению, мне не удалось найти в документации описание всех тестов, которые могут быть запущены, но это можно обсудить в комментариях.
Обратите внимание, что chrootkit не делает снимок текущих файлов и не сохраняет в своей базе, как тот же rkunter.
В качестве ключей запуска можно указывать какие из тестов запускать
К примеру,
./chkrootkit aliens sniffer

произведет поиск вредоносного кода и запущенных перехватчиков трафика

Сообщения, которые могут быть выданы при сканировании
  • not infected — проверка не обнаружила ничего подозрительного
  • INFECTED — программа с большой вероятностью относится к руткиту
  • not tested — проверка не была произведена (для этой ОС отсутствует возможность проверки, отсутствие модуля проверки, заданы параметры командной строки, отключающие эту проверку)
  • not found — программа не найдена и поэтому не проверялась
  • Vulnerable but disabled — вероятность того, что приложение является вредоносным велика, но в момент проверки оно было неактивным.

Для регулярной проверки системы, можно добавить выполнение сканирования chkrootkit в планировщик под пользователем root.

crontab -e

@daily /путь/до/chkrootkit | mail -s 'CHROOTKIT Daily Run' почтовый@ящик

Для ежедневного полного сканирования системы всеми доступными модулями и тестами с последующей отправкой отчета на почтовый ящик.

В ISPmanager5 это можно настроить из удобного интерфейса планировщика, который находится в разделе «Система»



Но в силу большой вероятности того, что инфицированная ОС может подменять значения при сканировании, рекомендуется запускать chkrootkit для проверки системы при загрузке сервера в режиме восстановления или с загрузочного live-образа.
В этом случае порядок действий таков:
  • загрузиться с live-образа
  • скачать последнюю версию chkrootkit
  • скомпилировать модули
  • подмонтировать разделы диска с (потенциально) инфицированной системой
  • провести сканирование chkrootkit -r /mnt/


Официальный сайт проекта: http://www.chkrootkit.org/

PS: Желаю, чтобы на ваших системах всегда chkrootkit выдавал сообщения «nothing found» или «not infected».
FirstVDS / FirstDEDIC
99.11
Company
Share post

Comments 0

Only users with full accounts can post comments. Log in, please.