autrace
autrace – это утилита командной строки, которая запускает программу с правилами аудита, пока она не выполнится; autrace добавляет правила аудита для отслеживания процесса и сохраняет информацию в файле /var/www/audit/audit.log
.
Install
Утилита autrace входит в состав демона auditd, подробнее о работе с демоном в статье.
Для установки используем пакетный менеджер, например для Debian/Ubuntu:
apt install auditd audispd-plugins
На серверах CentOS демон auditd обычно уже предустановлен (пакеты audit
и audit-libs
).
Example
Синтаксис:
autrace -r <программа> <аргументы для программы>
Параметр -r
– ограничивает сбор данных, которые необходимы для оценки использования ресурсов процесса.
Например, чтобы отследить выполнение команды df, которая показывает использование файловой системы, выполните следующее действие:
autrace -r /bin/df -h
Все записи журнала, связанные с трассировкой, из файла журнала аудита можно вывести с помощью утилиты ausearch, аргументы для которой показаны в последней строке:
Waiting to execute: /bin/df Filesystem Size Used Avail Use% Mounted on tmpfs 98M 1.3M 96M 2% /run /dev/sda2 16G 9.0G 5.9G 61% / tmpfs 486M 0 486M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 98M 0 98M 0% /run/user/1000 Cleaning up... Trace complete. You can locate the records with 'ausearch -i -p 24466'
Выполните команду:
ausearch -i -p 24466
Опция -i
позволяет интерпретировать числовые значения, -p
передает идентификатор процесса для поиска.
Вывод:
... type=UNKNOWN[1420] msg=audit(08/04/2022 07:25:22.647:74) : subj_apparmor=unconfined type=PROCTITLE msg=audit(08/04/2022 07:25:22.647:74) : proctitle=/bin/df -h type=PATH msg=audit(08/04/2022 07:25:22.647:74) : item=1 name=/lib64/ld-linux-x86-64.so.2 inode=662217 dev=08:02 mode=file,755 ouid=root ogid=root rdev=00:00 obj=? nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0 type=UNKNOWN[1421] msg=audit(08/04/2022 07:25:22.647:91) : type=CWD msg=audit(08/04/2022 07:25:22.647:91) : cwd=/root type=SYSCALL msg=audit(08/04/2022 07:25:22.647:91) : arch=x86_64 syscall=openat success=yes exit=3 a0=AT_FDCWD a1=0x558b7154737e a2=O_RDONLY a3=0x0 items=1 ppid=24464 pid=24466 auid=vs uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=1 comm=df exe=/usr/bin/df subj=? key=(null) ...
Где:
name
– имя команды, трассировка которой была выполнена;cwd
– текущий рабочий путь, из которого происходил доступ к файлу;syscall
– связанный системный вызов (execve
- выполнение программы);auid
– идентификатор пользователя аудита;exe
– двоичный файл, выполняющий действие над файлом.
Обратите внимание, что auid определяет исходного пользователя вошедшего в систему. Другие поля могут указывать на другого пользователя, в зависимости от того, какой пользователь используется при выполнении действия.
Report
Чтобы создать отчет о деталях трассировки, выполните следующую команду:
ausearch -p <id процесса> --raw | aureport -i -f
Опция -i
позволяет интерпретировать числовые значения, -f
сообщает о файлах и сокетах, –raw
формат для генератора отчетов aureport.
Например:
ausearch -p 24466 --raw | aureport -i -f 1. 08/04/2022 07:25:22 /bin/df execve yes /usr/bin/df vs 74 2. 08/04/2022 07:25:22 /etc/ld.so.cache openat yes /usr/bin/df vs 75 3. 08/04/2022 07:25:22 /lib/x86_64-linux-gnu/libc.so.6 openat yes /usr/bin/df vs 76 4. 08/04/2022 07:25:22 /usr/lib/locale/locale-archive openat yes /usr/bin/df vs 77 5. 08/04/2022 07:25:22 /usr/share/locale/locale.alias openat yes /usr/bin/df vs 78 6. 08/04/2022 07:25:22 /usr/share/locale/en_US.UTF-8/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 79 7. 08/04/2022 07:25:22 /usr/share/locale/en_US.utf8/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 80 8. 08/04/2022 07:25:22 /usr/share/locale/en_US/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 81 9. 08/04/2022 07:25:22 /usr/share/locale/en.UTF-8/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 82 10. 08/04/2022 07:25:22 /usr/share/locale/en.utf8/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 83 11. 08/04/2022 07:25:22 /usr/share/locale/en/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 84 12. 08/04/2022 07:25:22 /usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 85 13. 08/04/2022 07:25:22 /usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 86 14. 08/04/2022 07:25:22 /usr/share/locale-langpack/en_US/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 87 15. 08/04/2022 07:25:22 /usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 88 16. 08/04/2022 07:25:22 /usr/share/locale-langpack/en.utf8/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 89 17. 08/04/2022 07:25:22 /usr/share/locale-langpack/en/LC_MESSAGES/coreutils.mo openat no /usr/bin/df vs 90 18. 08/04/2022 07:25:22 /proc/self/mountinfo openat yes /usr/bin/df vs 91 19. 08/04/2022 07:25:22 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache openat yes /usr/bin/df vs 92
Предположим, что запущенная программа уже работает в течении последней недели, это означает, что в журналах аудита имеется много информации. Чтобы создать отчет только для сегодняшних записей, используйте флаг -ts, чтобы указать дату и время начала поиска:
ausearch -ts today -p <id процесса> --raw | aureport -i -f