Лабораторная работа №4

 

Цель работы

Изучение и практическое применение auditd, syslog, PAM.

 

Подготовительная часть

Для подготовки к лабораторной работе необходимо:

         иметь представления об архитектуре UNIX-подобных ОС;

         иметь навыки работы в UNIX-подобных системах;

         изучить руководства к утилитам (команда man), а также материалы, представленные в списке литературы.

 

Теоретическая часть

Система PAM

Pluggable Authentication Modules (PAM, подключаемые модули аутентификации) — это набор разделяемых библиотек, которые позволяют интегрировать различные низкоуровневые методы аутентификации в виде единого высокоуровневого API. Это позволяет предоставить единые механизмы для управления, встраивания прикладных программ в процесс аутентификации. Является одной из частей стандартного механизма обеспечения безопасности UNIX-систем.

Рис. 1. Архитектура системы PAM

Низкоуровневые модули PAM (pam_*.so) располагаются в каталоге /lib/security. В каталоге /etc/pam.d — файлы конфигурации для конкретных сервисов, при этом имя файла должно совпадать с именем сервиса, который его использует. Имя файла other зарезервировано для настроек по умолчанию.

Файл конфигурации представляет собой набор правил, которые группируются в стеки по типу модуля. Стек обрабатывается сверху-вниз. Каждая строка описывает одно правило и имеет следующий формат:

<тип модуля> <флаг контроля> <имя модуля> <параметры>

Каждый модуль должен выполнять функции хотя бы одного из четырех типов:

Модули вызываются в том порядке, в котором они указаны в файле конфигурации, в зависимости от значения «флага контроля» для каждого модуля. Поле принимает следующие значения:

PAM обеспечивает различные функциональные возможности, такие как аутентификация, управление паролями и доступом и другие. Их реализация обеспечивается различными модулями:

Механизм скрытых паролей

В UNIX-подобных ОС список пользовательских учётных записей (аккаунтов) содержится в файле /etc/passwd в текстовом формате. Этот файл присутствует всегда и, как правило, доступен для чтения всем пользователям. С целью повышения безопасности, хеши парой хранятся отдельно, в файле /etc/shadow, который доступен для чтения только суперпользователю, остальные же должны пользоваться модулем pam_unix.

Конфигурация подсистемы скрытых паролей содержится в файле /etc/login.defs. Файл представляет собой обычный текстовый файл, каждая строка описывает один параметр конфигурации. Строки состоят из названия параметра и его значения, которые разделяются пробелом. Пустые строки и комментарии игнорируются. Комментарии начинаются со знака "#".

Рассмотрим параметры, которые относятся к парольной аутентификации:

Syslog

Syslog является стандартом отправки сообщений о происходящих в системе событиях. Протокол syslog представляет собой текстовое сообщение длинной не более 1024 байт и в классической реализации использует 514/UDP порт. Все настройки демона syslogd хранятся  в файле /etc/syslog.conf. Стандартным каталогом для журналов является /var/log/.

 

При разборе сообщений, сервер syslog руководствуется   специальными правилами, основанными на категориях (facility) и уровенем серьезности (severity).

 

Категория (facility) кодируется числом от 0 до 23:

0 - KERN (сообщения ядра)

1 - USER (сообщения пользовательских программ)

2 - MAIL (почтовая система)

3 - DAEMON (прочие демоны)

4 - AUTH (безопасность/права доступа)

5 - SYSLOG (генерируемые самим syslog)

6 - LPR (подсистема печати)

7 - NEWS (Netnews, USENET)

8 - UUCP

9 - CRON

10 - AUTHPRIV (безопасность/права доступа - защищенный режим)

11 - FTP

12 - NTP (существует не везде)

13 - log audit (существует не везде)

14 - log alert (существует не везде)

15 - clock daemon (существует не везде)

16-23 - зарезервированы для пользовательского использования (LOCAL0 - LOCAL7)

 

Уровень severity кодируется числом от 0 до 7:

0 - EMERG (система неработоспособна, старое название PANIC)

1 - ALERT (требуется немедленное вмешательство)

2 - CRIT (критическое состояние)

3 - ERR (ошибка, старое название ERROR)

4 - WARNING (предупреждение, старое название WARN)

5 - NOTICE (все нормально, но важно)

6 - INFO (информационное сообщение)

7 - DEBUG (отладочная печать)

 

Текст сообщения так же может содержать тег (TAG), указывающий на программу или процесс, выдавший сообщение.

 

Система аудита

В ОС Linux, начиная с версии ядра 2.6, существует возможность протоколировать такие события, как доступ к файлам и выполнение системных вызовов с помощью службы auditd.

 

