AIDE – система контроля за безопасностью системы.
опубликовано в Безопасность |
Программа существует в FreeBSD, Solaris, во всех дистрибутивах Linux, и прочиx Unix системах.
Принцип работы программы заключается в следующем: для файловой системы (каталогов или файлов описанных в конфигурационном файле) создется снимок системы (путем вычисления контрольных сумм), на момент когда вы считаете что система находится в нетронутом состоянии и эти данные сохраняются в эталонный файл. После чего с регулярными интервалами (желательно ежедневно, через расписание Cron) программа запускается снова, и состояние файловой системы сравнивается с исходным снимком, после чего найденные расхождения либо сохраняются а файл, либо отправляются вам по электронной почте.
Для её установки в систему Gentoo достаточно выполнить
# emerge -av aide
Рекомендую использовать флаг zlib для возможности компрессии данных.
После установки программы вы можете отредактировать её конфигурационный файл располагающийся в /etc/aide/aide.conf
В этом конфигурационном файле указаны директории и файлы, которые необходимо контролировать, а также свойства файлов, нуждающихся в контроле.
# AIDE conf
# база данных, для чтения, – желательно скопировать в недоступное место (по умолчанию ./aide.db)
database=file:/var/lib/aide/aide.db
# местоположение вновь создаваемой базы данных (./aide.db.new)
database_out=file:/var/lib/aide/aide.db.new
# если программа собрана с поддержкой zlib, то таким образом включается сжатие данных для экономии места
gzip_dbout=yes
# Далее для справки описаны все возможные/предустановленные параметры, изменение которых может контролировать AIDE
#
#p: permissions – изменение прав
#i: inode – изменение inode
#n: number of links – изменение количества ссылок
#u: user – изменился пользователь
#g: group – группа
#s: size – размер
#b: block count – индекс блока
#m: mtime – время модификации
#a: atime – время доступа
#c: ctime – время создания
#S: check for growing size – проверка на изменение/возрастание размера
# контрольные суммы по соответствующим алгоритмам
#md5: md5 checksum -
#sha1: sha1 checksum
#rmd160: rmd160 checksum
#tiger: tiger checksum
#haval: haval checksum
#gost: gost checksum
#crc32: crc32 checksum
# предустановки, сгруппированные под определенные задачи
#R: p+i+n+u+g+s+m+c+md5
#L: p+i+n+u+g
#E: Empty group (пустая группа т.е. ничего не контролируется)
#>: Growing logfile p+u+g+i+n+S (это для постоянно увеличивающихся файлов)
# и самостоятельно созданные пользователем
Binlib = p+i+n+u+g+s+b+m+c+md5+sha1
ConfFiles = p+i+n+u+g+s+b+m+c+md5+sha1
Logs = p+i+n+u+g+S
Devices = p+i+n+u+g+s+b+c+md5+sha1
Databases = p+n+u+g
StaticDir = p+i+n+u+g
ManPages = p+i+n+u+g+s+b+m+c+md5+sha1
# в строках ниже задаются каталоги и правила, которые будут контролироваться, хотя для проверки всей системы можно использовать просто / R; отметьте также, что применяются регулярные выражения
# такая конструкция добавляет только каталог /boot без подкаталогов
=/boot$ Binlib
# все, что ниже, будет обойдено рекурсивно
/bin Binlib
/sbin Binlib
/usr/bin Binlib
/usr/sbin Binlib
/usr/local/bin Binlib
/usr/local/sbin Binlib
/usr/games Binlib
/lib Binlib
/usr/lib Binlib
/usr/local/lib Binlib
# ниже, как видите, применяются уже другие правила
/var/log$ StaticDir
/var/log/aide/aide.log(.[0-9])?(.gz)? Databases
/var/log/aide/error.log(.[0-9])?(.gz)? Databases
/var/log/setuid.changes(.[0-9])?(.gz)? Databases
/var/log Logs
# каталоги /dev и /proc будут исключены из списка проверяемых
!/dev
!/proc
Изначально ститема сконфигурированно достаточно правильно, и можно ничего не трогать.
Если вы хотите добавить другие каталоги – достаточно указать к ним путь, и выбрать одну из существующих предустановок.
Рассмотрим к примеру анализ каталога /bin, в конфигурационном файле он описывается строчкой
/bin Binlib
где BinLib это набор параметров, состоящий из:
Binlib = p+i+n+u+g+s+b+m+c+md5+sha1
Т.е. все файлы в директории /bin будут контролироваться по следующим параметрам: права доступа, количество ссылок, номер inode, владец, группа, размер, количество блоков, время последнего изменения, время последнего изменения статуса, а так же по дайджестам md5 и sha1.
Для того чтобы сооьщить програме каталоги или файлы которые необходимо исключить из проверки, необходимо добавить префикс ! к началу. Например, правило !/.*/TMP исключит все директории TMP, независимо от их расположения в файловой системе. Необходимо учесть что в данном случае .* это регулярное выражение, а не маска имени файла.
Теперь необходимо запустить программу чтобы она создала первоначальный “эталонный” снимок системы. Для этого запускаем программу aide с параметром –i:
# aide -i
В результате программа создаст файл /var/lib/aide/aide.db.new. В этом файле содержится информация о каждом файле, в которой записаны сведения об имени файла, правах доступа, принадлежности к пользователю и группе, размере, времени последнего изменения, времени последнего изменения статуса, номере inode, числе связей, а также один или больше дайджестов (криптографических хэшей) его содержания. По этим дайджестам программа Aide отслеживаеи изменения в содержимом файлов. Далее снимок нужно переименовать в aide.db, поскольку с этим файлом Aide будет сравнивать вновь созданные снимки:
# mv /var/lib/aide.db.new /var/lib/aide.db
Предположим что злоумышленник каким то образом умудрился подменить программу сp. Мы можем просто сделать touch /bin/cp – в результате изменится время создания файла.
Теперь запустим программу в проверочном режиме:
# aide --check
AIDE found differences between database and filesystem!!
Start timestamp: 2009-06-05 14:27:24
Summary:
Total number of files: 36407
Added files: 0
Removed files: 0
Changed files: 2
—————————————————
Changed files:
—————————————————
changed: /bin
changed: /bin/cp
————————————————–
Detailed information about changes:
—————————————————
Directory: /bin
Mtime : 2009-06-04 10:35:46 , 2009-06-05 14:16:09
Ctime : 2009-06-04 10:35:46 , 2009-06-05 14:16:09
File: /bin/cp
Mtime : 2009-05-26 15:04:55 , 2009-06-05 14:16:30
Ctime : 2009-05-26 15:04:59 , 2009-06-05 14:16:30
В результате мы увидели что в системе с последнего раза произошло изменение утилиты cp, а также в какое время, так что если в это время вы не производили обновление системы, стоит задуматься, почему изменился файл.
Ежедневно в файловой системе происходят изменение , но все изменения происходят как правилр в домашней директории пользователей, а системные утилиты вроде cp никогда не должны изменяться (только если при обновлении всей системы). Если же вы проводите крупное изменение в система – рекомендуем обновить после это и базу aide, чтобы она не смущала вас лишними предупреждениями.
# aide -u
Вывести названия из-под проверки можно, добавив префикс !. Например, правило !/.*/BACKUP исключит все директории BACKUP, независимо от расположения в файловой системе. Особо отмечу, что .* в этом примере – регулярное выражение, а не маска имени файла.
Работа удобно производить по ежедневному заданию крона, для этого нужно распаковать файл /usr/share/doc/aide-0.13.1-r3/aide.cron.bz2 в /etc/cron.daily/ и сделать его запускаемым.
В этом фале нас интересует переменная MAILTO= в которой ва можете указать почтовый адрес на который будут присылаться отчеты.
На последок хотелось бы заметить, что если злоумышленник получит полный доступ к системе, он без проблем сможет обновить после себя снимок системы, так что вы не увидите никаких изменений, так что можно порекомендовать держать базу на носителе доступном только для чтения (к примеру сd-r болванка).