В прошлой статье мы обсудили технические особенности руткитов. Мы также рассмотрели вопросы о том, почему руткиты опасны, какой ущерб они могут принести и кратко осветили вопрос о некоторых путях их обнаружения. В этой статье продолжается рассмотрение затронутой темы в плоскости проверенных методов для обнаружения руткитов на серверах - для этой цели предназначается мощная свободная утилита под названием "chkrootkit". Мы рассмотрим процесс ее установки и использования, а также пути ее интеграции в повседневные процессы по администрированию, проводимые для повышения безопасности функционирования серверов в датацентрах.
В течение нескольких лет дистрибутивы Linux приобрели статус стабильнейших платформ для осуществления обработки данных в составе IT-инфраструктуры для особо важных операций. Этот рост популярности привлек внимание взломщиков к поиску возможностей эксплуатации уязвимостей систем Linux; наиболее опасными являются руткиты, менее опасными - вирусы и трояны. Мы обсудили основы функционирования руткитов в предыдущей статье - обратитесь к ней для лучшего понимания.
О chkrootkit
По своей сути chkrootkit является набором инструментов для обнаружения присутствия руткитов в системе, а также большим подарком для администраторов систем Linux по двум следующим причинам:
Это свободная утилита с открытым исходным кодом, доступная во множестве дистрибутивов.
Она способна обнаруживать практически все существующие современные руткиты, а так как ее исходный код открыт, сообщество разработчиков поддерживает ее в актуальном состоянии.
Со временем система сканирования Chkrotkit усовершенствовалась, в результате чего повышалась скорость ее работы, что особенно полезно при осуществлении тщательных проверок ядра на наличие известных руткитов.
При разговоре об особо полезных возможностях утилиты следует упомянуть о том, что она способна обнаруживать более 60 устаревших и современных руткитов, может определять сетевые интерфейсы в promiscous-режиме, способна эффективно обнаруживать измененные файлы lastlog и wtmp (которые в свою очередь сообщают администраторам о вторжениях в систему), имеет интерфейс командной строки с простым синтаксисом и понятными параметрами и выводит подробные результаты сканирования системы, что позволяет администраторам автоматизировать процесс.
Chkrootkit использует язык C и сценарии командной оболочки для выполнения тщательных проверок процессов и исследования системных бинарных файлов с целью определения сигнатур руткитов. Во время сканирования в большинстве случаев также возможно удаление обнаруженных руткитов. Утилита также содержит ряд встроенных алгоритмов для определения вероятного наличия руткитов, даже в том случае, если они официально не поддерживаются. В таблице ниже приводится список внутренних программ chkrootkit и назначение каждой из них.
Программа
Назначение
chkrootkit
Главный сценарий для поиска измененных системных файлов
strings.c
Обнаруживает и производит замены строк
ifpromisc.c
Производит проверку интерфейсов на работу в promiscous-режиме
chklastlog.c, chkwtmp.c
Проверяет, не удалены ли данные из файлов lastlog и wtmp
chkproc.c, chkdirs.c
Производит поиск троянов в форме модулей ядра Linux
Установка
Установка утилиты в большинстве дистрибутивов представляет простой и понятный процесс. Вы можете скачать самую новую версию архива с исходными кодами и распаковать во временную директорию. Рекомендуется провести проверку хэша MD5 скачанного архива, после чего распаковать его с использованием следующей команды: tar -xfvz chkrotkit.tar.gz. Перейдите в директорию с распакованными исходными кодами и начните компиляцию при помощи команды make sense.
На самом деле, установка в дистрибутивах Debian/Ubuntu намного проще описанной выше, достаточно просто выполнить команду sudo apt-get install chkrootkit.
Использование
Сразу после установки утилиты chkrootkit в качестве первого шага рекомендуется запустить программу ifpromisc. Она проверит, не работают ли сетевые интерфейсы в promiscous-режиме, чего не должно быть в любом случае за исключением того, когда система была инфицирована руткитом до установки chkrootkit.
Как только эта проверка будет завершена, в качестве следующего шага производится запуск утилиты chkrootkit без параметров командной строки. На Рисунке 1 показан типичный вывод при сканировании операционной системы Ubuntu в поисках аномалий и руткитов.
Рисунок 1. Сканирование в поисках руткитов
На Рисунке 2 показан ход проверки всех процессов ядра и системных файлов при помощи chkrootkit на основе внутреннего списка проверок.
Рисунок 2. Проверка всех процессов ядра и системных файлов
Если любая из стандартных утилит операционной системы (такая, как fingerd на Рисунке 2) не найдена, выводится соответствующая информация для того, чтобы сценарии для администрирования имели возможность провести проверку того, какие из системных файлов были удалены.
Хотя использование chkrootkit без параметров командной строки обычно достаточно эффективно, администраторам может быть необходима большая гибкость для использования утилиты в сценариях оболочки. Следующая таблица описывает некоторые параметры командной строки с примерами их использования.
Параметр
Описание
Пример
-l
Вывод всех поддерживаемых типов проверок
>chkrootkit -l
[тип проверки]
Выполнение заданного типа проверки
Проверка наличия в системе интерфейсов в promiscous-режиме и трояна "ps": >chkrootkit ps sniffer
-x
Режим эксперта (вывод каждого действия, проводимого в отношении каждого исследуемого файла)
> chkrotkit -x | more
-q
Режим минимального вывода. Выводятся только сообщения о найденных инфицированных файлах
> chkrotkit -q
-r
Использование заданной директории в качестве корневой. Полезно в случае проверки подозрительной системы со стороны системы без руткитов. Также полезно при проверке смонтированных томов.
Проверить том, смонтированный, например, в точку "/mnt1": > chkrootkit -r /mnt
Также важно понимать то, каким образом chkrootkit осуществляет вывод информации. Обычно выводятся такие фразы, как "Not found" ("Не найдено") и "Not infected" ("Не инфицировано"). Когда обнаружен руткит или есть подозрения о его наличии, выводятся предупредительные сообщения "INFECTED" ("ИНФИЦИРОВАНО") или "The following suspicious files or directories have been found." ("Найдены следующие подозрительные файлы или директории."). Рассмотрите Рисунок 3, на котором показано сообщение о подозрительном сценарии на языке Python.
Рисунок 3. Сообщение об инфицированном файле
Этот вывод может быть сохранен в текстовый файл или обработан утилитой grep для удаления незначительной информации и вывода только важных сообщений. Использование параметра командной строки -q также возможно, но в этом случае могут быть отброшены сообщения о подозрительных объектах, что является не самой лучшей идеей.
Что делать если руткит обнаружен?
Chkrootkit может обнаруживать руткиты, но не может удалять многие из них. После обнаружения руткита в системе в первую очередь следует разорвать сетевое соединение для того, чтобы не позволить ему распространиться по сети. Для полного удаления руткита следует сделать резервную копию важных данных и переустановить систему - это, однако, не всегда представляется возможным. Другим вариантом является тщательное изучение обнаруженного руткита и проведение действий по его полному удалению из системы на основе данных о пути его проникновения в систему и функционирования.
Многие руткиты могут быть удалены вручную; тем не менее, существует несколько руткитов, которые могут быть удалены только в ходе полной переустановки системы. Для повышения точности обнаружения рекомендуется использовать chkrootkit только на заведомо неинфицирванных системах для исследования всех остальных серверов фермы.
Интеграция утилиты chkrootkit в комплекс административных задач
Системным администраторам настоятельно рекомендуется использовать chkrootkit в рамках их повседневных административных задач. При помощи соответствующих параметров командной строки становится возможным использование утилиты в сценарии оболочки с выводом в файл для последующего поиска аномалий.
Этот сценарий может быть запланирован (при помощи задачи cron) для ежедневного выполнения. Со временем этот сценарий может быть усовершенствован для удаления ошибочных предупреждений о подозрительных файлах и вывода только сообщений о найденных руткитах. Другая задача cron может выполняться чаще и проводить поиск сетевых интерфейсов, работающих в promiscous-режиме. Это необходимо, так как обычно атака с применением руткитов начинается с вмешательства в настройки сети.
После этого в сценарий могут быть добавлены функции для составления списка серверов в составе фермы требующих проверки, обработки вывода в процессе их проверки и уведомления администратора о результате.
Заключение
Руткиты являются серьезной угрозой современным датацентрам. IT-менеджменту необходимо знать о методах их обнаружения и применять эти методы на практике. chkrootkit является быстрым и эффективным инструментом как раз для этой цели. Параметры командной строки этой утилиты помогают автоматизировать ее запуски на постоянной основе, что может быть крайне полезно для администраторов.