Использование 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 список,действие - добавить правило в конец списка с действием

    1. exit - добавить правило, которое отвечает за точки выхода из системных вызовов
    2. exclude - отвечает за фильтрацию определенных событий
    3. always - установить контекст аудита
    4. never - не генерировать каких либо записей
    5. -A list,action - добавить правило в начало списка
    6. -F [n=v | n!=v | nv | n<=v | n>=v | n&v | n&=v] - задать поле сравнения для файла, аудит будет генерировать запись, если произошло совпадение
    Поля сравнения
    1. a0, a1, a2, a3 - первые четыре аргумента системного вызова
    2. arch - указывает архитектуру правила
    3. auid - id пользователя с которым он вошел в систему, системные сервисы как правило имеют auid=-1 (или 4294967295);
    4. dir - директория за которой необходимо наблюдать
    5. euid - действительный идентификатор пользователя
    6. exe - полный путь к исполняемому файлу
    7. exit - значение возвращаемое системным вызовом при выходе
    8. key - имя события
    9. msgtype - тип события
    10. path - полный путь к отслеживаемому файлу
    11. perm или -p - [r|w|x|a] - описывает разрешения к файлу
    12. success - значение возвращаемое системным вызовом
    13. -w - устанавливает наблюдение за отслеживаемой директорией или файлом
    14. -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 #
    Источники
    Последнее изменение: 07.10.2024 19:02


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