РАШИД АЧИЛОВ
Управляем удаленными базами AIDE
Часть II – AIDEstart
Никто его не ждет, хотя постоянно готовится к нему. И вот он наступает – день, когда сервер взламывается и необходимо проверить, какие файлы подверглись изменениям. Заветная флэшка с данными контрольных сумм достается из сейфа. Как ей воспользоваться на взломанной машине, чтобы максимально обезопасить себя от фальсификации результата?
А зачем отдельный скрипт запуска?
Конечно, наилучшим решением была бы загрузка с LiveCD/Flash/другой системы, монтирование дисков сервера вручную и проверка их в полностью доверенной системе. Но неприятности тем и неприятны, что приходят как раз в тот момент, когда такая система, если она есть, неисправна, незакончена или просто физически отсутствует. Поэтому для запуска проверки непосредственно на недостоверной машине будет использовать AIDEStart.
AIDEstart – второй скрипт, предназначенный для управления удаленными базами AIDE. Его назначение – использовать сохраненные базы для проверки системы. При этом предполагается, что проверяемая машина недоверенная, то есть может содержать поврежденные и/или зараженные файлы. Поэтому дополнительно ко всему прочему AIDEstart минимально использует ее средства, говоря точнее, используется только ядро системы (/boot/kernel). Все остальные средства находятся на съемном носителе, предназначенном для хранения последнего поколения баз AIDE.
Дополнительно к последнему поколению носитель содержит полный комплект исполняемых файлов для выполнения проверки и всех вспомогательных операций: chown, chmod, ln и т. д. Все они сделаны статически собранными для того, чтобы исключить взаимодействие с libc.so. AIDEstart выполняет обычный комплект операций – инициализация базы, проверка, обновление базы. Если база обновлялась, то полученную обновленную базу необходимо перенести на Flash вручную, для чего предусмотрена опция командной строки «не размонтировать Flash по окончании работы».
Полный текст скрипта смотрите на сайте www.samag.ru, в разделе «Исходный код»). Он снабжен достаточно подробными комментариями, а наиболее важные и интересные моменты мы обсудим далее по ходу статьи.
Готовим носитель для AIDEStart
Для того чтобы Flash, содержащий базы, предварительно заполненный с помощью AIDEcontrol, можно было использовать c AIDEstart, его необходимо предварительно подготовить. Эти действия не выполняются AIDEControl, поскольку заранее неизвестно, будет ли использоваться AIDEStart для проверки или нет. Все действия по подготовке Flash необходимо проводить на доверенной машине, поскольку именно этот комплект исполняемых файлов будет считаться эталоном при запуске на недостоверной машине. Flash, заполненный с помощью AIDEControl, содержит каталоги с именами, совпадающими с именами машин в файле описания узлов. Дополнительно необходимо вручную создать каталоги bin и bin5, в которые поместить соответственно статически собранные для FreeBSD 4.x и для FreeBSD 5.x исполняемые файлы: Bzip2, AIDE, camcontrol, chown, chmod, cp, mv, less, rm, umount, а также собственно aidecontrol, aidestart и конфигурационный файл aidecontrol.conf.
Для того чтобы собрать все перечисленные выше исполняемые файлы, статически ищем их в дереве исходных текстов системы (или портов для AIDE), и добавляем в Makefile строчку:
LDADD += -static
после чего запускаем make. После завершения работы make в каталоге будет находится исполняемый файл, собранный статически, в чем можно убедиться таким образом:
# ldd chmod
ldd: chmod: not a dynamic executable |
Местоположение нужных нам файлов:
- /usr/src/bin/chmod
- /usr/src/bin/cp
- /usr/src/bin/mv
- /usr/src/bin/rm
- /usr/src/sbin/camcontrol
- /usr/src/sbin/umount
- /usr/src/usr.bin/bzip2
- /usr/src/usr.bin/less
- /usr/src/usr.sbin/chown
Опции командной строки и примеры запуска
Перед началом проверки нам нужно переписать конфигурационный файл aidecontrol.conf на его обычное место – /usr/local/etc/aidecontrol.conf. Это обычный текстовый файл, за него нечего бояться. Файл можно и не копировать, но тогда придется каждый раз указывать место его размещения.
AIDEStart распознает следующие опции командной строки:
- -h – краткая справка по опциям (без примеров).
- -i – инициализировать базы AIDE (выполняется команда aide init).
- -c – проверить систему по последней базе (выполняется команда aide --check).
- -u – обновить последнюю базу данных (выполняется команда aide --update).
- -m – сравнить базы данных (выполняется команда aide compare).
- -f – указывает имя и путь к конфигурационному файлу (по умолчанию /usr/local/etc/aidecontrol.conf).
- -n – не размонтировать Flash после окончания работы. Эта опция предназначена для команд, изменяющих базу. AIDEStart сам не копирует созданную/обновленную базу с компьютера на Flash, и это сделано намеренно. Вы сами должны решить, стоит ли заменять последнюю копию базы на Flash, на новую или нет.
- -5 – скрипт запускается на FreeBSD 5.x (по умолчанию предполагается 4.x).
Таким образом:
# aidestart -i
инициализирует базу по умолчанию (/var/db/aide/aide.db, если в конфигурационном файле не указано иное).
# aidestart -u -n
проверит систему по последней базе с ее одновременным обновлением, выведет отчет с помощью less и переименует «новую» базу (aide.db.new) в «старую» (aide.db). После выполнения этой операции Flash не будет размонтирована для возможной перезаписи «старой» базы.
# aidestart -m -f /tmp/blabla.conf -5
сравнит «старую» базу, загруженную с Flash, и «новую» (aide.db.new), созданную, возможно, в другое время, используя конфигурационный файл /tmp/blabla.conf и учитывая то, что запускаться скрипт будет на FreeBSD 5.x.
Загрузка базы AIDE для проверки
Эта функция разбирается просто для того, чтобы показать, что скрипт действительно не использует никаких системных исполняемых файлов для работы – только свои собственные.
loadbase()
{
$aidepath/rm -f $adbnam
$aidepath/cp $aidebase/$adbnam.bz2 $adbnam.bz2
$aidepath/chown $abowner:$abgroup $adbnam.bz2
$aidepath/chmod $abmode $adbnam.bz2
$aidepath/bzip2 -d -q $adbnam.bz2
}
Выполнение операции
Перед тем как скопировать базу с Flash-диска, скрипт проверяет параметр starthost из конфигурационного файла – его значение должно быть установлено равным тому имени, что было задано для данного компьютера в файле описания узлов, использованного в AIDEcontrol. Если значение параметра не изменено (а по умолчанию оно равно «SETHERE--»), скрипт прекращает работу.
Затем скрипт пытается смонтировать Flash с последним поколением баз. Для этого должны быть выполнены все необходимые настройки, описанные в [1]. Если все сделано правильно, Flash должен монтироваться сразу же после установки. Это очень просто проверить – достаточно вставить Flash, и он должен смонтироваться в точку /mnt/umass (или любую другую, заданную в /etc/fstab). Так же, как и в AIDEStart, монтирование происходит в бесконечном цикле ожидания – пока нужное устройство не найдено среди смонтированных, можно будет увидеть только запрос на установку Flash.
После успешного монтирования Flash выполняется запрошенная операция. Для операции инициализации базы загрузка с Flash не производится, иначе последняя база загружается с Flash в стандартное расположение и выполняется соответствующая операция. После выполнения операции можно просмотреть отчет (он отображается автоматически с помощью less), после чего «новая» база будет переименована в «старую» (для init или update), у нее будет изменен владелец и права доступа на указанные в конфигурационном файле.
Последнее, что сделает скрипт, – это размонтирует Flash, если не задан ключ, запрещающий это. Перед тем как размонтировать, в /tmp будут сброшены исполняемые файлы umount и camcontrol, потому что Flash будет недоступна, а пользоваться недоверенными исполняемыми файлами нельзя. Сброшенные umount и camcontrol размонтируют Flash и остановят устройство (скрипт анализирует список устройств и выбирает то, которое было на нужной нам точке монтирования). Остановка устройства нужна главным образом для того, чтобы погасить индикатор готовности на Flash, хотя это работает не на всех устройствах. После чего и собственно umount и camcontrol будут тоже удалены.
Возможные ошибки
Наиболее сложной частью здесь является настройка USB для того, чтобы монтирование Flash происходило автоматически. Об этом подробно рассказано в [1].
Если монтирование Flash проходит успешно, то ошибиться практически негде. Единственная возможность – указать неверные пути в aidecontrol.conf. Пожалуйста, проверьте правильность написания, существования и наличия прав на данные каталоги (Кто сказал, что root может все? Попробуйте-ка удалить каталог с атрибутом schg при kern.securelevel=2 и выше).
Заключение
Так все-таки можно обойтись без данного скрипта или нет? Конечно, можно, если все выполняемые здесь операции делать руками, помнить правильную последовательность и не ошибаться в ней. Данный скрипт – всего лишь «малая механизация» для того, чтобы освободить свою память для решения более важных задач. Ну и, разумеется, не следует оставлять Flash с базами где попало, в том числе и в рабочем столе. Например, я постоянно ношу ее при себе.
Литература:
- Ачилов Р. Управляем удаленными базами AIDE. – Журнал «Системный администратор», №8, август 2005 г. – 48-53 с (http://www.samag.ru/cgi-bin/go.pl?q=articles;n=08.2005;a=05).