Кратко, rootkit — это набор программ призванный спрятать некую негативную деятельность или присутствие взломщика в системе.
Таким образом, в случае, если на сервере происходит некая посторонняя деятельность (рассылка спама, на сайтах появляются файлы, которые вы не создавали, повышенная нагрузка, которую не понятно что создает), особенно после того, как сервер взламывали тем или иным способом, то стоит попробовать поискать код. Это можно сделать с помощью антивируса или специального ПО для обнаружения руткитов. Наверное, самой известной программой для поиска руткитов является rkhunter.
Установка rkhunter
Будем устанавливать rkhunter 1.4.0 под Debian 7.
В общем-то, установка не должна составить трудностей, так как оказалось, что rkhunter версии 1.4.0-1 есть в официальных репозиториях Debain 7. Устанавливаем:
Либо можно установить вручную скачав архив с официального сайта:
Вывод последней команды:
Checking system for:
Rootkit Hunter installer files: found
A web file download command: wget found
Starting installation:
Checking installation directory «/usr/local»: it exists and is writable.
Checking installation directories:
Directory /usr/local/share/doc/rkhunter-1.4.0: creating: OK
Directory /usr/local/share/man/man8: creating: OK
Directory /etc: exists and is writable.
Directory /usr/local/bin: exists and is writable.
Directory /usr/local/lib: exists and is writable.
Directory /var/lib: exists and is writable.
Directory /usr/local/lib/rkhunter/scripts: creating: OK
Directory /var/lib/rkhunter/db: creating: OK
Directory /var/lib/rkhunter/tmp: creating: OK
Directory /var/lib/rkhunter/db/i18n: creating: OK
Installing check_modules.pl: OK
Installing filehashsha.pl: OK
Installing stat.pl: OK
Installing readlink.sh: OK
Installing backdoorports.dat: OK
Installing mirrors.dat: OK
Installing programs_bad.dat: OK
Installing suspscan.dat: OK
Installing rkhunter.8: OK
Installing ACKNOWLEDGMENTS: OK
Installing CHANGELOG: OK
Installing FAQ: OK
Installing LICENSE: OK
Installing README: OK
Installing language support files: OK
Installing rkhunter: OK
Installing rkhunter.conf: OK
Installation complete
Прочие параметры инсталлятора rkhunter вы можете узнать воспользовавшись командой:
Каким способом установки пользоваться — решать вам. Первый способ проще, второй потенциально позволяет установить более свежую версию.
Также стоит установить программу unhide, которая позволяет искать скрытые процессы и порты:
Настройка rkhunter
Будем считать, что использовали способ установки из репозитория.
Конфигурационные файлы:
/etc/default/rkhunter — можно настроить периодические задачи (обновление, проверка, отчеты),
/etc/rkhunter.conf — основной конфигурационный файл
Справочная информация может быть найдена в директории /usr/share/doc/rkhunter и с помощью команды man rkhunter. Кое-какие скрипты есть в директории /usr/share/rkhunter.
Параметры, которые можно задать в /etc/default/rkhunter (параметры могут принимать значения true или false):
CRON_DAILY_RUN="« — по умолчанию значение true. Позволяет ежесуточно запускать проверку.
CRON_DB_UPDATE=»" — по умолчанию значение true. Позволяет включить еженедельные обновления баз.
DB_UPDATE_EMAIL="false" — отправлять ли отчеты об еженедельном обновлении баз. По умолчанию — false.
REPORT_EMAIL="root" — адрес электронной почты, куда отправлять отчеты. По умолчанию — root.
APT_AUTOGEN="false« — позволяет включить автоматическое обновление баз.
NICE=»0" — позволяет управлять приоритетом процесса.
RUN_CHECK_ON_BATTERY="false" — следует ли проводить автоматические проверки в случае работы компьютера от батареи.
В /etc/rkhunter.conf можно поправить следующие настройки:
PKGMGR=DPKG — судя по документации, в Debian данный параметр особого эффекта не дает, так что можно оставить по умолчанию.
DISABLE_TESTS="apps" — отключает проверку актуальности версий софта, с этим прекрасно справляются разработчики Debian.
SUSPSCAN_DIRS="/tmp /var/tmp" — указываем в какой директории искать подозрительные файлы.
OS_VERSION_FILE="/etc/debian_version" — где искать файл с версией ОС.
USE_LOCKING=1 — позволяет спользовать блокировку для защиты от ошибок в случае если запущено несколько процессов rkhunter в Debian. Может пригодиться, если вы запускаете rkhunter автоматически с помощью cron.
DISABLE_UNHIDE=2 — отключает использование утилиты unhide.rb написанной на ruby.
Подготовка rkhunter к первому поиску руткитов
Перед выполнением проверки нужно выполнить два действия.
Прежде всего, необходимо создать базу знаний о текущих файлах, чтобы потом было с чем сравнивать. То есть необходимо быть уверенным, что система чистая. Лучшим вариантом будет выполнить это действие сразу после настройки системы. База создается командой:
Базу можно будет найти по следующему пути: /var/lib/rkhunter/db/rkhunter.dat
Далее требуется обновить базу знаний, содержащую, в том числе, информацию о новых руткитах. Следует выполнить после предыдущей операции и перед первой проверкой. Стоит периодически обновлять базу знаний, но это можно делать не слишком часто. Команда:
Первый запуск
Результат:
System checks summary
=====================
File properties checks...
Files checked: 135
Suspect files: 0
Rootkit checks...
Rootkits checked : 309
Possible rootkits: 0
Applications checks...
All checks skipped
The system checks took: 6 minutes and 21 seconds
All results have been written to the log file (/var/log/rkhunter.log)
One or more warnings have been found while checking the system.
Please check the log file (/var/log/rkhunter.log)
На самом деле вывод более подробный, представлена только финальная часть. Как видно, лог можно найти по пути /var/log/rkhunter.log
Возможные ключи
Команды
-c, --check — выполнить поиск руткитов, результат будет выведен на стандартный вывод, а также в лог-файл.
--unlock — эта комманда просто удаляет lock-файл.
--update — будет произведена проверка на наличие обновления базы знаний. Для работы данной команды требуется, чтобы в системе был установлен один из браузеров командной строки, к примеру, wget или lynx. Желательно выполнять данную команду с некой периодичностью. При использовании в cron стоит использовать также опцию --nocolors.
--propupd [{filename | directory | package name},...] — команда позволяющая добавить в базу данных о файлах системы информацию о файле, всех файлах в директории или пакете. Это необходимо для работы одного из тестов, который сравнивает файл в текущем состоянии с тем, которое было при создании базы. Помните, добавляемый в базу файл должен быть заведомо не зараженным.
--versioncheck — эта команда заставляет rkhunter проверить наличие новой версии программы для поиска руткитов. Браузер командной строки должен присутствовать в системе. Если используется в cron желательно использовать опцию --nocolors.
--list [tests | {lang | languages} | rootkits | perl | propfiles] — эта команда выводит некоторые поддерживаемые возможности программы. Tests — выведет названия доступных тестов, languages — покажет поддерживаемые языки, rootkits — отобразит списки руткитов из базы rkhunter. Perl — выведет список модулей perl которые могут понадобиться в работе rkhunter, список этот не обязательный, но желательный. Установить модули perl можно с помощью команды cpan или утилиты dh-make-perl, которую нужно устанавливать отдельно. propfiles — отобразит список имен файлов, которые использовались для генерации базы файлов. Если никаких опций не задано, то будут показаны все списки кроме propfiles.
-C, --config-check — будет проведена проверка конфигурационных файлов. Проверяются только включенные опции (enabled). Чтобы проверить все опции можно указать --enable all --disable none в командной строке.
-V, --version — будет выведена версия rkhunter.
-h, --help — эта команда отобразить экран с краткой справкой.
Параметры
Различных параметров достаточно много, поэтому мы посмотрим только часть из них. Те, которые показались автору статьи наиболее полезными.
--appendlog — в случае использования данного параметра лог /var/log/rkhunter.log будет дополнен, а не перезаписан. По умолчанию, после того, как rkhunter отработает, основной лог перезаписывается, а предыдущее его содержимое сохраняется в файле rkhunter.log.log, при чем, хранится только один.
--cs2 — основная цветовая схема рассчитана на черный фон. Если же результат будет выведен на экран с белым фоном, то можно использовать альтернативную цветовую схему.
--cronjob — при указании данного параметра будут использованы следующие опции: --check, --nocolors и --skip-keypress, а также не будет вывода в стандартный выход. Поэтому в сочетание с данным параметром можно использовать --report-warnings-only.
--display-logfile — после того, как rkhunter закончит свою работу вывести содержимое лога. Вообще говоря, лог содержит более подробную информацию о найденных проблемах.
--lang — можно указать на каком языке выводить информацию в процессе проверки. Список доступных языков можно получить командой rkhunter --list lang. По умолчанию используется английский.
--logfile [file] — позволяет переопределить файл в который будет писаться лог. При необходимости ничего не писать в лог, можно задать в качестве пути /dev/null.
--nocolors — этот параметр позволяет включить черно-белый режим вывода результатов работы.
--nolog — подавляет запись чего-либо в лог.
--quiet — подавляет любой вывод. Может быть полезно при проверке только кода выхода. То есть если rkhunter используется из скрипта, к примеру.
--report-warnings-only — при этом выводятся только предупреждения. Может быть полезно при запуске через cron. Таким образом, предупреждения будут видны при подключении к серверу с помощью KVM, к примеру.
--sk, --skip-keypress — по умолчанию rkhunter после некоторых наборов тестов просит нажать клавишу “Ввод”. Чтобы таких запросов не поступало можно использовать эту опцию.
--syslog [facility.priority] — по умолчанию в syslog ничего не пишется. Если требуется отмечать время начала и окончания тестирования, можно использовать данный параметр.
--verbose-logging — этот параметр может использоваться, чтобы некоторые тесты писали в лог более подробную информацию. Это может пригодиться для повторного прогона, когда не понятно из-за чего возникло предупреждение. Требует дополнительного времени.
Автоматический поиск руткитов
Чтобы rkhunter начал автоматически проверять систему ежесуточно (у меня проверка начинается в 6:25) достаточно в файле /etc/default/rkhunter установить значение параметраCRON_DAILY_RUN равным true. В данном случае будет использоваться следующая команда:
Как мы помним, --cronjob подразумевает под собой параметры --check, --nocolors и --skip-keypress. То есть в данном случае rkhunter запускается для проверки системы в черно-белом режиме отображения, не запрашивает каких-либо нажатий клавиш, при этом в консоль выводятся только предупреждения и лог будет дописываться, а не перезаписываться. Так как со временем файл лога будет увеличиваться в размере, то не забудьте настроить его ротацию.
Если же вы хотите проводить поиск руткитов по другому расписанию и с другими параметрами, то команду запуска можно добавить в cron вручную.