Аудит системных событий в Linux

Jun 6, 2016 12:41 · 389 words · 2 minute read auditd

Чтобы ОС отвечала требованиям безопасности и стабильности нужно неотрывно следить за ее состоянием — этого можно достичь с помощью систем мониторинга и анализа логов.

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

В интернете доступно множество инструкций по установке, настройке и использованию системы аудита (раз, два и т.д.), поэтому в эту тему углубляться не будем, а рассмотрим конкретный пример.

Возникла необходимость с помощью системного аудита узнать подробности вызова процесса gs (с какими параметрами запускается, какой процесс запускает, как завершается и т.д.) .

Устанавливаем демон auditd и вспомогательные утилиты:

apt-get install 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

Перезапускаем демон для применения изменений:

/etc/init.d/auditd restart

Для просмотра журнальных файлов, созданных демоном 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)
tweet Share