Утилита auditd#

auditd запускает фоновый процесс, обеспечивающий функционирование системы аудита.

Система аудита позволяет отслеживать действия пользователей и процессов, а также изменения в файловой системе и системных настройках.

Для этого auditd в фоновом режиме осуществляет запись информации в журнал аудита, который может быть использован для расследования инцидентов безопасности, анализа производительности системы или отслеживания действий пользователей.

Синтаксис утилиты:

auditd [-f] [-l] [-n]

Часто используемые опции утилиты приведены в таблице ниже.

Опция

Описание

-f

Отключает работу в фоновом режиме и направляет сообщения в стандартный вывод для ошибок (stderr)

-l

Позволяет следовать по символическим ссылкам при поиске конфигурационных файлов

-n

Не создает дочерний процесс

При каждом запуске демон auditd осуществляет проверку целостности сообщений в журнале аудита /var/log/audit/audit.log. Для контроля целостности в конце каждой строки файла дописывается контрольная сумма в формате crc32=eca8fac8, состоящая из 8 символов. С целью предотвращения возможности удаления строк из журнала в каждую из них добавляется контрольная сумма предыдущей строки в виде prev_crc32=c77d2e02, которая должна совпадать с контрольной суммой в конце предыдущей строки.

Ввиду отсутствия контрольной суммы последней строки во время запуска, для первого сообщения от аудита контрольная сумма предыдущей строки указывается равной 0 (prev_crc32=00000000). Для устранения неопределенности, для строки, вычисленная сумма которой равна 0, данное значение увеличивается на 1. Таким образом, минимально возможная контрольная сумма для строки равна 1.

Если в результате проверки выявлено нарушение целостности сообщений аудита, то в отчете появится строка с типом события UNKNOWN[2430], где 2430 - номер события, UNKNOWN - значение, заменяющее строку описания.

Значения контрольных сумм хранятся в среде выполнения auditd.

Примечание

Удаление строк из начала или конца журнала (с перезапуском демона) не приведет к нарушению целостности, поскольку в первом случае отсутствует предыдущая строка для сравнения, а во втором демон не будет учитывать последнюю строку при запуске.

Проверьте работу системы контроля целостности сообщений:

  • Для проверки отсутствия ошибок при первом запуске системы:

    1. Запустите систему.

    2. Выведите записи журнала аудита:

      ausearch -ts today
      

      В выводе будут отображены сообщения обо всех событиях журнала аудита, произошедших с указанного момента времени. Подробнее про ausearch см. в «Утилита ausearch».

      Контрольные суммы, указанные как предыдущие (prev_crc32=...), должны совпадать с суммами предыдущих строк (crc32=...).

    3. Проверьте отсутствие нарушений целостности:

      ausearch -m unknown
      

      Вывод команды при отсутствии в журнале строк соответствующего типа событий, начинающихся с type=UNKNOWN[2430]:

      <no matches>
      

      Что в данном случае означает - нарушений целостности нет.

    После перезапуска демона выполнение пунктов 2 и 3 приводит к аналогичному результату, все события в системе регистрируются штатно. Проверкой может послужить остановка какой-либо службы с помощью команды:

    systemctl stop <service>
    

    Где <service> - служба, которую необходимо остановить. Подробнее про systemctl см. в «Утилита systemctl».

    Или выполнение, например, следующей команды:

    cat /etc/passwd
    

    Подробнее про cat см. в «Утилита cat».

    Выполнение каждой команды будет отражено в журнале аудита.

  • Для проверки отображения ошибок – нарушений целостности сообщений журнала аудита – измените какую-либо строку в журнале, после чего перезапустите демон. В результате в журнале появятся сообщения, подобные следующим:

    type=UNKNOWN[2430] msg=audit(1709742493.700:8521): 'Line "<line_with_a_violation_of_integrity>" failed the integrity check' UID="root" AUID="unset" prev_crc32=6b66ab17 crc32=c77d2e02
    type=UNKNOWN[2430] msg=audit(1709742493.700:8522): 'Line "<next_line_after_the_corrected_one>" failed the integrity check' prev_crc32=c77d2e02 crc32=eca8fac8
    

    Где:

    • <line_with_a_violation_of_integrity> - строка, целостность которой нарушена;

    • <next_line_after_the_corrected_one> - строка, следующая за исправленной.

    Строка, в которой целостность нарушена, будет выведена целиком. Также prev_crc32 сравнивается с контрольной суммой crc32 предыдущей строки. Нарушение целостности одной строки ведет к автоматической ошибке в следующей. Удаление строки аналогично приведет к ошибке в следующей за ней.

Примеры использования#

  • Чтобы обеспечить запуск из systemd или inittab, для которых не нужно создавать дочерний процесс, используйте команду:

    auditd -n
    
  • Чтобы запустить auditd в отладочном режиме, используйте команду:

    auditd -f