Установка rkhunter на Ubuntu 12.04

Как защитить систему от взлома и чем проверить факт взлома?

Существует решение в виде утилиты под названием "RKHunter".

rkhunter - скрипт для проверки на локальной системе попыток взлома и обнаружения известных ему rootkits и malware. Он также производит проверки и выявления изменений в установленных программах, в системных файлах запуска и различные проверки для приложений, которые "слушают" на сетевых интерфейсах сервера. О найденных проблемах умеет оповещать по почте.

- Установка rkhunter из репозитория
- Настройка rkhunter
- Ложные срабатывания rkhunter
- Установка последней версии rkhunter из тарбола
- rkhunter - подробный лог на почту

Установка rkhunter из репозитория

apt-get install rkhunter

При установке автоматически создаются скрипты запуска программы в /etc/cron.dayly для ежедневного запуска сканирования системы и в /etc/cron.weekly для еженедельного обновления базы данных уязвимостей.
Для включения автозапуска отредактируйте /etc/default/rkhunter:

# Set this to yes to enable rkhunter daily runs
# (default: true)
CRON_DAILY_RUN="true"

# Set this to yes to enable rkhunter weekly database updates
# (default: true)
CRON_DB_UPDATE="true"

# Set this to yes to enable reports of weekly database updates
# (default: false)
DB_UPDATE_EMAIL="true"

# Set this to the email address where reports and run output should be sent
# (default: root)
REPORT_EMAIL="root"

# Set this to yes to enable automatic database updates
# (default: false)
APT_AUTOGEN="false"

# Nicenesses range from -20 (most favorable scheduling) to 19 (least favorable)
# (default: 0)
NICE="0"

# Should daily check be run when running on battery
# powermgmt-base is required to detect if running on battery or on AC power
# (default: false)
RUN_CHECK_ON_BATTERY="false"

При отсутствии скриптов в некоторых дистрибутивах Linux автоматизация запуска осуществляется через cron:

Добавьте в /etc/crontab следующие строки:

# Обновляет базу rkhunter раз в неделю в 01:00
0 1 * * 1 root rkhunter --update --cronjob
# Сканирует на руткиты каждый день в 01:30
30 1 * * * root rkhunter --check --cronjob

Перезапускаем cron:

# sudo /etc/init.d/cron restart


Настройка rkhunter

Настройка rkhunter интуитивно понятна и выполняется путем редактирования файла /etc/rkhunter.conf.
Например, для отправки уведомлений о найденных угрозах на почту отредактируйте параметр MAIL-ON-WARNING добавив свои адреса через пробел:

MAIL-ON-WARNING=root@localhost admin@test.ru

Применение

Для начала нужно обновить базу данных уязвимостей:

rkhunter --update

После каждого изменения файла /etc/rkhunter.conf нужно выполнять команду:

rkhunter --propupd

Начать сканирование системы можно с помощью команды:

rkhunter --check

или в режиме вывода только предупреждений:

rkhunter -c --rwo

В идеальном случае эта команда не должна выдавать никаких сообщений, но даже на чистой системе вывод на экран консоли скорее всего будет содержать предупреждения (Warnings).

Ложные срабатывания rkhunter

Ubuntu 12.04 + rkhunter 1.3.8 = ложные срабатывания

После установки и запуска RKHunter 1.3.8 из официального репозитория Ubuntu появляется ошибка:

Warning: Hidden file found: /dev/.initramfs: symbolic link to `/run/initramfs’

или

Warning: The command '/usr/bin/unhide.rb' has been replaced by a script: /usr/bin/unhide.rb: Ruby script, ASCII text

Ничего страшного в этом нет, просто версия 1.3.8 не умеет проверять симлинки. В общем случае подобные предупреждения могут быть добавлены в whitelist конфигурационного файла /etc/rkhunter.conf.

В релизе RKHunter 1.4.0 устранен этот баг, но он не доступен из репозиториев Ubuntu (на момент написания статьи). Тут есть несколько вариантов.

  • Установить rkhunter 1.4.0 из исходников.
  • Скачать rkhunter 1.4.0 tarball, извлечь исполняемый файл и конфиг и заменить ими существующие.
  • Самостоятельно внести необходимые изменения в исполняемый файл.

Выбираем последний вариант для наглядности, тем более, что придется внести минимум изменений.

Открываем /usr/bin/rkhunter и переходим к строке 835. Видим следующее:

# Now test for the different file types.
#
if [ -f "${FNAME}" ]; then
  case "${OPT_NAME}" in
    ALLOWHIDDENDIR|TMPDIR|DBDIR|BINDIR|SCRIPTDIR|ROOTDIR|SSH_CONFIG_DIR|SUSPSCAN_DIRS|SUSPSCAN_TEMP)
      ERRCODE=1
      test $CONFIG_CHECK -eq 1 && RET_CODE=1
      echo "Invalid ${OPT_NAME} configuration option: Not a directory: ${FNAME}"
      ;;
  esac
elif [ -d "${FNAME}" ]; then
  case "${OPT_NAME}" in
 WRITEWHITELIST|IMMUTWHITELIST|SCRIPTWHITELIST|ALLOWHIDDENFILE|LOGFILE|SYSLOG_CONFIG_FILE|INETD_CONF_PATH|XINETD_CONF_PATH|PASSWORD_FILE|RTKT_FILE_WHITELIST|OS_VERSION_FILE|IGNORE_PRELINK_DEP_ERR|WEBCMD|*_CMD)
      ERRCODE=1
      test $CONFIG_CHECK -eq 1 && RET_CODE=1
      echo "Invalid ${OPT_NAME} configuration option: Not a file: ${FNAME}"
      ;;
  esac

Теперь после 846 строки добавляем:

#
# For the ALLOWHIDDENFILE option we need to allow
# a hidden symbolic link to a directory.
#
   test "${OPT_NAME}" = "ALLOWHIDDENFILE" -a -h "${FNAME}" && continue

# End of insertion

Должно получиться так:

# Now test for the different file types.
#
if [ -f "${FNAME}" ]; then
  case "${OPT_NAME}" in
    ALLOWHIDDENDIR|TMPDIR|DBDIR|BINDIR|SCRIPTDIR|ROOTDIR|SSH_CONFIG_DIR|SUSPSCAN_DIRS|SUSPSCAN_TEMP)
      ERRCODE=1
      test $CONFIG_CHECK -eq 1 && RET_CODE=1
      echo "Invalid ${OPT_NAME} configuration option: Not a directory: ${FNAME}"
      ;;
  esac
elif [ -d "${FNAME}" ]; then

#
# For the ALLOWHIDDENFILE option we need to allow
# a hidden symbolic link to a directory.
#
   test "${OPT_NAME}" = "ALLOWHIDDENFILE" -a -h "${FNAME}" && continue

# End of insertion

  case "${OPT_NAME}" in
 WRITEWHITELIST|IMMUTWHITELIST|SCRIPTWHITELIST|ALLOWHIDDENFILE|LOGFILE|SYSLOG_CONFIG_FILE|INETD_CONF_PATH|XINETD_CONF_PATH|PASSWORD_FILE|RTKT_FILE_WHITELIST|OS_VERSION_FILE|IGNORE_PRELINK_DEP_ERR|WEBCMD|*_CMD)
      ERRCODE=1
      test $CONFIG_CHECK -eq 1 && RET_CODE=1
      echo "Invalid ${OPT_NAME} configuration option: Not a file: ${FNAME}"
      ;;
  esac

Сохраняем файл и открываем /etc/rkhunter.conf.
Добавляем следующие строки:

ALLOWHIDDENFILE="/dev/.initramfs"

и для второй ошибки:

SCRIPTWHITELIST=/usr/bin/unhide.rb

Сохраняем изменения и обновляем свойства rkhunter:

sudo rkhunter –-propupd

Подобным образом можно внести и другие исключения.
Например:

ALLOWHIDDENDIR="/dev/.udev"

Вызывающие ложные срабатывания факторы в Debian описаны в файле:
/usr/share/doc/rkhunter/README.Debian.gz

В логах появляется запись DIVINE:

Please inspect this machine, because it may be infected:
[01:21:05] Warning: Network TCP port 33369 is being used by /usr/lib/jvm/java-6-sun-1.6.0.26/jre/bin/java. Possible rootkit: Volc Rootkit SSH server (divine)
           Use the lsof -i or netstat -an command to check this.

lsof -i и netstat –an - ничего не показывают.

Если следов руткита не обнаруживается и файла /usr/bin/volc и директории /usr/lib/volc нет, то можно считать это ложным срабатыванием. Файл и директория в нашем случае отсутствует.
Т.е. rkhunter сработал на типичный порт руткита, а не на сам руткит. Порт 33369 мог использовать любой другой процесс.

Установка последней версии rkhunter из тарбола

Если необходимо установить самую свежую версию rkhunter или решено обновить установленную версию из репозитория нужно скачать архив с последней версией http://sourceforge.net/projects/rkhunter/files/rkhunter/. Для этого не нужно сначала ставить версию из репозитория.

Для начала зайдем в консоль и посмотрим какая версия у нас установлена (если установлена) и доступна-ли более свежая:

rkhunter --versioncheck

[ Rootkit Hunter version 1.3.8 ]

Checking rkhunter version...
This version : 1.3.8
Latest version: 1.4.2
Update available

Видно, что для обновления доступна версия 1.4.2, ее и установим предварительно удалив старую, но сохранив на всякий случай конфиг /etc/rkhunter.conf.

mv /etc/rkhunter.conf /etc/rkhunter.conf_bkp
aptitude purge rkhunter

Скачиваем и распоковываем архив, например, в домашний каталог:

cd ~
wget http://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.2/rkhunter-1.4.2.tar.gz
tar xzvf rkhunter-1.4.2.tar.gz

Заходим в распоковавшийся каталог и запускаем установочный скрипт:

cd rkhunter-1.4.2
./installer.sh --layout /usr --install

Более подробно узнать о ключах установки можно просто запустив ./installer.sh без параметров.
Проверяем установленную версию:

rkhunter --versioncheck

[ Rootkit Hunter version 1.4.2 ]

Checking rkhunter version...
This version : 1.4.2
Latest version: 1.4.2

Далее редактируем /etc/rkhunter.conf под свои нужды как описано выше. Плюс установим переменную:

PKGMGR=DPKG

При необходимости контролировать изменения в конфигурационных файлах Apache добавляем строку в соответствующий раздел:

USER_FILEPROP_FILES_DIRS=/etc/apache2/*

Применяем конфигурацию и запускаем проверку rkhunter:

rkhunter --propupd
rkhunter --check

При обнаружении ложных страбатываний, устраняем их и добавляем строки автозапуска в /etc/crontab:

# Обновляет базу rkhunter раз в неделю в 01:00
0 1 * * 1 root rkhunter --update --cronjob
# Сканирует на руткиты каждый день в 01:30
30 1 * * * root rkhunter --check --cronjob


rkhunter - подробный лог на почту

Сообщения отсылаемые утилитой по почте мало информативны. Для того, что бы увидеть подробности нужно заходить на сервер и просматривать логи. Но можно немного видоизменить код и подозрительные записи из лога будут приходить на почту.
Откроем на редактирование файл:
/usr/bin/rkhunter
и в районе строки 16152 найдем код:

if [ -n "${MAILONWARNING}" ]; then
eval "echo 'Please inspect this machine, because it may be infected.' | ${MAIL_CMD} ${MAILONWARNING}"
fi

и заменим на этот:

if [ -n "${MAILONWARNING}" ]; then
eval "echo 'Please inspect this machine, because it may be infected:\n$(grep -iA6 warning: /var/log/rkhunter.log)' | ${MAIL_CMD} ${MAILONWARNING}"
fi

Ключ -A6 команды grep указывает количество строк выводимых после найденного совпадения.
ключ -i - регистронезависимый поиск.

Почтовое сообщение должно выглядеть примерно так:

Please inspect this machine, because it may be infected:
[04:48:46] Warning: The file properties have changed:
[04:48:46]          File: /usr/bin/sudo
[04:48:46]          Current hash: 42c6a2cf450f9af70b1bb7a8715160a0ec30b5a2
[04:48:46]          Stored hash : 803f95c39deeb91bc634ca963dcdf688d1ce71d9
[04:48:46]          Current inode: 655807    Stored inode: 655777
[04:48:46]          Current file modification time: 1426177663 (12-аМаАб€б‚аА-2015 19:27:43)
[04:48:46]          Stored file modification time : 1392059790 (10-б„аЕаВб€.-2014 23:16:30)

.

Метки: . Закладка Постоянная ссылка.

Добавить комментарий

Ваш e-mail не будет опубликован.

*