Перейти к содержанию

FreeBSD

Общие данные

Платформа Радар поддерживает сбор событий со следующих версий операционной системы:

  • FreeBSD 14.0-RELEASE;
  • FreeBSD 13.2-RELEASE.

Для журналирования событий используются следующие службы:

  • syslog-ng - служба журналирования для отправки событий в платформу;
  • auditd - отвечает за запись сообщений аудита вызванных активностью приложений или системы.

Примечание: по умолчанию управление журналами в ОС FreeBSD осуществляется службой syslogd. Отправка логов этой службой возможна только по протоколу UDP.

В целях организации безопасной передачи данных на агент сбора лог-коллектора по протоколу TCP, а также обеспечения возможности фильтрации сообщений по источникам и их содержимому предлагается установить пакет syslog-ng (см. раздел Настройка службы syslog-ng).

Характеристики источника в Платформе Радар:

Характеристика Значение
Название FreeBSD
Номер (Порт) 2722
Вендор The-FreeBSD-Project
Тип OS
Профиль сбора tcp_input

Настройка источника включает в себя следующие процессы:

  1. Настройка службы syslog-ng.
  2. Настройка службы auditd.
  3. Включение источника на платформе.

Настройка службы syslog-ng

Установите службу  syslog-ng:

pkg install syslog-ng

Включите службу syslog-ng в системном конфигурационном файле /etc/rc.conf:

syslog_ng_enable="YES"

Добавьте в конфигурационный файл службы /usr/local/etc/syslog-ng.conf следующие строки:

destination lc_net { tcp("<ip-адрес агента сбора лог-коллектора>" port log_fifo_size(1000)); };

filter f_devd { not match("devd" value(PROGRAM)); };

log { source(src); filter(f_devd); destination(lc_net); };        

Где:

  • src - источник сообщений syslog, по умолчанию описан в первых строках конфигурационном файла /usr/local/etc/syslog-ng.conf;
  • lc_net - удаленный хост, на который будут отправляться сообщения;
  • <ip-адрес агента сбора лог-коллектора> - IP-адрес агента сбора лог-коллектора;
  • port - порт, по которому агент сбора лог-коллектора будет принимать события. Должен совпадать со значением, указанным в настройках соответствующего профиля сбора.;
  • f_devd - фильтр, запрещающий отправку сообщений от процесса devd на агент сбора лог-коллектора;
  • value(PROGRAM) - указывает на то, что devd является процессом. Также можно использовать значение MESSAGE.

Примечание: более подробное описание настройки syslog-ng приведено в разделе ОС семейства Unix. Также можно настроить исключение из логирования любых сообщений, в том числе с помощью регулярных выражений.

Перезапустите службу syslog-ng:

service syslog-ng restart && pgrep syslog

Настройка службы auditd

Запустите службу auditd. Для этого:

  • включите службу в конфигурационном файле /etc/rc.conf
auditd_enable="YES"
  • выполните команду:
# service auditd start && pgrep auditd

Конфигурационные файлы auditd расположены в директории /etc/security:

audit_class     audit_control~      audit_user      audit_warn      auditdistd.conf~
audit_control       audit_event     audit_user~     auditdistd.conf

Примечание: рекомендуется вносить изменения только в следующие конфигурационные файлы: /etc/security/audit_control и /etc/security/audit_user. Подробнее в руководстве auditd для FreeBSD.

Настройте конфигурационный файл/etc/security/audit_control следующим образом:

# $FreeBSD$
#
dir:/var/audit
dist:off
flags:lo,aa,ad,ap
minfree:5
naflags:lo,aa
policy:cnt,argv
filesz:2M
expire-after:10M

Где:

  • dir - директория, в которой будут храниться файлы;
  • dist - если установлена в on или yes, то в директории /var/audit/dist будут создаваться жесткие ссылки на журналы auditd;
  • flags - указывает, какие события будут логироваться (подробный список флагов см. по ссылке);
  • minfree - минимальный процент свободного места на диске, на который сохраняются журналы auditd;
  • naflags - дополнительные флаги для событий, которые лишены атрибутов;
  • policy - политика обработки флагов и осуществления аудита;
  • filesz - максимальный размер файла аудита, после которого срабатывает ротация;
  • expire-after - размер, по достижении которого файлы аудита удаляются.

