Использование audit
Основные понятия
Аудит отслеживает изменения в системе и генерирует журналы для анализа безопасности
Пакет содержит несколько инструментов:
audit - компонент пользовательского пространства который отвечает за запись аудита на диск
ausearch - утилита для поиска определенных событий в журнале демона
aureport - пользовательский компонент, создает отчеты по логам адита
audictl - утилита для управления демоном auditd
autrace - утилита для аудита событий
#Установка
apk add audit
cp -a /usr/sbin/auditctl /sbin/auditctl
#Запрос состояния
rc-service auditd status
#Добавить в автозапуск
rc-update add auditd
#Перезапустить
/etc/init.d/auditd restart
#Краткий вывод информации о всех системных вызовах
aureport -s
#Все попытки входа в систему
aureport -au
#Фильтрация по дате и времени
aureport -s --start 07/31/15 12:00 --end 07/31/15 13:00
#now — текущий момент;
#yesterday — вчерашнее сутки;
#this-week (или this-month, this-year) — текущая неделя (месяц, год).
#recent — 10 минут назад;
#
#Информация о действиях конкретного пользователя в системе
ausearch -ui 1002 --interpret
#
#Выод события, который относится к конкретному системному вызову ( open, read, write, close, wait, exec, fork, exit, kill и др. )
ausearch -sc close
#
#Поиск конкретного демона
ausearch -x -tm cron
#
#Поиск конкретных событий по названию
auditctl -k name-action
#
#Список событий который завершились неудачно можно с помощью опции --failed
#Допустим необходимо отследить процесс date
autrace /bin/date
autrace /bin/date
Waiting to execute: /bin/date
Sun Nov 5 21:35:24 MSK 2023
Cleaning up...
Trace complete. You can locate the records with 'ausearch -i -p 3936'
Конфигурационный файл
log_file — файл, в котором будут храниться логи
log_format — формат для логов
freq — максимальное число записей, которые могут храниться в буфере
flush — режим синхронизации буфера с диском
max_log_file — максимальный размер лога
max_log_file_action — действие при превышении максимального размера лога
space_left — минимум свободного пространства, по достижении которого должно быть осуществлено действие
space_left_admin — определяет действие, когда на диске недостаточно свободного места (ignore — ничего не делать; syslog — отправлять в syslog, email — отправлять уведомление на почту; suspend — остановить запись логов на диск; single — однопользовательский режим; halt — выключить машину)
disk_full_action — действие при переполнении диска
Настройка правил аудита
Control rules - изменяют поведение системы аудита
File system rules - аудит доступа к определенному файлу и каталогу, позволяет узнать пользоватея, который редактировал файлы в linux
System call rules - записывает в журнал системные вызовы определенной программы
Писать правила лучше от частного к общему, выше стоит размещать то правило, которое важнее учитывать
Правила можно настроить с помощью команды auditctl
Правило создается по формату:
auditctl -a <список>, <действие> -S <имя системного вызова> -F <фильтры>
a - список в который нужно добавить правило
task — события, связанные с созданием новых процессов;
entry — события, которые имеют место при входе в системный вызов;
exit — события, которые имеют место при выходе из системного вызова;
user — события, использующие параметры пользовательского пространства;
exclude — используется для исключения событий.
Далее выбирается действие, always - события записываются в журнал и never - не записывать
-S - имя системного вызова
F - дополнительные параметры фильтрации
Еще один пример формата для создания правил:
auditctl -w path_to_file -p access_permissions -k filter_key
w - путь к объекту файловой системы за которым следует вести наблюдение
p - разрешение доступа к объекту ( r - чтение, w - запись, x - выполнение, a - изменение атрибутов )
k - строка которая будет записываться в журнал аудита
Правила хранятся в файлах /etc/audit/audit.rules и /etc/audit/rules.d/*.rules Рекомендуется выставить группу файла root и права 600, чтобы никто кроме root не имел доступ к auditd
Правила в файле /etc/audit/audit.rules создаются на основе правил, определенных в каталоге /etc/audit/rules.d/
После добавления правил необходимо перечитать конфигурацию перезапуском сервиса
Синтаксис
-D - удалить все правила
-d - удалить правило из списка
-a список,действие - добавить правило в конец списка с действием
- exit - добавить правило, которое отвечает за точки выхода из системных вызовов
- exclude - отвечает за фильтрацию определенных событий
- always - установить контекст аудита
- never - не генерировать каких либо записей
- -A list,action - добавить правило в начало списка
- -F [n=v | n!=v | n
v | n<=v | n>=v | n&v | n&=v] - задать поле сравнения для файла, аудит будет генерировать запись, если произошло совпадение
- a0, a1, a2, a3 - первые четыре аргумента системного вызова
- arch - указывает архитектуру правила
- auid - id пользователя с которым он вошел в систему, системные сервисы как правило имеют auid=-1 (или 4294967295);
- dir - директория за которой необходимо наблюдать
- euid - действительный идентификатор пользователя
- exe - полный путь к исполняемому файлу
- exit - значение возвращаемое системным вызовом при выходе
- key - имя события
- msgtype - тип события
- path - полный путь к отслеживаемому файлу
- perm или -p - [r|w|x|a] - описывает разрешения к файлу
- success - значение возвращаемое системным вызовом
- -w - устанавливает наблюдение за отслеживаемой директорией или файлом
- -W - отменяет наблюдение указанного файла или директории
Примеры создания правил
#Создать правило
auditctl -w /etc/ssh/sshd_config -p wax -k access_to_file_sshd_config
#Теперь внесем изменения в файл sshd_config
echo "AllowUsers itsecforu root" | sudo tee -a /etc/ssh/sshd_config
#Просмотр журнала
#Отключить созданное правило
auditctl -W /etc/ssh/sshd_config -p wax -k access_to_file_sshd_config
#Добавить правило в автозапуск
echo "-w /etc/ssh/sshd_config -p wxa -k access_to_file_sshd_config" > /etc/audit/rules.d/sshd.rules
#Проверить изменения конфигурации
augenrules --check
#Загрузить созданные правила, данная команда обновит файл /etc/audit/audit.rules
augenrules --load
#Просмотр созданных правил
auditctl -l
#Просмотр журнала audit
less /var/log/audit/audit.log
#Или так
grep --color access_to_file_sshd_config /var/log/audit/audit.log
#Создание отчета по журналу audit
aureport -i -k
#Поиск в логах audit по названию правила
ausearch -i -k access_to_file_sshd_config
опция -i преобразует формат времени APOCH в привычный формат даты и времени
При необходимости можно преобразовать формат APOCH
#Например вывод msg=audit(1699115152.701:8)
date -d @1699115152
Sat Nov 4 19:25:52 MSK 2023
В отчете можно увидеть следующие типы записей
type=PROCTITLE - команда которая вызвала событие аудита
msg=audit(11/04/23 19:25:44.257:7) - время события
type=PATH - путь к файлу или каталогу, который передан системному вызову в качестве аргумента
item=1: поле item указывает, какой элемент из общего числа элементов, на которые ссылается запись типа SYSCALL
name=/etc/ssh/sshd_config - путь к файлу или каталогу, который передан системному вызову в качестве аргумента
inode=134508198: номер inode, связанный с файлом или каталогом, записанным в этом событии.
#Следующая команда покажет путь к каталогу сходя из значения поля inode
find / -inum 134508198 -print
/etc/ssh/sshd_config
dev=08:03 - содержит минорный и мажорный идентификатор устройства
mode=dir - содержит права на отслеживаемый файл
ouid=root - содержит идентификатор группы
rdev=00:00 - содержит записанный идентификатор устройства ( только для специальных файлов )
nametype=NORMAL -
cap_fp=none -
cap_fi=none -
cap_fe=0 -
cap_fver=0 -
cap_frootid=0 -
type=CWD - записывает рабочик каталог из которого выполнялся процесс вызвавший системный вызов
type=SYSCALL - указывает на то, что запись была вызвана системным вызовом ядра
cwd="/etc/audit/rules.d" - каталог в котором был вызван системный вызов
type=SYSCALL - указывает что запись была вызвана системным вызовом ядра
syscall=openat - В поле syscall записывается тип системного вызова, который был послан ядру
success=yes - был ли системный вызов успешным
exit=3 - код завершения системного вызова
a0=3 a1=81a4 a2=7ffce5151770 a3=0 - в подобных полях зашифрованы в 16-м формате аргументы системного вызова
items=1 - кол-во вспомогательных записей PATH
ppid=3403 pid=5747 - идентификаторы родительского и основного процесса
auid=429496729 - идентификатор пользователя аудита ( loginuid ). Этот идентификатор присваивается пользователю при входе в систему и наследуется каждым процессом, даже если пользователь меняется при смене учетной записи
uid=0 - идентификатор пользователя, который запустил анализируемый процесс
#Поиск записей в журнале, по идентификатору пользователя, который запустил анализируемый процесс
ausearch -i --uid 0
gid=0 - идентификатор группы пользователя, который запустил анализируемый процесс.
euid=0 - эффективный идентификатор пользователя, запустившего анализируемый процесс
suid=0 - установленный идентификатор пользователя, запустившего анализируемый процесс
fsuid=0 - идентификатор пользователя файловой системы пользователя, запустившего анализируемый процесс
egid=0 - идентификатор эффективной группы пользователя, запустившего анализируемый процесс
sgid=0 - идентификатор установленной группы пользователя, запустившего анализируемый процесс
fsgid=0 - идентификатор группы файловой системы пользователя, запустившего анализируемый процесс
tty=pts0 - терминал, с которого был вызван анализируемый процесс
ses=4294967295 - идентификатор сессии, из которой был вызван анализируемый процесс
comm="vim" - команда которая была использована для вызова анализируемого процесса
exe="/usr/bin/vim" - путь к исполняемому файлу, который был использован для вызова анализируемого процесса
key="access_to_file_sshd_config - строка, связанная с правилом или название правила
ARCH=x86_64 SYSCALL=rename AUID="unset" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
Обнаружение взлома, примеры использования
Основные файлы, каталоги или действия которые необходимо отслеживать при взломе:
1. Директории с исполняемыми файлами: /bin/ или /usr/bin/ и т.д.
2. Планировщик заданий
3. Выполнение команд через системные вызовы
4. Изменение файлов /etc/shadow, /etc/passwd, /etc/sudoers, /etc/ssh/sshd_config и т.д.
5. Работа с сетью и изменение сетевых настроек
6. Операции с диском и файловой системой
7. Управление пользователями
8. Установка и обновление пакетов
9. Запуск и завершение работы системы
Данные события не могут произойти без системных вызовов. Auditd отслеживает системные вызовы
Auditd пропускает системные вызовы через один из фильтров: user, task, exit, далее системные вызовы пропускаются через фильтр exclude и передаются демону auditd
Несколько примеров:
#Логировать действия пользователя www-data к исполняемым и конфигурационным файлам
-w /bin -F uid=www-data -k user-www-data
-w /usr/local/sbin -F uid=www-data -k user-www-data
-w /usr/local/bin -F uid=www-data -k user-www-data
-w /usr/sbin -F uid=www-data -k user-www-data
-w /usr/bin -F uid=www-data -k user-www-data
-w /sbin -F uid=www-data -k user-www-data
-w /etc -F uid=www-data -k user-www-data
#
#
#Логировать действия для пользователя www-data везде, кроме dir=/var/www/
-a never,exit -F dir=/var/www/ -F uid=www-data
-w / -F uid=www-data -k user-www-data
#
#
#Логировать изменение файлов в директории /var/www, действия пользователя во всех каталогах, исключить некоторые каталоги
-w /var/www/ -p wa -F uid=www-data -k change-www
-a never,exit -F dir=/usr/share/zoneinfo/ -F uid=www-data
-a never,exit -F dir=/var/www/ -F uid=www-data
-w / -F uid=www-data -k access-www-data
Другие полезные примеры можно найти здесь
Пакет аудит также может хранить в себе несколько полезных примеров в директории /usr/share/doc/auditd/examples/rules
#Логирование действий в самом инструменте auditd
-w /etc/audit/ -p wa -k audit-change1
-w /etc/audisp/ -p wa -k audit-change2
-w /sbin/auditctl -p x -k audit-change3
-w /sbin/auditd -p x -k audit-change4
-w /usr/sbin/augenrules -p x -k audit-change5
-w /var/log/audit/ -k audit-change6
#
#Запись или изменение файлов планировщика задач
-w /etc/cron -p wa -k cron_change
-w /etc/crontab -p wa -k cron_change
-w /etc/cron.allow -p wa -k cron_change
-w /etc/cron.d -p wa -k cron_change
-w /etc/cron.deny -p wa -k cron_change
-w /etc/cron.daily -p wa -k cron_change
-w /etc/cron.hourly -p wa -k cron_change
-w /etc/cron.monthly -p wa -k cron_change
-w /etc/cron.weekly -p wa -k cron_change
-w /etc/anacrontab -p wa -k cron_change
-w /var/spool/cron -p wa -k cron_change
-w /var/spool/cron/crontabs/root -p wa -k cron_change
#
#Выполнение команды sudo всеми пользователями кроме megauser
-w /usr/bin/sudo -F auid!=megauser -k usage-sudo
#
#Использование сетевых утилит
-w /sbin/iptables -p x -k usage-net
-w /sbin/ip6tables -p x -k usage-net
-w /sbin/ifconfig -p x -k usage-net
-w /usr/sbin/arptables -p x -k usage-net
-w /usr/sbin/ebtables -p x -k usage-net
-w /sbin/xtables-nft-multi -p x -k usage-net
-w /usr/sbin/nft -p x -k usage-net
#
#Управление пользователями
-w /etc/group -p wa -k usage-group
-w /etc/passwd -p wa -k change-passwd
-w /etc/gshadow -k usage-gshadow
-w /etc/shadow -k change-passwd
-w /etc/security/opasswd -k change-passwd
-w /etc/adduser.conf -k change-adduser
#
-w /etc/sudoers -p wa -k change-sudo
#
-w /usr/bin/passwd -p x -k passwd_change
-w /usr/bin/gpasswd -p x -k gpasswd_change
#
-w /usr/sbin/groupadd -p x -k group_change
-w /usr/sbin/groupmod -p x -k group_change
-w /usr/sbin/addgroup -p x -k group_change
-w /usr/sbin/useradd -p x -k user_change
-w /usr/sbin/usermod -p x -k user_change
-w /usr/sbin/adduser -p x -k user_change
#
-w /etc/login.defs -p wa -k login-user
-w /etc/securetty -p wa -k login-user
-w /var/log/faillog -p wa -k login-user
-w /var/log/lastlog -p wa -k login-user
-w /var/log/tallylog -p wa -k login-user
#
#Отслеживать системные вызовы unlink () и rmdir()
-a exit,always -S unlink -S rmdir
#
## отслеживать системные вызовы open от пользователя с UID 1002
-a exit,always -S open -F loginuid=1002
# отслеживать доступ к файлам паролей и групп и попытки их изменения:
-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow -p wa
-w /etc/sudoers -p wa
#
# отслеживать доступ к следующей директории:
-w /etc/test_directory -p r
# Предотвратить изменения
-e 2
#
Источники
Связанные темы
Использование модуля pg_stat_statements в postgresql
Поиск уязвимостей и следов взлома в Linux
Управление планировщиком в Postgresql
Базовые понятие о настройках и безопасности в сети
Системные каталоги в Postgresql
Саздание сертификатов SSL (TLS) для сайта
Мониторинг событий в linux с помощью auditd
Использование fail2ban в Linux