mtree на страже вашей FreeBSD
К сожалению в любом программном обеспечение есть уязвимости и дыры, который могут использовать хакеры в свои целях. С момента выхода обновления или security патча до момента исправления в вашей ОС может пройти какое-то время, т.е. это потенциальная возможность получить управление ваши серверов для злоумышленника, который может оставить закладки для будущего использования даже после того, как вы все исправите. Например он может заменить файл su или sudo, даже ps вместе ls могут стать смертельно опасными! Для защиты нужно отслеживать состояние системных файлов (владельцы, права, размер, хеши и т.п.)!
Tripwire – достаточно сложный и тяжелый продукт, конечно можно поставить из портов, но в FreeBSD уже есть утилита, которая прекрасно справится с поставленной задачей.
mtree создает список файлов и их свойств в заданном каталоге. Полученный список может использоваться в дальнейшем для сравнения при помощи mtree текущего состояния файлов с моментом, когда создавался список. Если при сравнении будут найдены несоответствия mtree выведет на консоль информацию о них.
Нужно понимать, что файл со списком должен быть надежно защищен. Если злоумышленник найдет этот файл, то он сможет его изменить и он станет совершенно бесполезен. Для защиты лучше всего файл зашифровать и перенести с сервера на другую машину или еще лучше флешку.
Перейдем непосредственно к созданию списка:
cd /sbin mtree -c -K uid,gid,mode,flags,size,cksum,md5digest,sha1digest,ripemd160digest > /root/sbin-mtree
Теперь файл /root/sbin-mtree можно использовать для проверки.
cd /sbin
touch test
mtree < /root/sbin-mtree
. changed
modification time expected Wed Feb 17 14:19:16 2010 found Wed Mar 31 17:11:12 2010
test extra
Как видите, все достаточно просто. Поговорим немного об автоматизации и процессе использования mtree. Написать скрипт проверки не составляет проблемы, выглядеть он будет примерно так:
#!/bin/sh
MTREE_FILES_DIR='/mnt/security'
DIR_LIST='bin sbin etc root usr-bin usr-sbin usr-local-sbin usr-local-bin usr-local-etc boot'
for dir in $DIR_LIST; do
realdir="/`/bin/echo $dir|/usr/bin/sed 's/-/\//g'`"
cd $realdir
mtree_result=`/usr/sbin/mtree 2>/dev/null < $MTREE_FILES_DIR/${dir}-mtree
if [ "x$?" != "x0" ]; then
echo $mtree_result | mail admin@mail.domain
fi
done
Здесь есть важный момент /mnt/security должен монтироваться в read-only по NFS например, так чтобы злоумышленник не мог поменять содержимое файлов.
Для FreeBSD я составил такой список каталогов, конечно же на рабоче системе будут и другие каталоги:
/bin
/sbin
/etc
/root
/usr/bin
/usr/sbin
/usr/local/sbin
/usr/local/bin
/usr/local/etc
/boot
Естественно безопасность добавляет проблем при работе, в данном случае придется при каждом обновлении системы или софта обновлять списки mtree. Но кто сказал, что будет легко?
П.С.
Для написания заметки использовалась глава “Use mtree as a Built-in Tripwire” из книги “BSD hacks”
|
|