Настройте конфигурационный файл/etc/security/audit_user следующим образом:`

root:lo,ad:no
user:-fc,ad:+fw

Где:

  • укажите имя пользователя;
  • через двоеточие укажите действия, подлежащие аудиту;
  • после следующего двоеточия укажите события пользователя, которые не подлежат аудиту. Если в этой секции указано no, то аудиту подлежат все события.

В данном примере для пользователя user фиксируются неудачные попытки создания файлов и все административные события. Успешные попытки чтения файлов для этого пользователя не фиксируются. Конфигурационный файл/etc/security/audit_user описан по ссылке.

Служба auditd размещает журналы в директории /var/audit. Содержимое этих файлов зашифровано. Пример содержимого диреrтории:

-r--r-----  1 root        audit   276K Nov 29 14:40 20231129112729.20231129114034
-r--r-----  1 root        audit    57K Nov 29 14:48 20231129114118.20231129114856
-r--r-----  1 root        audit   428K Nov 29 15:03 20231129114939.20231129120354
-r--r-----  1 root        audit   191K Nov 29 15:11 20231129120446.20231129121153
-r--r-----  1 root        audit   118K Nov 29 15:21 20231129121240.20231129122152
-r--r-----  1 root        audit   190K Nov 29 15:29 20231129122235.20231129122958
-r--r-----  1 root        audit   102K Nov 29 16:46 20231129123040.not_terminated
lrwxr-xr-x  1 root        audit    40B Nov 29 15:30 current@ -> /var/audit/20231129123040.not_terminated

Где файл с расширением .not_terminated - это текущий журнал auditd.

Для расшифровки журналов используется утилита FreeBSD praudit:

# praudit -xl 20231129122235.20231129122958

Где:

  • x - параметр, формирующий сообщение в xml-формат;
  • l - параметр, формирующий вывод каждого события в одну строку.

Также все события auditd в реальном времени отправляются на устройство /dev/auditpipe.

Подготовьте скрипт автоматической передачи событий auditd в syslog-ng. Пример скрипта:

#!/bin/sh

## Подключите файл, содержащий системные функции, необходимые для запуска скрипта через rc
## https://man.freebsd.org/cgi/man.cgi?rc.subr(8)
. /etc/rc.subr

## Функция запуска расшифровки логирования auditd
audit2syslog_start()
{
    $COMMAND -xl /dev/auditpipe | logger ${audit2syslog_flags} &
}

## Функция останова логирования auditd
audit2syslog_stop()
{
    PID=`pgrep praudit`
    kill -s HUP $PID
}

## Объявите переменные
NAME=audit2syslog
RCVAR=audit2syslog_enable
COMMAND=/usr/sbin/praudit

START_CMD=${name}_start
STOP_CMD=${name}_stop

## Загрузите конфигурацию для audit2syslog из файла rc
load_rc_config $NAME

## Выполните команду rc
run_rc_command "$1"

Для активации скрипта в конфигурационный файл /etc/rc.conf добавьте следующие строки:

audit2syslog_enable="YES"
audit2syslog_flags="-t audit_trail -f"

Где в утилиту logger передаются следующие параметры:

  • t - устанавливает тег для сообщений;
  • f - направляет все события в syslog.

Далее события будут передаваться на агент сбора лог-коллектора посредством syslog-ng.

Пример лога ОС FreeBSD

<118>Nov  7 15:59:50 kernel: Nov  7 15:59:50 host-pgr-fbsd su[876]: ilya to root on /dev/pts/0
<37>Nov  7 15:59:50 su[876]: ilya to root on /dev/pts/0
<78>Nov  7 16:00:00 /usr/sbin/cron[884]: (root) CMD (/usr/libexec/atrun)
<78>Nov  7 16:00:00 /usr/sbin/cron[882]: (root) CMD (newsyslog)
<78>Nov  7 16:00:00 /usr/sbin/cron[883]: (operator) CMD (/usr/libexec/save-entropy)
<14>Nov  7 16:01:42 devd[473]: Processing event '!system=DEVFS subsystem=CDEV type=DESTROY cdev=pts/2'
<78>Nov  7 16:05:00 /usr/sbin/cron[906]: (root) CMD (/usr/libexec/atrun)

Пример лога auditd для ОС FreeBSD

<audit>                                                                                                                                                                   <record version="11" event="fcntl(2)" modifier="0" time=2023-11-20 12:39:12.000000 msec=" + 425 msec" ><argument arg-num="2" value="0x1" desc="cmd" /><argument arg-num="1" value="0x1" desc="non-file: fd" /><subject audit-uid="ilya" uid="root" gid="wheel" ruid="root" rgid="wheel" pid="9998" sid="9789" tid="48612 172.30.250.1" /><return errval="success" retval="1" /></record>                                                                                                                                          
<record version="11" event="fcntl(2)" modifier="0" time=2023-11-20 12:39:12.000000 msec=" + 425 msec" ><argument arg-num="2" value="0x3" desc="cmd" /><argument arg-num="1" value="0x3" desc="non-file: fd" /><subject audit-uid="ilya" uid="root" gid="wheel" ruid="root" rgid="wheel" pid="9998" sid="9789" tid="48612 172.30.250.1" /><return errval="success" retval="6" /></record>                                                                                                                                           │
<record version="11" event="fcntl(2)" modifier="0" time=2023-11-20 12:39:12.000000 msec=" + 425 msec" ><argument arg-num="2" value="0x1" desc="cmd" /><argument arg-num="1" value="0x1" desc="non-file: fd" /><subject audit-uid="ilya" uid="root" gid="wheel" ruid="root" rgid="wheel" pid="9998" sid="9789" tid="48612 172.30.250.1" /><return errval="success" retval="1" /></record>                                                                                                                                           │
<record version="11" event="fcntl(2)" modifier="0" time=2023-11-20 12:39:12.000000 msec=" + 425 msec" ><argument arg-num="2" value="0x3" desc="cmd" /><argument arg-num="1" value="0x3" desc="non-file: fd" /><subject audit-uid="ilya" uid="root" gid="wheel" ruid="root" rgid="wheel" pid="9998" sid="9789" tid="48612 172.30.250.1" /><return errval="success" retval="6" /></record>

<?xml version='1.0' ?>                                                                                                                                                    
<audit>                                                                                                                                                                   
</audit>    

Включение источника на платформе

Перейдите в веб-интерфейс платформы и включите источник FreeBSD.