Просмотр журнала событий возможен, как с помощью команд ausearch и aureport, так и непосредственно из файла /var/log/audit/audit.log. Утилита aureport используется для формирования отчетов на основе данного файла, а утилита ausearch может выполнять поиск записей аудита на основе различных критериев поиска, таких как имя файла, идентификатор пользователя, название системного вызова и т. д.

 

Примечание: Поскольку сам auditd не умеет отправлять события по syslog, для этого может использоваться диспетчер (dispatcher), обрабатывающий все события. Настройки диспетчера можно найти в каталоге /etc/audisp/.

 

Конфигурационные файлы системы аудита находятся в каталоге /etc/audit/. Управление системой аудита осуществляется с помощью команды auditctl. При загрузке системы, правила в виде параметров auditctl читаются из файла /etc/audit/audit.rules.

 

Рассмотрим его основные параметры:

 

-D – удалить все правила;

-k <ключ> – задает в виде строчки ключ для идентификации записи;

-l  – вывести список заданных правил.

 

Аудит доступа к файлам

 

Аргументы для правил аудита доступа к файлам:

-p [r|w|x|a] — фильтр по характеру доступа (чтение, запись, выполнение, смена атрибутов)

-w <путь> — путь до наблюдаемых файлов

 

Аудит системных вызовов

В общем виде правило выглядит следующим образом:

auditctl -a <список>,<действие> -S <системный вызов>  [-F <фильтр>]

-a <список>,<действие> — добавляет правило с действием (action) в конец (-A в начало) списка событий (list). В качестве действия может быть never, либо always. При указании действия never, событие не записываются в журнал аудита. Для регистрации событий системных вызовов используются списки entry и exit, соответственно отвечающие за точки входа и выхода из системных вызовов.

 

-d <список>,<действие> — удаляет правило с указанным действием из списка, если полностью совпали и имя системного вызова и поля сравнения.

 

В правилах могут указываться следующие параметры:

 

-S [Имя или номер системного вызова|all] — указание системного вызова, который необходимо отслеживать.

 

-F [n=v | n!=v | n<v | n>v | n<=v | n>=v | n&v | n&=v] —  фильтр для правила, сравнивающий объект (n) со значением (v).  Объекты могут быть следующими:

 

 

Примечание:  Полный список объектов перечислен в man auditctl.

 

Примеры правил:

-a exit,always -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k 'delete-file'

-a exit,never -F arch=b64 -S open -S access -S truncate -F success=0 -F exit=-2

-a exit,always -F arch=b64 -S all -F auid=0 -k 'root-action'

-a exit,always -F arch=b64 -S open -F dir=/etc -F perm=wa -k 'configuration-changes'

-w /etc/passwd -p wa

 


Рабочее задание

  1. PAM. Настройте парольную политику в соответствии со стандартом PCI DSS

        

  1. Система аудита

Проверьте работоспособность правила при помощи команды date.

Проверьте работоспособность правила.


Справочная информация

 

Системный вызов (англ. system call) — обращение прикладной программы к ядру операционной системы для выполнения какой-либо операции.

 

Список системных вызовов можно посмотреть в man syscalls, а их назначение с помощью man 2 <название системного вызова>. Каждый вызов имеет собственный номер, который для 32-х разрядной системы можно посмотреть в файле /usr/include/asm/unistd_32.h.

 

logger [-p facility.severity] [-t tag] <сообщение> – команда, отправляющая сообщение по syslog

 

strace <команда> – утилита, позволяющая отследить вызываемые указанной командой системные вызовы. Пример вызова команды strace cat /etc/motd:

 

execve("/bin/cat", ["cat", "/etc/motd"], [/* 20 vars */]) = 0

open("/etc/motd", O_RDONLY|O_LARGEFILE) = 3

fstat64(3, {st_mode=S_IFREG|0644, st_size=410, ...}) = 0

read(3, "Linux bt 3.2.6 #1 SMP Fri Feb 17"..., 32768) = 410

write(1, "Linux bt 3.2.6 #1 SMP Fri Feb 17"..., 410) = 410

read(3, "", 32768)                          = 0

close(3)                                = 0

close(1)                                    = 0

close(2)                                = 0

exit_group(0)                           = ?

 

Примечание: Стандартные потоки ввода-вывода STDIN, STDOUT и STDERR имеют зарезервированные дескрипторы 0, 1 и 2 соответственно. Таким образом вывод текста на экран осуществляется путем записи (с помощью системного вызова write) в файл с дескриптором равным 1 .

 

autrace <процесс> [аргументы] -  аналог strace для системы аудита, помогающий просмотреть генерируемые процессом события.