Пакет аудита связан с подсистемой аудита ядра Linux.
Система аудита проверяет системные вызовы и другие события уровня ядра, а не события пользовательского пространства, поэтому нам необходимо провести аудит системного вызова execve (), который начинает выполнять новые программы.
В качестве примера в этом руководстве мы взяли систему CentOS / RHEL, но шаги остаются более или менее такими же для других дистрибутивов * NIX.
Для CentOS / RHEL 7
Применение правил аудита в системе
1. Чтобы сохранить правила постоянными после перезагрузки или перезапуска службы, добавьте следующие правила в файл /etc/audit/rules.d/audit.rules:
# vi /etc/audit/rules.d/audit.rules -a exit,always -F arch=b32 -S execve -k auditcmd -a exit,always -F arch=b64 -S execve -k auditcmd
2. Запустите команду «augenrules», чтобы воссоздать /etc/audit/audit.rules из всех файлов конфигурации в /etc/audit/rules.d/audit.rules и перезапустить auditd.
3. Если вы хотите временно применить правила, выполните следующие команды от имени пользователя root:
# auditctl -a exit,always -F arch=b32 -S execve -k auditcmd # auditctl -a exit,always -F arch=b64 -S execve -k auditcmd
Проверьте текущие правила
Чтобы проверить текущие правила, запустите:
# auditctl -l
Проверьте журналы аудита
Чтобы проверить журналы аудита для определенного ключевого слова, выполните:
# ausearch -k auditcmd
Примечание. В CentOS / RHEL 7, чтобы остановить / запустить / перезапустить службу Audit, запустите службу AuditD Stop | Start | Restart.
Для CentOS / RHEL 6
Чтобы записывать в логи все команды
1. Сначала должен быть запущен audd.
Он должен быть запущен по умолчанию, но если это не так, запустите его:
# chkconfig auditd on # service auditd start
2. Если это 64-битная архитектура, вам нужно добавить два правила для перехвата как 32-битных, так и 64-битных системных вызовов.
От имени пользователя root запустите:
# auditctl -a exit,always -F arch=b32 -S execve # auditctl -a exit,always -F arch=b64 -S execve
3. Запустите ls / tmp, эти 3 события появятся в /var/log/audit/audit.log.
Строки разделены, чтобы их было легче читать, но обычно это одна длинная строка в реальном файле.
# tail -f /var/log/audit/audit.log type=SYSCALL msg=audit(1296773801.756:35241): arch=c000003e syscall=59 success=yes exit=0 a0=cf2d10 a1=9da530 a2=cd4e20 a3=8 items=2 ppid=4146 pid=11827 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=3 comm="ls" exe="/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) type=EXECVE msg=audit(1296773801.756:35241): argc=3 a0="ls" a1="--color=auto" a2="/tmp" type=CWD msg=audit(1296773801.756:35241): cwd="/home/username" type=PATH msg=audit(1296773801.756:35241): item=0 name="/bin/ls" inode=14418043 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 type=PATH msg=audit(1296773801.756:35241): item=1 name=(null) inode=20447259 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0
Журналы аудита довольно многословны, но содержат полную команду, в том числе тот факт, что ls был псевдонимом оболочки для ls –color = auto.
Первое число в скобках – это отметка времени.
Это может быть преобразовано в удобочитаемое время с Perl:
$ perl -e 'print scalar(localtime(1296773801.756)) . "\n";' Thu Feb 3 16:56:41 2011
exit = 0 в строке SYSCALL выше касается системного вызова execve (), а не всей программы.
Для регистрации всех команд для конкретного пользователя
1. Запустите службу Audit:
# chkconfig auditd on # service auditd start
2. Добавьте правило аудита:
Для 64-битной архитектуры:
# auditctl -a exit,always -F arch=b64 -F uid=500 -S execve -k auditcmd
Для 32-битной архитектуры:
# auditctl -a exit,always -F arch=b32 -F uid=500 -S execve -k auditcmd
Здесь uid пользователя, для которого включен аудит всех команд.
Запустите команду audctl от имени пользователя root, чтобы добавить правила.
3. Убедитесь, что журналы создаются, проверив файл /var/log/audit/audit.log.
Как только пользователь начнет выполнять команды, журналы появятся как показано ниже:
# tail -f /var/log/audit/audit.log type=SYSCALL msg=audit(1393407885.099:8614): arch=c000003e syscall=59 success=yes exit=0 a0=158c9b0 a1=1588f10 a2=15a7ae0 a3=18 items=2 ppid=3123 pid=3307 auid=0 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts1 ses=1 comm="ls" exe="/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) type=EXECVE msg=audit(1393407885.099:8614): argc=2 a0="ls" a1="--color=auto" type=CWD msg=audit(1393407885.099:8614): cwd="/home/sadaf" type=PATH msg=audit(1393407885.099:8614): item=0 name="/bin/ls" inode=408600 dev=fc:02 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 type=PATH msg=audit(1393407885.099:8614): item=1 name=(null) inode=429303 dev=fc:02 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 type=SYSCALL msg=audit(1393407910.242:8615): arch=c000003e syscall=59 success=yes exit=0 a0=15971e0 a1=158c9b0 a2=15a7ae0 a3=18 items=2 ppid=3123 pid=3310 auid=0 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts1 ses=1 comm="rmdir" exe="/bin/rmdir" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) type=EXECVE msg=audit(1393407910.242:8615): argc=2 a0="rmdir" a1="data"
ПРИМЕЧАНИЕ. Аудит генерирует подробные журналы, так как каждая команда будет записана, что может отрицательно повлиять на общую производительность системы.