ИБ (Информационная Безопасность)
October 13

Обнаружение руткитов в Linux с помощью chkrootkit

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

Руткит (rootkit) - это вредоносное программное обеспечение, которое скрытно устанавливается в операционной системе и зачастую маскируется под системное ПО. Обычно используется для неограниченного удаленного доступа к зараженной системе.

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

  • Анализ открытых портов, которые пользователь самостоятельно не открывал и о которых ему изначально не было известно;
  • Выявление следов удаления записей из лог-файлов;
  • Поиск процессов, которые скрываются в таких программах, как top и ps, проверка соответствия с /proc;
  • Поиск файлов и скриптов, с дальнейшей проверкой на соответствие с известными сигнатурами зловредных программ;
  • Выявление интерфейсов в безразличном режиме.

Chkrootrkit состоит из нескольких модулей, которые занимаются обнаружением угроз:

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

Установка

Установка в Arch Linux:
sudo pacman -S chkrootkit

В Debian (на примере KALI Linux):
sudo apt install chkrootkit

Использование

Справка:

chkrootkit -h

Использование: /usr/bin/chkrootkit [опции] [test ...]
Опции:
        -h                отобразить данную справку и выйти
        -V                отобразить версию и выйти
        -l                отобразить доступные тесты и выйти
        -d                отладка
        -q                молчаливый режим
        -x                экспертный режим
        -r dir            ииспользовать указанную директорию в качестве корневой
        -p dir1:dir2:dirN путь для внешних команд, используемых chkrootkit
        -n                пропускать точки монтирования NFS
        -T fstype         пропустить точки монтирования указанного типа файловой системы

Далее я буду демонстрировать работу chkrootkit в KALI Linux.
Chkrootkit можно использовать как для полноценного сканирования, так и для выполнения сканирования по отдельным, инересующим компонентам системы. Для начала предлагаю рассмотреть полноценное сканирование. Чтобы его сделать, нужно просто запустить chkrootkit:
sudo chkrootkit

Чтобы проверить систему полностью, обязательно требуется запускать chkrootkit от имени суперпользователя, в противном случае вы столкнетесь с ошибками доступа:

Что обозначает вывод информации:

  • not found и not infected означают, что chkrootkit не обнаружил угроз;
  • not tested:
    • тест не выполнен по одной из указанных причин;
    • неприменимость проверки для данной ОС;
    • отсутствие возможности использования внешней программы;
    • заданы опции командной строки, отключающие эту проверку.
  • Vulnerable but disabled - программа заражена, но в данный момент не запущена;
  • INFECTED - обнаружена угроза, содержащая враждебный код;
  • WARNING - предупреждение (обычно оно дополняется объяснением);
  • Permission denied - отказано в доступе из за отсутствия прав.

По окончанию работы программы, с каждым выданным предупреждением пользователь должен разбираться сам, внимательно изучив проблему. Иногда выданные предупреждения могут являться ошибками или ложными срабатываниями. Очень важно убедиться, что выданное предупреждение действительно является ложным, а не указывает на реальную угрозу.

Чтобы посмотреть список всех доступных тестов, используйте -l:
chkrootkit -l

aliens asp bindshell lkm rexedcs sniffer w55808 wted scalper slapper z2 chkutmp OSX_RSPLUG amd basename biff chfn chsh cron crontab date du dirname echo egrep env find fingerd gpm grep hdparm su ifconfig inetd inetdconf identd init killall ldsopreload login ls lsof mail mingetty netstat named passwd pidof pop2 pop3 ps pstree rpcinfo rlogind rshd slogin sendmail sshd syslogd tar tcpd tcpdump top telnetd timed traceroute vdir w write

Чтобы запустить какие-то конкретные тесты, просто перечислите их в команде. Например:
sudo chkrootkit aliens asp lkm

Если вы хотите, чтобы вывод работы программы содержал в себе только информацию о найденных проблемах, то можно запустить программу в "молчаливом режиме":
sudo chkrootkit -q

Как уже ранее было отмечено, chkrootkit использует следующие программы для выполнения тестов:
awk, cut, echo, egrep, find, head, id, ls, netstat, ps, strings, sed и uname.

Однако, если у вас возникают подозрения, что данные программы были подменены вредоносным ПО, то можно вручную указать путь к каталогам, которые содержат нужные программы:
sudo chkrootkit -p dir1:dir2:dirN

Хотя, лично я не рекомендую данный способ. Наилучшим вариантом на мой взгляд является следующий сценарий:

  1. Загружаемся с Live-USB (например с KALI Linux live);
  2. Скачиваем chkrootkit;
  3. Монтируем диск с системой, которую нужно проверить на наличие руткитов;
  4. Проверяем систему, указывая путь к корневому каталогу:
    sudo chkrootkit -r /mnt/target_os

Когда необходимо выполнить более детальный анализ найденных угроз, можно запустить chkrootkit в режиме эксперта. В этом режиме будет происходить вывод множества промежуточной информации, которую в дальнейшем можно использовать для анализа:
sudo chkrootkit -x

Регулярная проверка системы

С помощью cron можно регулярно проверять систему на наличие руткитов. Например, вот так в Arch Linux с помощью fcron можно реализовать регулярную проверку ежедневно каждые 2 часа:

  1. Устанавливаем fcron:
    sudo pacman -S fcron
  2. Добавляем задачу от пользователя root
    sudo fcrontab -e
    0 */2 * * * chkrootkit > /home/freemore/chkrootkit_result
  3. Включаем службу:
    sudo systemctl enable fcron.service --now

Теперь каждые 2 часа chkrootkit будет выполнять проверку и записывать результаты в файл chkrootkit_result.


Мой Telegram

Мой GitHub

Поддержать автора донатом