Добавляем в ежеутренний скрипт проверку хэшей файлов rootkit hunter-ом

Из-за всей этой удаленки получилось так, что полупустой раньше тренинговый ноут теперь стал основной рабочей машиной и его стоит-таки как-то повдумчивей защитить. На что в общем-то недвусмысленно намекает и начальство. На ноуте сейчас стоит Ubuntu 20.04 beta.

Началось у меня все с понятных настроек в BIOS и полнодискового шифрования, о которых, наверное, и писать не стоит. А вот потом я решил понять, что может на файловом уровне утилита rkhunter («rootkit, backdoor, sniffer and exploit scanner»).

Больших ожиданий от не обновлявшейся уже пару лет софтины у меня не было. Сразу скажу, что в пользе сигнатур февраля 2018 года для поиска руткитов я очень сильно сомневаюсь, а вот один из других режимов работы — проверка хэшей файлов, меня заинтересовал. Кому интересен такой опыт и что пока получилось — добро пожаловать под кат.

Идея проста — а давайте в утренний скрипт полезных дел добавим проверку не изменились ли MD5 хэши файлов, у которых они меняться не должны. По крайней мере до обновления пакетов не должны. Такой очень лайтовый, но не бесполезный, по-моему, вайтлистинг. Актуальная версия способной посчитать и проверить хэши утилиты ставится просто пакетным менеджером:

apt search rkhunter
rkhunter/focal,focal,now 1.4.6-8 all [installed]
  rootkit, backdoor, sniffer and exploit scanner

Основной конфиг хантера лежит в /etc/rkhunter.conf и сначала для решения своей задачи вот какие параметры я там выставил:

ENABLE_TESTS=hashes

Потому что меня кроме хэшей пока ничего не интересует. Список остальных возможных тестов можно получить командой.

sudo rkhunter --list test

Я до сих пор считаю коллизию MD5-ок относящейся к области математики, но не к практике. Не настаиваю на этом мнении, но я почти каждый день смотрю в неплохие вредоносы и пока в дикой природе таких коллизий не встречал. Так что мне в конфиге пока достаточно.

HASH_CMD=MD5

Затем указал свой пакетный менеджер и, главное, директории, хэши файлов в которые меня интересуют. Путь пока будут, например, /bin и /usr/bin. Про файлы, которые появились в директориях, но которых еще не было на момент обсчета хантер тоже выдаст предупреждения.

PKGMGR=DPKG
USER_FILEPROP_FILES_DIRS=/bin/*
USER_FILEPROP_FILES_DIRS=/usr/bin/*

Вот здесь важный момент: с моими настройками сканирование основывается не на пакетах, а на директориях. Наверное, так и правильнее, потому что в пакетах много не исполняемых файлов и их нужно сначала отфильтровать, например, через file. Я пока выбрал путь наращивания списка директорий и исключений.

С конфигом сканера мы пока закончили, теперь время обновить с новыми настройками базу правильных хэшей в /var/lib/rkhunter/db/rkhunter.dat. Для этого нужна команда (она же принимает имена пакетов для добавления в базу, если вы пойдете другим путем).

sudo rkhunter --propupd

После этого в rkhunter.dat должны появиться все интересующие вас файлы и их хэши. В моем случае это 2847 файлов, а работа индексатора заняла 9m 2,117s. Многовато, вроде, для трех тысяч MD5-ок, учитывая md5sum для /bin/ls за 0,003s, но уж что есть.

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

sudo rkhunter -c

Здесь есть один очень полезный ключ —rwo (report warnings only), который пропустит все успешные сравнения и выдаст только предупреждения. Искать результат работы нужно в /var/log/rkhunter.log. Что касается скорости работы проверки, то для моих почти трех тысяч бинарей это было 10m 27,489s, сопоставимо со временем индексации.

С проверкой разобрались, но остается вопрос реиндексации при обновлении пакетов. Т.е. сделали мы apt update и не считать же теперь все обновившиеся файлы зловредами. У сканера есть еще один конфиг /etc/default/rkhunter для автоматизации задач. В нем мы и зададим параметр.

APT_AUTOGEN="yes"

А в /etc/apt/apt.conf.d/90rkhunter лежит скрипт, который и отвечает за пост-переиндексацию:


 // Makes sure that rkhunter file properties database is updated after each remove or install only APT_AUTOGEN is enabled
 DPkg::Post-Invoke { "if [ -x /usr/bin/rkhunter ] && grep -qiE '^APT_AUTOGEN=.?(true|yes)' /etc/default/rkhunter; then /usr/share/rkhunter/scripts/rkhupd.sh; fi"; };

Собственно, все, любые дополнения с радостью принимаются. Надеюсь, было полезно.

Специально для сайта ITWORLD.UZ. Новость взята с сайта Хабр