Потянуло меня на поднятие защиты своего FreeBSD шлюза. Не всегда базовые средства обороны обеспечивают полноценный щит от всевозможных угроз. Представим, что хакер оказался умнее нас и все-таки проник в систему. Ему ничего не стоит затесать руткит или немного подправить конфигурацию, чтобы обеспечить себе бэкдор, поставив нужное приложение и иметь полноценный доступ в систему.
Одним из способом защиты системы от вторжения может являться постоянный мониторинг файлов и конфигураций демонов. Среди некоторых предложенных вариантов я выбрал инструмент Tripwire.
Что делает tripware? Формируется первоначальная база данных каждой программы, делает контрольные суммы программ на этапе их установки (make install) и записывает их (изменения) в особый файл. Файл тоже не простой, подписывается локальной идентификационной фразой, а так же ключом сайта. Далее, периодически проверяются контрольные суммы файлов и если критические файлы были изменены (конфиг файрволла, демон sshd и т.д.), то программа немедленно оповестит администратора.
Программа доступна из портов:
# cd /usr/ports/security/tripwire
# make install clean

Во время установки предложит согласиться с лицензионным соглашением (отказ от ответственности), набираем accept и продолжаем дальше.
Вводим две парольные фразы в диалоговом окне, сгенерируется ключ для подписи базы данных.
Что мониторить – описывается в файле /usr/local/etc/tripwire/twpol.txt (файл политик). Фрагменты политик выглядят подобным образом:

Формат файла политик:
( rulename = "имя правила", severity = уровень серьезности правила)
{ перечисляется список объектов и уровень генерирования предупреждения, т.е. есть критические, есть конфиги и т.д.}
Проверить, было ли какое-нибудь нарушение целостности файлов можно командой:
# tripwire --check
Программа начнет проверять файлы и создаст отчёт в папке /var/db/tripwire/report/
Просмотрим отчёт:
# twprint --print-report --twrfile gw2.mydomain-20140212-121332.twr

А ниже в отчете будет подробно расписано – какие файлы и по каким критериям были модицифированы. Рекомендую создание отчёта помещать в периодичность, например в cron, еженощно. Это позволит точнее локализовать день, когда система подверглась нападению.
Обновить базу данных можно через:
# tripwire --update
Но делать это нужно только в том случае, если точно уверены, что за время с последнего обновления базы, система не подвергалась компрометации, поскольку все следы будут затерты. Все некритичные секции из файла политик я убираю, буду мониторить только системные каталоги и конфигурационные файлы.
В этом случае нам будет выведет последний лог в текстовом редакторе, с символами [x] перед каждой записью. Если запись является нарушением безопасности, то эти символы надо стереть. Если записи легитимные, то оставляйте как есть. И сохраняйте файл. База будет обновлена.
Продолжаю статью через несколько лет. Я уже достаточно долго пользуюсь этим инструментом, вот что хотелось бы добавить.
- Храните парольные фразы в надёжном месте
- Настройки политики так, чтобы было как можно меньше “мусора” в отчётах, потому что пролистывать шестимегабайтный текстовик в поисках чего-то действительно важного – муторное занятие.
- Обновляя базу (если в отчёте все изменения легитимные) лучше так:
tripwire --update --twrfile /var/lib/tripwire/report/reportname.twr
- Конфигурационный файл и файл политик лучше зашифровать и удалить текстовый незашифрованный вариант
Итак, резюмирую.
Команды для работы с TripWire
tripwire --update --twrfile /var/lib/tripwire/report/reportname.twr
(обновление контрольного снимка с результатами отчёта);twprint --print-dbfile
(просмотр текущего состояния базы данных, либо можно указать конкретный объект)tripwire --check [--twrfile имя-файла-с-отчетом] [--email-report [--email-report-level уровень]] {объект }
(проверка системы или конкретного объекта на соответствие эталону в базе и создание отчёта)tripwire --update-policy --secure-mode low /etc/tripwire/twpol.txt
(обновить файл политики)twprint --print-report --twrfile имя-файла-с-отчетом [--report-level уровень]
(вывод отчёта)tripwire --init [--no-encription]
(инициализировать базу данных)twadmin --print-polfile > /etc/tripwire/twpol.txt
(раскодировать файл политик в текстовый файл)twadmin --create-polfile [--no-encription] /etc/tripwire/twpol.txt
(закодировать текстовый вариант политик обратно, при этом текстовый можно удалить)
Comments: