Аудит системных событий ОС Linux
Система аудита необходима для повышения безопасности ОС. Благодаря ей можно собрать всю информацию о событиях в системе. В целом система аудита не обеспечивает защиты, она собирает информацию о нарушениях безопасности, благодаря которой можно принять какие-то мероприятия. В данной статье рассмотрим систему аудита Linux.
Аудит Linux: принцип работы
Система аудита появилась в Linux с ядра 2.6. Её назначение следить за безопасностью системы и фиксировать все события. Пример событий:
- включение выключение Linux
- изменения доступа файлов
- сетевые соединения
- неудавшиеся авторизации
- запуск остановка служб
- системные вызова
- др
Все события осуществляются через системные вызовы ядра. Для того что бы следить за событиями нужно перехватывать вызовы ядра. Этим и занимается система аудита.
Все обращения пропускаются через фильтры user, task или exit. Далее рассмотрим их подробно. Такая схема помогает легко эффективно отслуживать все события.
Установка
Для установки системы аудита необходимо установить пакет auditd
1 2 |
sudo apt-get install auditd -- Ubuntu yum install auditd -- Centos |
В пакет входят демон и утилиты:
- auditctl — управляет демоном auditd; с её помощью можно настраивать правила и следить за работой;
- autrace — аудит событий которые вызваны процессами;
- ausearch — поиск событий в лог файле;
- aureport — создание отчетов.
Настройка
Все настройки выполняются в файле etc/audit/auditd.conf
- log_file — путь к файлу где будут сохранены логи системы;
- log_format — формат, сохранения информации в лог файл;
- freq — число записей хранящиеся в буфере;
- flush — как будут синхронизироваться буфер с диском (none — не синхронизировать, incremental — переносить периодически с частотой в параметре freq; data — моментальная синхроизация, sync — синхронизировать при сбросе на диск);
- max_log_file — размер лог файла в Mb;
- max_log_file_action — что делать если лог превысил предыдущее значение;
- space_left — минимальный порог пространства, после чего сработает следующий параметр;
- space_left_admin — что делать, когда на диске заканчивается место (ignore — игнорировать; syslog — писать в syslog, email — отправлять письмо; suspend — остановить запись; single — сменить на однопользовательский режим; halt — остановить систему)
- disk_full_action — что делать если диск переполнен (значения такие же как space_left_admin).
Разработка правил
Для работы с правилами используется auditctl с опциями:
- -l — показать все правила;
- -а — создать новое;
- -d — удалить правило;
- -D — удалить все правила из списка.
Для создания правил используем команду
1 |
auditctl -a <список>, <действие> -S <имя системного вызова> -F <фильтры> |
Варианты возможных списков:
- task — события, вызванные новыми процессами;
- entry — события, входа;
- exit — события, выхода;
- user — события, с параметрами пользователя;
- exclude — события исключения.
Далее указываются действия, которые необходимо выполнить при том или ином событии: always (записать в журнал) и never (не писать).
После -S указывается имя которое перехватывается (open, close и т.п)
Опция -F параметры фильтра. Например будем сохранять события обращения к фалам в папке /etc
1 |
auditctl -a exit,always -S open -F path =/etc/ |
Можно использовать дополнительные фильтры. Например следить только за изменением атрибутов (a) и записью (w)
1 |
auditctl -a exit,always -S open -F path =/etc/ -F perm = aw |
Файл правил
Правила задаются не только через командную строку, но и через файл etc/audit/audit.rules
1 2 3 4 5 6 7 8 |
# удаляем правила -D # задаём кол-во буферов, для хранения сообщений -b 320 # что при переполнении буферов: 0 - ничего не делать; 1 - отправлять сообщение в dmesg, 2 - отправлять ядро в panic |
Синтаксис файла, перечисление опций командной строки, пример файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
следить за системными вызовами unlink и rmdir -a exit,always -S unlink -S rmdir # следить за open от пользователя с UID 1001 -a exit,always -S open -F loginuid=1001 # следить за доступом к файлам паролей и групп и проб их изменения: -w /etc/group -p wa -w /etc/passwd -p wa -w /etc/shadow -p wa -w /etc/sudoers -p wa # отслеживать доступ к следующей директории: -w /etc/my_directory -p r # закрыть доступ к конфигурационному файлу для предотвращения изменений -e 2 |
Применение конфигурации произойдет после перезапуска auditd
1 |
sudo service auditd restart |
aureport — анализ файлов аудита
Все логи сохраняются в папку /var/log/audit не очень понятном виде для человека. С помощью утилиты aureport их можно привести к понятному для восприятия виду.
При выполнении команды без параметров получим общую статистику
1 |
sudo aureport |
Показать информацию о системных вызовах
1 |
sudo aureport -s |
Входы в систему
1 |
sudo aureport -au |
Так же можно выводить инфо по дате
1 |
sudo aureport -s --start 07/31/15 12:00 --end 06/30/15 12:00 |
Также можно посмотреть инфо по любому пользователю
1 2 3 |
$ id user --узнаем id пользователя uid=1000(user) gid=1000(www) groups=1000(www),27(sudo) $ sudo ausearch -ui 1000 --interpret |
Ausearch — поиск по событиям
Для просмотра информации по номеру события используем команду
1 |
sudo ausearch -a <номер события> |
Autrace — Анализ процессов
Иногда нужно получить события по определенному процессу. Пример нужно проследить за процессом date и определить системные вызовы и файлы используемые им
1 |
$ sudo autrace /bin/date |
В результате увидим:
1 2 3 4 |
Waiting to execute: /bin/date Mon Aug 31 17:06:32 MSK 2015 Cleaning up... Trace complete. You can locate the records with 'ausearch -i -p 29234' |
При этом последняя строка предлагает команду для более детальной информации. Воспользуемся ей и выведем в понятный формат.
1 |
sudo ausearch -p 29215 --raw | aureport -f -i |
Результат команды:
1 2 3 4 5 6 7 8 9 10 11 12 |
File Report =============================================== # date time file syscall success exe auid event =============================================== 1. 08/31/2015 16:52:16 /bin/date execve yes /bin/date root 25 2. 08/31/2015 16:52:16 /etc/ld.so.nohwcap access no /bin/date root 27 3. 08/31/2015 16:52:16 /etc/ld.so.preload access no /bin/date root 29 4. 08/31/2015 16:52:16 /etc/ld.so.cache open yes /bin/date root 30 5. 08/31/2015 16:52:16 /etc/ld.so.nohwcap access no /bin/date root 34 6. 08/31/2015 16:52:16 /lib/x86_64-linux-gnu/libc.so.6 open yes /bin/date root 35 7. 08/31/2015 16:52:16 /usr/lib/locale/locale-archive open yes /bin/date root 52 8. 08/31/2015 16:52:16 /etc/localtime open yes /bin/date root 56 |
Хранение логов
Для централизованного сбора и хранения логов можно воспользоваться audisp-remote устанавливается с помощью команды
1 |
sudo apt-get install audisp-plugins |
Конфигурация хранится в папке /etc/audisp/plugins.d
Для удаленного хранения логов настраиваем в /etc/audisp/plugins.d/audisp-remote.conf
1 2 3 4 5 6 |
active = no direction = out path = /sbin/audisp-remote type = always #args = format = string |
Для активации удаленного сохранения логов меняем active на yes. Затем в файле etc/audisp/audisp-remote.conf указываем remote_server IP адрес или имя удаленного сервера централизованных логов.
Что бы принимать логи с удаленных хостов в /etc/audit/auditd.conf необходимо добавить
1 |
tcp_listen_port = 60 tcp_listen_queue = 5 tcp_max_per_addr = 1 ##tcp_client_ports = 1024-65535 #optional tcp_client_max_idle = 0 |