Аудит системных событий в Linux
Jun 6, 2016 12:41 · 389 words · 2 minute read
Чтобы ОС отвечала требованиям безопасности и стабильности нужно неотрывно следить за ее состоянием — этого можно достичь с помощью систем мониторинга и анализа логов.
Но порой все же нельзя обойтись без аудита системных событий — постоянного и подробного протоколирования действий, происходящих в операционной системе. Давайте разберемся!
В интернете доступно множество инструкций по установке, настройке и использованию системы аудита (раз, два и т.д.), поэтому в эту тему углубляться не будем, а рассмотрим конкретный пример.
Возникла необходимость с помощью системного аудита узнать подробности вызова процесса 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)