Задача: настроить Security event auditing на FreeBSD. Хочется, к примеру, отслеживать действия пользователей во всех подробностях. Разумеется, безопасности ради и спокойствия для. Если мы счастливые обладатели FreeBSD >= 7.0, — поддержка аудита в ядре включена по умолчанию. Если же нет — отправляемся на перекомпиляцию ядра с опцией options AUDIT.
Итак, для начала стоит разрешить запуск демона аудита в rc.conf: добавляем в этот файл:
auditd_enable=»YES»
Теперь auditd можно запускать вручную, либо просто перезагрузиться. Но спешить не стоит, следует для начала разобраться с файлами конфигурации, которые находятся в папке /etc/security. В файлах audit_event и audit_class — прописаны классы и соответствия классов определенным событиям, трогать их без крайней необходимости не стоит. Основной интерес для нас представляют файлы
audit_control и audit_user. В первом содержатся следующие основные настройки и параметры аудита:
dir:path — директория, где будут храниться логи аудита в бинарном виде.
flags:список_флагов_через_запятую – список событий, которые требуется фиксировать. Вот список событий, содержащихся в файле audit_class:
all – all – Соответствует всем классам событий.
ad - administrative – Аудит административных действий, произошедших в системе.
ap – application – Аудит события, вызванного каким-либо приложением.
cl – file_close – Аудит вызовов системной функции close.
ex – exec – Аудит запуска приложения. Аудит аргументов командной строки и переменных окружения контролируется через audit_control, используя параметры argv и envv в опции policy.
fa – file_attr_acc – Аудит доступа к атрибутам объектов и их изменению, например через stat, pathconf, а также подобных этим событий.
fc – file_creation – Аудит событий, в результате которых создаются файлы.
fd – file_deletion – Аудит событий, в результате которых удаляются файлы.
fm – file_attr_mod – Аудит событий, в результате которых изменяются атрибуты файлов, например, chown, chflags, flock.
fr – file_read – Аудит событий, в результате которых происходит чтение данных, открываются файлы на чтение и т.п.
fw – file_write – - Аудит событий, в результате которых происходит запись данных, изменение файлов и так далее.
io – ioctl – Аудит вызовов системной функции ioctl.
ip – ipc – Аудит различных видов взаимодействия процессов, включая создание не-именованных каналов (pipe) и взаимодействие процессов в стиле System V IPC.
lo – login_logout – Аудит событий login и logout.
na – non_attrib – Аудит не-приписываемых событий.
no – no_class – Пустой класс, используется для отключения аудита.
nt – network – Аудит событий, связанных с сетевыми подключениями, например connect и accept.
ot – other – Аудит событий, не вошедших в другие классы.
pc – process – Аудит действий процессов, таких как exec и exit.
minfree:% — минимальное количество свободного места в %, при котором будет вестись аудит.
naflags:список_флагов_через_запятую — определяет классы аудита для не-приписываемых событий, то есть событий, для которых не определён конкретный пользователь.
policy:параметр — различные параметры аудита.
filesz:bytes — максимальный размер единичного файла аудита в байтах, при достижении которого будет создан новый файл.
Файл audit_user служит для индивидуальной настройки параметров аудита для определенных пользователей. В файл можно добавлять строки вида:
username:события_которые_будут_записываться:события_которые_не_будут_записываться.
Теперь разберем на конкретном примере. Итак исходные условия:
Требуется записывать для всех пользователей (включая root) все административные события, создание, модификацию, удаление файлов, вход-выход пользователей, запуск программ с параметрами в определенную дирректорию, единичный файл аудита не должен превышать размер ~1 гб, а свободное пространство на диске не должно быть менее 40%. Тогда файл audit_control будет выглядеть следующим образом:
dir:/our_directory/audit
flags:ad,ex,fc,fd,fw,lo
minfree:40
naflags:ad,ex,fc,fd,fw,lo
policy:cnt,argv,arge
filesz:1073741824
В данном случае значение параметров policy будет означать:
cnt — позволяет выполняться процессу, даже если события не могут быть записаны.
argv — записывает параметры запущенных приложений.
arge — записывает переменные окружения, переданные в качестве аргумента программе.
В файле audit_user — необходимо убрать стандартную запись, запрещающую запись всех событий пользователя root, кроме lo, и прописать те же параметры, что и в audit_control:
root:ad,ex,fc,fd,fw,lo:no
Теперь, наконец, можно запускать демон аудита:
/etc/rc.d/auditd start
Если все сделано верно — демон начнет писать требуемые события в указанный нами файл.
Т.к. логи пишутся в бинарном формате — их необходимо выгружать при помощи утилиты praudit в читабельный формат:
praudit /файл_с_логом >> /читаемый_файл
Чтобы не выгружать все логи — можно воспользоваться утилитой auditreduce, сократив вывод до определенных событий, например так(в данном примере будут выведены события типа ex — выполнение программ):
auditreduce -c ex /log/file | praudit >> /путь_к_файлу_куда_сложить_лог