Аудит системных вызовов в Linux
Конфигурационный файл auditd /etc/audit/auditd.conf. На каждой строке может быть определена не более чем одна директива. Название директы и значение разделяет знак равно. Большинство директив отвечают за настройку логирования и не требуют изменения. Для подробного ознакомления можно почитать man auditd.conf.
Правила аудита
Правила аудита содержатся в файле /etc/audit/audit.rules.
auditctl -l просмотреть список правил и auditctl -D для удаления всех правил
Аудит доступа к файлам
File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 16.01.2011 22:42:04 /sys/class/video4linux/video0/dev 5 yes /usr/bin/skype -1 23
2. 16.01.2011 22:42:03 /sys/devices/system/cpu 5 yes /usr/bin/skype -1 22
3. 16.01.2011 22:42:04 /sys/class/video4linux/video0/device/modalias 5 yes /usr/bin/skype -1 24
4. 16.01.2011 22:42:04 /sys/class/dmi/id/sys_vendor 5 yes /usr/bin/skype -1 25
5. 16.01.2011 22:42:04 /sys/class/dmi/id/product_name 5 yes /usr/bin/skype -1 26
6. 16.01.2011 22:42:04 /sys/class/dmi/id/product_version 5 yes /usr/bin/skype -1 27
7. 16.01.2011 22:42:04 /sys/class/dmi/id/board_vendor 5 yes /usr/bin/skype -1 28
8. 16.01.2011 22:42:04 /sys/class/dmi/id/board_name 5 yes /usr/bin/skype -1 29
9. 16.01.2011 22:42:04 /sys/class/dmi/id/board_version 5 yes /usr/bin/skype -1 30
Аудит системных вызовов
- -a list,action и -A list,action добавляет правило action в конец(-A в начало) списка list. О доступных list можно прочитать в man auditctl. actions never не генерирует событие, а always создает событие.
- -S [Syscall name or number|all] — наблюдаемые вызовы
- -F [n=v | n!=v | nv | n=v | n&v | n&=v] всевозможные фильтры
Основы аудита. Настраиваем журналирование важных событий в Linux
Подсистема аудита Linux позволяет на основе предварительно настроенных правил отслеживать значимую информацию о безопасности операционной системы, создает записи журнала для дальнейшего расследования нарушений политики. Сегодня мы посмотрим поближе на этот важный и для хакера, и для админа элемент системы безопасности.
С помощью аудита можно реализовать журналирование для следующих событий:
- доступ к объектам файловой системы;
- выполнение системных вызовов;
- запуск пользовательских команд;
- логины пользователей;
- действия с учетными записями и привилегиями.
В этой статье я расскажу, как устроена подсистема аудита, как ей управлять, а также как получить журнал аудита всех интересующих тебя событий.
Подсистема аудита в Linux состоит из двух групп компонентов: в пространстве ядра это kauditd, а в пользовательском — auditd.
В общем виде схема работы подсистемы аудита выглядит следующим образом.
Ядро, принимая системные вызовы из user space, пропускает их через фильтры user , task , filesystem , exclude и exit .
- Фильтр user используется для фильтрации (исключения) событий, происходящих в пользовательском пространстве до отправки в auditd. Практически никогда не используется.
- Фильтр task применяется для системных вызовов fork( ) и clone( ) .
- Фильтр filesystem используется для исключения событий для конкретной файловой системы.
- Фильтр exclude задает исключения для событий.
- Фильтр exit проходят все системные вызовы. Обычно настраивают именно этот фильтр.
Через netlink( 7) сообщения отправляются из kauditd в auditd. При получении событий, демон auditd записывает их в лог (по умолчанию / var/ log/ audit/ audit. log ).
Настраивая фильтры с помощью утилиты auditctl, мы можем управлять потоком событий, который хотим получать. С помощью утилит ausearch, aureport, aulast удобно просматривать журнал аудита.
Давай теперь установим и настроим все подсистемы аудита. Установка крайне проста и не вызывает никаких сложностей:
Статус работы подсистемы аудита можно получить так:
$ sudo auditctl -s
enabled 1
failure 1
pid 885
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
loginuid_immutable 0 unlocked
Для теста есть возможность отправить текстовое сообщение в подсистему аудита и убедиться, что соответствующее событие попало в журнал аудита.
$ sudo auditctl -m helloaudit
$ sudo ausearch -m USER
—-
type=USER msg=audit(08/31/2021 19:20:11.160:330699) : pid=305708 uid=root auid=andrey ses=5 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg=’text=helloaudit exe=/usr/sbin/auditctl hostname=rhel.ipa.localdomain addr=? terminal=pts/0 res=success’
Настройки демона auditd представлены в файле / etc/ audit/ auditd. conf . Конфиг по умолчанию рабочий и не требует изменений, оставляем его как есть.
Разберемся теперь, как управлять фильтрами kauditd. Все настройки фильтров группируются в файлы правил. Формат правил аналогичен синтаксису консольной программы auditctl. Демон auditd загружает эти правила последовательно при старте системы либо вручную по команде пользователя.
info
Важный момент: чтобы наши правила применялись после перезагрузки, необходимо записать их в файл, в каталог / etc/ audit/ rules. d/ .
Примеры правил ты можешь найти в каталоге / usr/ share/ audit/ sample-rules/ . Правила аудита бывают следующих типов:
- Управляющие правила настраивают систему аудита и поведение агента. Все возможные опции перечислены в мане auditctl( 8) .
- Правила файловой системы необходимы для наблюдения за файлом или каталогом, доступ к которым мы хотим контролировать. Формат правила следующий:
Важно отметить, что правила системных вызовов значительно влияют на производительность системы в целом. Старайся сократить их количество и объединяй правила, где это возможно.
В качестве тренировки создадим правило аудита для регистрации изменения файла / etc/ passwd .
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Аудит системных событий в Linux
Jun 6, 2016 12:41 · 389 words · 2 minute read auditd
Чтобы ОС отвечала требованиям безопасности и стабильности нужно неотрывно следить за ее состоянием — этого можно достичь с помощью систем мониторинга и анализа логов.
Но порой все же нельзя обойтись без аудита системных событий — постоянного и подробного протоколирования действий, происходящих в операционной системе. Давайте разберемся!
В интернете доступно множество инструкций по установке, настройке и использованию системы аудита (раз, два и т.д.), поэтому в эту тему углубляться не будем, а рассмотрим конкретный пример.
Возникла необходимость с помощью системного аудита узнать подробности вызова процесса gs (с какими параметрами запускается, какой процесс запускает, как завершается и т.д.) .
Устанавливаем демон auditd и вспомогательные утилиты:
Посмотрим информацию о расположении файлов приложения gs :
whereis gs gs: /usr/bin/gs /usr/bin/X11/gs /usr/share/man/man1/gs.1.gz
В конфигурационный файл /etc/audit/audit.rules добавим следующее правило:
-a exit,always -F arch=b64 -S all -F path=/usr/bin/gs
Перезапускаем демон для применения изменений:
Для просмотра журнальных файлов, созданных демоном auditd будем использовать утилиту aureport . Для сокращения вывода будем запрашивать информацию только за определенный период времени (например 10 минут):
aureport -f --start recent File Report =============================================== # date time file syscall success exe auid event =============================================== 1. 05/11/2016 12:13:05 /usr/bin/gs 59 yes /usr/bin/gs -1 3020
Зная номер события (последнее число в предыдущем выводе команды), можно его проанализировать более детально:
ausearch -a 3020 ---- time->Wed May 11 12:13:05 2016 type=PATH msg=audit(1462957985.049:3020): item=1 name=(null) inode=811245 dev=08:02 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=PATH msg=audit(1462957985.049:3020): item=0 name="/usr/bin/gs" inode=889571 dev=08:02 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1462957985.049:3020): cwd="/var/www/work-utf" type=EXECVE msg=audit(1462957985.049:3020): argc=17 a0="gs" a1="-q" a2="-dQUIET" a3="-dSAFER" a4="-dBATCH" a5="-dNOPAUSE" a6="-dNOPROMPT" a7="-dMaxBitmap=500000000" a8="-dAlignToPixels=0" a9="-dGridFitTT=2" a10="-sDEVICE=pngalpha" a11="-dTextAlphaBits=4" a12="-dGraphicsAlphaBits=4" a13="-r300x300" a14="-sOutputFile=/tmp/magick-mxX1zRa2-%08d" a15="-f/tmp/magick-NjsmJhEA" a16="-f/tmp/magick-CDT6PCa9" type=SYSCALL msg=audit(1462957985.049:3020): arch=c000003e syscall=59 success=yes exit=0 a0=7fff414c9094 a1=7fc6c1050a88 a2=7fff414d9578 a3=7fc6be0dd240 items=2 ppid=23481 pid=4367 auid=4294967295 uid=33 gid=33 euid=33 suid=33 fsuid=33 egid=33 sgid=33 fsgid=33 tty=(none) ses=4294967295 comm="gs" exe="/usr/bin/gs" key=(null)
Примечание. Типы системных вызовов можно узнать здесь.
Вывести информацию в человекочитаемой форме можно при помощи опции -i или −−interpret , например:
ausearch -a 3020 -i ---- type=PATH msg=audit(05/11/2016 12:13:05.049:3020) : item=1 name=(null) inode=811245 dev=08:02 mode=file,755 ouid=root ogid=root rdev=00:00 type=PATH msg=audit(05/11/2016 12:13:05.049:3020) : item=0 name=/usr/bin/gs inode=889571 dev=08:02 mode=file,755 ouid=root ogid=root rdev=00:00 type=CWD msg=audit(05/11/2016 12:13:05.049:3020) : cwd=/var/www/work-utf type=EXECVE msg=audit(05/11/2016 12:13:05.049:3020) : argc= a0=gs a1=-q a2=-dQUIET a3=-dSAFER a4=-dBATCH a5=-dNOPAUSE a6=-dNOPROMPT a7=-dMaxBitmap=500000000 a8=-dAlignToPixels=0 a9=-dGridFitTT=2 a10=-sDEVICE=pngalpha a11=-dTextAlphaBits=4 a12=-dGraphicsAlphaBits=4 a13=-r300x300 a14=-sOutputFile=/tmp/magick-mxX1zRa2-%08d a15=-f/tmp/magick-NjsmJhEA a16=-f/tmp/magick-CDT6PCa9 type=SYSCALL msg=audit(05/11/2016 12:13:05.049:3020) : arch=x86_64 syscall=execve success=yes exit=0 a0=7fff414c9094 a1=7fc6c1050a88 a2=7fff414d9578 a3=7fc6be0dd240 items=2 ppid=23481 pid=4367 auid=unset uid=www-data gid=www-data euid=www-data suid=www-data fsuid=www-data egid=www-data sgid=www-data fsgid=www-data tty=(none) ses=4294967295 comm=gs exe=/usr/bin/gs key=(null)
Read more
© Copyright 2023 Yevhen Lebid