Вступление
Система аудита Linux помогает системным администраторам создавать контрольный журнал, журнал для каждого действия на сервере. Мы можем отслеживать связанные с безопасностью события, записывать события в файл журнала, а также обнаруживать злоупотребления или несанкционированные действия, проверяя файлы журнала аудита. Мы можем выбрать, какие действия на сервере контролировать и в какой степени. Аудит не обеспечивает дополнительную безопасность вашей системе, скорее он помогает отслеживать любые нарушения системных политик и позволяет принимать дополнительные меры безопасности для их предотвращения.
В этом руководстве описывается система аудита, как ее настроить, как создавать отчеты и как читать эти отчеты. Мы также увидим, как искать в журналах аудита конкретные события.
Предпосылки
Для этого урока вам понадобится следующее:
-
CentOS 7 Droplet (работает также с CentOS 6)
-
Пользователь без полномочий root с привилегиями sudo. Чтобы настроить пользователя этого типа, следуйте учебному руководству Initial Server Setup с CentOS 7. Все команды будут выполняться от имени этого пользователя.
Проверка установки аудита
Система аудита состоит из двух основных частей:
-
Компонент ядра аудита перехватывает системные вызовы от пользовательских приложений, записывает события и отправляет эти сообщения аудита демону аудита
-
Демон
+ auditd +
собирает информацию из ядра и создает записи в файле журнала.
Система аудита использует следующие пакеты: + audit
и` + audit-libs`. Эти пакеты по умолчанию устанавливаются на новую каплю CentOS 7 (и новую каплю CentOS 6). Хорошо убедиться, что они установлены на вашем сервере, используя:
sudo yum list audit audit-libs
Вы должны увидеть оба пакета в + Installed Packages +
в выходных данных:
Installed Packages
audit.x86_64
audit-libs.x86_64
Настройка аудита
Основной файл конфигурации для + auditd +
это + / etc / Audit / Auditd.conf +
. Этот файл состоит из параметров конфигурации, которые включают, где регистрировать события, как работать с полными дисками и чередование журналов. Для редактирования этого файла вам нужно использовать sudo:
sudo nano /etc/audit/auditd.conf
Например, чтобы увеличить количество файлов журнала аудита, хранящихся на вашем сервере, до 10, измените следующую опцию:
/etc/audit/auditd.conf
num_logs =
Вы также можете настроить максимальный размер файла журнала в мегабайтах и действия, которые необходимо предпринять после достижения размера:
/etc/audit/auditd.conf
max_log_file =
max_log_file_action =
Когда вы вносите изменения в конфигурацию, вам необходимо перезапустить службу Audit, используя:
sudo service auditd restart
чтобы изменения вступили в силу.
Другой конфигурационный файл - + / etc / audit / rules.d / audit.rules
. (Если вы используете CentOS 6, вместо этого используется файл + / etc / audit / audit.rules +
.) Он используется для постоянного добавления правил аудита.
Когда работает + auditd +
, сообщения аудита будут записываться в файл + / var / log / audit / audit.log +
.
Понимание файлов журнала аудита
По умолчанию система аудита записывает сообщения аудита в файл + / var / log / audit / audit.log +
. Файлы журнала аудита содержат много полезной информации, но чтение и понимание файлов журнала может показаться многим пользователям затруднительным из-за большого количества предоставляемой информации, используемых сокращений и кодов и т. Д. В этом разделе мы попытаемся понять некоторые поля типичного сообщения аудита в файлах журнала аудита.
Для этого примера предположим, что на сервере настроено правило аудита с меткой (+ key +
) + sshconfigchange +
, чтобы регистрировать каждый доступ или изменение файла + / etc / ssh / sshd_config +
. При желании вы можете временно добавить это правило, используя:
sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange
Выполнение следующей команды для просмотра файла + sshd_config +
создает новое * событие * в файле журнала аудита:
sudo cat /etc/ssh/sshd_config
Это событие в файле + audit.log +
выглядит следующим образом:
/var/log/audit/audit.log
type=SYSCALL msg=audit(1434371271.277:135496): arch=c000003e syscall=2 success=yes exit=3 a0=7fff0054e929 a1=0 a2=1fffffffffff0000 a3=7fff0054c390 items=1 ppid=6265 pid=6266 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=113 comm="cat" exe="/usr/bin/cat" key="sshconfigchange"
type=CWD msg=audit(1434371271.277:135496): cwd="/home/sammy"
type=PATH msg=audit(1434371271.277:135496): item=0 name="/etc/ssh/sshd_config" inode=392210 dev=fd:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL
Вышеуказанное событие состоит из трех записей (каждая из которых начинается с ключевого слова + type = +
), которые имеют одинаковую метку времени (+ 1434371271.277 +
) и id (+ 135496 +
). Каждая запись состоит из нескольких пар name = value, разделенных пробелом или запятой. Мы подробно рассмотрим, что обозначают некоторые из этих полей.
В первой записи:
-
+ Тип = SYSCALL +
Поле + type +
содержит тип сообщения аудита. В этом случае значение + SYSCALL +
показывает, что это сообщение было вызвано системным вызовом ядра.
-
+ MSG = аудит (1434371271,277: 135496) +
Отметка времени и идентификатор сообщения аудита в форме + audit (time_stamp: ID) +
. Несколько сообщений / записей аудита могут иметь одинаковую метку времени и идентификатор, если они были созданы как часть одного и того же события аудита. В нашем примере мы видим одну и ту же метку времени (1434371271.277) и ID (135496) для всех трех сообщений, сгенерированных событием аудита.
-
+ Арка = c000003e +
Поле + arch +
содержит информацию об архитектуре процессора системы. Значение c000003e в шестнадцатеричной системе счисления и означает x86_64.
-
+ = 2 системного вызова +
Поле + syscall +
обозначает тип системного вызова, который был отправлен ядру. В этом случае 2 - системный вызов + open +
. Утилита + ausyscall +
позволяет вам преобразовывать номера системных вызовов в их понятные человеку эквиваленты. Например, выполните следующую команду, чтобы преобразовать значение 2 в его понятный человеку эквивалент:
sudo ausyscall 2
Вывод показывает:
open
-
+ Успех = да +
Поле + success +
показывает, был ли системный вызов в данном конкретном событии успешным или неудачным. В этом случае вызов был успешным. Пользователь sammy смог открыть и прочитать файл + sshd_config +
при запуске команды + sudo cat / etc / ssh / sshd_config +
.
-
+ PPID = 6265 +
Поле + ppid +
записывает идентификатор родительского процесса (PPID). В этом случае + 6265 +
был PPID процесса + bash +
.
-
+ PID = 6266 +
Поле + pid +
записывает идентификатор процесса (PID). В этом случае + 6266 +
был PID процесса + cat +
.
-
+ Auid = 1000 +
+ auid +
- это UID аудита или исходный UID пользователя, который вызвал это сообщение аудита. Система аудита запомнит ваш исходный UID, даже если вы повысите привилегии через su или sudo после первоначального входа в систему.
-
+ UID = 0 +
Поле + uid +
записывает идентификатор пользователя, который запустил анализируемый процесс. В этом случае команда + cat +
была запущена пользователем root с uid 0.
-
+ Comm = "кошка" +
+ comm +
записывает имя команды, которая вызвала это контрольное сообщение.
-
+ Ех = "/ USR / бен / кошка" +
Поле + exe +
записывает путь к команде, которая использовалась для запуска этого сообщения аудита.
-
+ key =" ssh config change "+
Поле + key +
записывает определенную администратором строку, связанную с правилом аудита, сгенерировавшим это событие, в журнал. Ключи обычно устанавливаются при создании пользовательских правил аудита, чтобы упростить поиск определенных типов событий из журналов аудита.
Для второй записи:
-
+ Тип = УХО +
Во второй записи типом является + CWD +
- Текущий рабочий каталог. Этот тип используется для записи рабочего каталога, из которого был выполнен процесс, вызвавший системный вызов, указанный в первой записи.
-
+ УХО = "/ дом / Сэмми" +
Поле + cwd +
содержит путь к каталогу, из которого был вызван системный вызов. В нашем случае команда + cat +
, которая вызвала системный вызов + open +
в первой записи, была выполнена из каталога + / home / sammy +
.
Для третьей записи:
-
+ Тип = ПУТЬ +
В третьей записи типом является + PATH +
. Событие аудита содержит запись + PATH +
для каждого пути, который передается системному вызову в качестве аргумента. В нашем событии аудита в качестве аргумента был использован только один путь (+ / etc / ssh / sshd_config +
).
-
+ MSG = аудит (1434371271,277: 135496) +
Поле + msg +
показывает ту же комбинацию метки времени и идентификатора, что и в первой и второй записях, поскольку все три записи являются частью одного и того же события аудита.
-
+ Имя = "/ и т.д. / SSH / sshd_config" +
Поле + name +
записывает полный путь к файлу или каталогу, который был передан системному вызову (open) в качестве аргумента. В данном случае это был файл + / etc / ssh / sshd_config +
.
-
+ Ouid = 0 +
Поле + ouid +
записывает идентификатор пользователя владельца объекта. Здесь объектом является файл + / etc / ssh / sshd_config +
.
Поиск в журналах аудита событий
Система аудита Linux поставляется с мощным инструментом + ausearch +
для поиска в журналах аудита. С помощью + ausearch +
вы можете фильтровать и искать типы событий. Он также может интерпретировать события для вас путем перевода числовых значений в понятные человеку значения, такие как системные вызовы или имена пользователей.
Давайте посмотрим на несколько примеров.
Следующая команда будет искать в журналах аудита все события аудита типа LOGIN с сегодняшнего дня и интерпретировать имена пользователей.
sudo ausearch -m LOGIN --start today -i
Команда ниже будет искать все события с идентификатором события 27020 (при условии, что есть событие с этим идентификатором).
sudo ausearch -a 27020
Эта команда будет искать все события (если они есть), затрагивающие файл + / etc / ssh / sshd_config +
, и интерпретировать их:
sudo ausearch -f /etc/ssh/sshd_config -i
Генерация аудиторских отчетов
Вместо чтения необработанных журналов аудита вы можете получить сводку сообщений аудита, используя инструмент + aureport +
. Он предоставляет отчеты в удобочитаемом формате. Эти отчеты могут быть использованы в качестве строительных блоков для более сложного анализа. Когда + aureport +
запущен без каких-либо опций, он покажет сводку различных типов событий, присутствующих в журналах аудита. При использовании с параметрами поиска будет показан список событий, соответствующих критериям поиска.
Давайте попробуем несколько примеров для + aureport +
. Если вы хотите создать сводный отчет обо всех выполнениях команд на сервере, выполните:
sudo aureport -x --summary
Вывод будет выглядеть примерно так с разными значениями:
Executable Summary Report
=================================
total file
=================================
117795 /usr/sbin/sshd
1776 /usr/sbin/crond
210 /usr/bin/sudo
141 /usr/bin/date
24 /usr/sbin/autrace
18 /usr/bin/su
В первом столбце показано количество выполнений команды, а во втором столбце - выполненная команда. Обратите внимание, что не все команды регистрируются по умолчанию. Только связанные с безопасностью регистрируются.
Следующая команда предоставит вам статистику всех неудачных событий:
sudo aureport --failed
Вывод выглядит примерно так:
Failed Summary Report
======================
Number of failed logins: 11783
Number of failed authentications: 41679
Number of users: 3
Number of terminals: 4
Number of host names: 203
Number of executables: 3
Number of files: 4
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 9
Чтобы создать отчет о файлах, к которым обращаются с помощью системных вызовов и имен пользователей:
sudo aureport -f -i
Образец вывода:
File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. Monday 15 June 2015 08:27:51 /etc/ssh/sshd_config open yes /usr/bin/cat sammy 135496
2. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147481
3. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config lgetxattr yes /usr/bin/ls root 147482
4. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147483
5. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147484
6. Tuesday 16 June 2015 05:40:08 /bin/date execve yes /usr/bin/date root 148617
Чтобы просмотреть то же самое в кратком формате, вы можете запустить:
sudo aureport -f -i --summary
Анализ процесса с использованием autrace
Для аудита отдельного процесса мы можем использовать инструмент + autrace +
. Этот инструмент отслеживает системные вызовы, выполняемые процессом. Это может быть полезно при расследовании подозреваемого трояна или проблемного процесса. Выходные данные + autrace +
записываются в + / var / log / audit / audit.log +
и выглядят аналогично стандартным записям журнала аудита. После выполнения + autrace +
предоставит вам пример команды + ausearch +
для изучения журналов. Всегда используйте полный путь к двоичному файлу для отслеживания с помощью autrace, например + sudo autrace / bin / ls / tmp +
.
Давайте попробуем пример, скажем, мы хотим отследить процесс + date +
и просмотреть используемые им файлы и системные вызовы. Запустите следующее:
sudo autrace /bin/date
Вы должны увидеть что-то похожее на следующее:
Waiting to execute: /bin/date
Wed Jun 17 07:22:03 EDT 2015
Cleaning up...
Trace complete. You can locate the records with 'ausearch -i -p 27020'
Вы можете использовать команду + ausearch +
из вышеприведенного вывода, чтобы просмотреть соответствующие журналы, или даже передать ее в + aureport +
, чтобы получить хорошо отформатированный читабельный вывод:
sudo ausearch -p 27020 --raw | aureport -f -i
Эта команда ищет событие с идентификатором + 27020 +
из журналов аудита, извлекает его в формате необработанного журнала и передает его в + aureport +
, что, в свою очередь, интерпретирует и выдает результаты в лучшем формате для более удобного чтения. ,
Вы должны увидеть вывод, похожий на следующий:
File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. Wednesday 17 June 2015 07:22:03 /bin/date execve yes /usr/bin/date sammy 169660
2. Wednesday 17 June 2015 07:22:03 /etc/ld.so.preload access no /usr/bin/date sammy 169663
3. Wednesday 17 June 2015 07:22:03 /etc/ld.so.cache open yes /usr/bin/date sammy 169664
4. Wednesday 17 June 2015 07:22:03 /lib64/libc.so.6 open yes /usr/bin/date sammy 169668
5. Wednesday 17 June 2015 07:22:03 /usr/lib/locale/locale-archive open yes /usr/bin/date sammy 169683
6. Wednesday 17 June 2015 07:22:03 /etc/localtime open yes /usr/bin/date sammy 169691
Заключение
В этом руководстве мы рассмотрели основы системы аудита Linux. Теперь у вас должно быть хорошее понимание того, как работает система аудита, как читать журналы аудита и различные доступные инструменты, чтобы упростить вам аудит вашего сервера.
По умолчанию система аудита записывает в журналы только несколько событий, таких как входящие пользователи и пользователи, использующие sudo. Сообщения, связанные с SELinux, также регистрируются. Демон аудита использует правила для мониторинга определенных событий и создания связанных записей журнала. Можно создавать настраиваемые правила аудита для мониторинга и записи в журналах того, что мы хотим. Именно здесь система аудита становится мощной для системного администратора. Мы можем добавлять правила, используя инструмент командной строки + auditctl +
или постоянно в файле + / etc / audit / rules.d / audit.rules +
. Написание пользовательских правил и использование предопределенных наборов правил подробно обсуждается в Writing Пользовательские правила аудита системы на CentOS 7 учебник.
Вы также можете проверить следующие ресурсы для получения дополнительной информации о системе аудита: