IMA EVM: различия между версиями
мНет описания правки |
Manowar (обсуждение | вклад) (→Настройка контроля целостности: Настройка хеша, политика по умолчанию) |
||
Строка 60: | Строка 60: | ||
UUID=c7834d14-d0f0-4d70-94f5-f1ce09fda00c / ext4 relatime,iversion 1 1 | UUID=c7834d14-d0f0-4d70-94f5-f1ce09fda00c / ext4 relatime,iversion 1 1 | ||
UUID=16b090bf-8b7a-4e69-8df6-6a4374f3d550 /home ext4 noexec,nosuid,relatime,iversion 1 2 </source> | UUID=16b090bf-8b7a-4e69-8df6-6a4374f3d550 /home ext4 noexec,nosuid,relatime,iversion 1 2 </source> | ||
#Настроить | #Настроить контроль целостности. Желаемый алгоритм хеширования (SHA или ГОСТ) можно выбрать в файле {{path|/etc/sysconfig/integrity}}. Там же можно включить EVM в дополнение к IMA. При необходимости внесения изменений в политику, нужно скопировать файл {{path|/usr/share/integrity/policy}} в {{path|/etc/integrity/policy}} и там внести требуемые изменения. К примеру, для активации контроля целостности модулей ядра добавить в конец файла политики следующие строки: | ||
#:<source lang="text">audit func=MODULE_CHECK | #:<source lang="text">audit func=MODULE_CHECK | ||
measure func=MODULE_CHECK | measure func=MODULE_CHECK | ||
Строка 68: | Строка 66: | ||
#Запустить инициализацию системы контроля целостности: | #Запустить инициализацию системы контроля целостности: | ||
#:<source lang="text" highlight="1"># /usr/bin/integrity-applier</source> | #:<source lang="text" highlight="1"># /usr/bin/integrity-applier</source> | ||
#: | #:В результате выполнения команды система будет автоматически перезагружена. После перезагрузки нужно запустить службу {{term|signing}}, введя команду | ||
#После | #:<source lang="text" highlight="1"># systemctl signing start</source> и дождаться завершения работы службы. После этого произвести перезагрузку системы вручную. | ||
#:<source lang="text" highlight="1">$ cat /proc/cmdline | #После перезагрузки можно проверить параметры загрузки ядра с помощью команды: | ||
#:<source lang="text" highlight="1">$ cat /proc/cmdline</source> (в командной строке ядра должен присутствовать параметр '''ima_appraise=enforce'''). | |||
#Переименовать файл записи аудита {{path|/var/log/audit/audit.log}}: | #Переименовать файл записи аудита {{path|/var/log/audit/audit.log}}: | ||
#:<source lang="text" highlight="1"># mv /var/log/audit/audit.log /var/log/audit/audit_old.log</source> | #:<source lang="text" highlight="1"># mv /var/log/audit/audit.log /var/log/audit/audit_old.log</source> |
Текущая версия от 17:54, 17 апреля 2024
Подсистема IMA/EVM
IMA/EVM (Integrity Measurement Architecture and Extended Verification Module) — подсистема ядра Linux, позволяющая осуществлять контроль целостности файловой системы. IMA включает в себя две подсистемы – IMA-measurement (измерение) и IMA-appraisal (оценка). Первая собирает хеш-образы файлов, вторая сравнивает собранный хеш с сохраненным хешем и запрещает доступ в случае несоответствия. Собранные хеш-образы хранятся в расширенных атрибутах файловой системы. Модуль расширенной проверки (EVM) предотвращает несанкционированные изменения этих расширенных атрибутов в файловой системе.
Подсистема целостности Linux позволяет использовать подписи IMA и EVM. Подпись EVM защищает метаданные файла, такие как атрибуты файла и расширенные атрибуты. Подпись IMA защищает содержимое файла.
Параметры командной строки ядра
К параметрам командной строки IMA относятся ima_appraise и ima_policy.
ima_appraise может принимать 1 из 4 значений:
- enforce – «жесткий» режим, разрешает запуск программ только при прохождении проверки. В этом режиме IMA оценивает файлы в соответствии с политикой. Доступ к оцениваемому файлу запрещается, если хеш отсутствует или не соответствует собранному значению;
- log – режим «журналирования», аналогичен «жесткому» режиму, за исключением того, что доступ к измененному файлу не запрещается, а будет только зарегистрирован;
- off – отключает все оценки. Сохраненные хеши не проверяются, и новые хеши не создаются и не обновляются;
- fix – «мягкий» режим, используется на этапе настройке системы и разрешает запуск любых программ, регистрируя события несанкционированного доступа в журнале. Запуск в этом режиме применяется для первичной маркировки системы.
ima_policy может принимать 1 из 3 значений:
- tcb – измеряет все исполняемые файлы, все файлы, помеченные для выполнения (например, разделяемые библиотеки), все загруженные модули ядра и все загруженные прошивки. Кроме того, измеряются также файлы, открытые для чтения пользователем root;
- appraise_tcb – оценивает все файлы, принадлежащие пользователю root;
- secure_boot – оценивает все загруженные модули, прошивку, ядро и политики IMA.
ima_policy может быть указано несколько раз, и результатом является объединение политик.
Опция монтирования iversion
Добавление опции монтирования iversion (номер версии структуры данных увеличивается каждый раз, когда структура данных изменяется) позволяет оптимизировать IMA: хэш файла будет пересчитываться только тогда, когда он фактически изменяется, а не каждый раз, когда файл открывается.
Утилиты
Утилита evmctl может использоваться для создания и проверки цифровых подписей, которые используются подсистемой целостности ядра Linux (IMA/EVM), а также для добавления ключей в набор ключей ядра.
Команды проверки целостности файла /bin/ping:
# integrity-sign --stdin --verbose --verify
/bin/ping
integrity-sign: /bin/ping: OK
evmctl -v ima_verify /bin/ping
/bin/ping: verification is OK
Журнал целостности, зарегистрированный подсистемой IMA, хранится в файле /sys/kernel/security/ima/ascii_runtime_measurements:
# less /sys/kernel/security/ima/ascii_runtime_measurements
10 457a77e270cece2273d063f3e5368d367090be5a ima-ng sha1:782eacd35c1efadb33a4a64c24057cd231dae5ff /bin/sleep
10 e57560dbf485ee91853f800629bbc2995d9e4520 ima-ng sha1:581f0675aee3da04fa8b97a7010257c9f18ba8bf /bin/rm
Настройка контроля целостности
Для настройки контроля целостности необходимо выполнить следующие действия:
- Изменить параметры монтирования файловой системы. Для этого следует выставить параметр iversion на всех записях в файле /etc/fstab относящихся к местам, где могут быть исполняемые файлы:
# vim /etc/fstab UUID=c7834d14-d0f0-4d70-94f5-f1ce09fda00c / ext4 relatime,iversion 1 1 UUID=16b090bf-8b7a-4e69-8df6-6a4374f3d550 /home ext4 noexec,nosuid,relatime,iversion 1 2
- Настроить контроль целостности. Желаемый алгоритм хеширования (SHA или ГОСТ) можно выбрать в файле /etc/sysconfig/integrity. Там же можно включить EVM в дополнение к IMA. При необходимости внесения изменений в политику, нужно скопировать файл /usr/share/integrity/policy в /etc/integrity/policy и там внести требуемые изменения. К примеру, для активации контроля целостности модулей ядра добавить в конец файла политики следующие строки:
audit func=MODULE_CHECK measure func=MODULE_CHECK appraise func=MODULE_CHECK
- Запустить инициализацию системы контроля целостности:
# /usr/bin/integrity-applier
- В результате выполнения команды система будет автоматически перезагружена. После перезагрузки нужно запустить службу signing, введя команду
- и дождаться завершения работы службы. После этого произвести перезагрузку системы вручную.
# systemctl signing start
- После перезагрузки можно проверить параметры загрузки ядра с помощью команды:
- (в командной строке ядра должен присутствовать параметр ima_appraise=enforce).
$ cat /proc/cmdline
- Переименовать файл записи аудита /var/log/audit/audit.log:
# mv /var/log/audit/audit.log /var/log/audit/audit_old.log
- Выполнить запуск аудита:
# service auditd start
- Включить службы integrity-notifier и integrity-scanner:
# systemctl enable integrity-notifier # systemctl start integrity-notifier # systemctl enable integrity-scanner # systemctl start integrity-scanner
Система будет работать с включенным контролем исполняемых файлов.
Перед запуском программы система проверяет хеш-образ файла с сохраненным значением. Если образы не совпадают, то любой доступ к этому файлу будет отклонен с ошибкой «Отказано в доступе».
В журнале будут фиксироваться попытки нарушения целостности (invalid-signature):
# journalctl –r | grep invalid-signature
Пример вывода:
янв 04 16:34:24 host-15.localdomain audit[1750]: INTEGRITY_DATA pid=1750 uid=0 auid=64 ses=2 subj=officer_u:officer_r:officer_t:s0-s3:c0.c15 op="appraise_data" cause="invalid-signature" comm="bash" name="/usr/bin/tgz" dev="sda2" ino=657342 res=0
Контроль целостности при загрузке
Проверить, что сервис контроля целостности при загрузке активирован, можно выполнив команду:
# systemctl is-enabled integalert
enabled
Если сервис не активирован, активировать его, выполнив команду:
# systemctl enable integalert
В случае выявления нарушения целостности при загрузке ОС выводится визуальное оповещение с обязательным подтверждением дальнейшей загрузки ОС. Система будет загружаться в однопользовательском режиме с запросом пароля суперпользователя:
login [root]:
Password:
Служба оповещения — integrity-notifier
Назначение службы integrity-notifier — оповестить пользователя в том случае, если была запущена повреждённая программа.
Сообщения из системного журнала с пометкой INTEGRITY_DATA фильтруются службой integrity-scanner и складываются в каталог
/var/log/integrityd/. В файле /var/log/integrityd/current поддерживается окно сообщений за установленный интервал времени (по умолчанию 5 минут). Старые записи складываются там же, с именами, начинающимися на "@" (по умолчанию 50 файлов максимум). Настройки по умолчанию можно изменить в файле /var/log/integrityd/config.
Служба оповещения (integrity-notifier) читает свежие сообщения из окна и оповещает соответствующих пользователей посредством команды write.
Сообщение, которое отправляется пользователю, настраивается в файле /etc/integrity/message. Это должен быть шаблон printf с количеством строковых аргументов не более 2 штук. По умолчанию используется строка:
You have attempted to run a damaged file: %s (%s)
Конфигурационный файл /etc/integrity/also состоит из набора имён тех пользователей, которых нужно оповещать о каждом событии INTEGRITY_DATA.
Предусмотрена программа для отправки оповещений на рабочий стол — /usr/bin/integrity-notifier. Она использует команду notify-send.
Текст заголовка и сообщения для оповещений на рабочий стол задаётся в файле /etc/integrity/desktop_message.
Могут быть и другие службы оповещения пользовательского уровня, также читающие сообщения из файла /var/log/integrityd/current.
Обновление системы
Команда integrity-applier
Для того чтобы система сохранила все настройки безопасности установку/обновление пакетов необходимо производить в следующем порядке:
- Установить пакеты/обновить систему при помощи apt-get;
- Выполнить команду для инициализации контроля целостности:
# /usr/bin/integrity-applier
- Дождаться завершения работы команды (система будет перезагружена четыре раза);
- Переименовать файл записи аудита /var/log/audit/audit.log:
# mv /var/log/audit/audit.log /var/log/audit/audit_old.log
- Выполнить запуск аудита:
# service auditd start
Команда updater-start
Для того чтобы система сохранила все настройки безопасности для установки/обновления пакетов может использоваться команда updater-start (из пакета updater).
В результате запуска данной команды будет обновлена система и ядро системы, а также включена система контроля целостности ima-evm. Необходимо дождаться завершения работы команды (система будет несколько раз перезагружена).
# mv /var/log/audit/audit.log /var/log/audit/audit.log_old
# systemctl start auditd
Команда updater-start также запускает скрипты из /etc/updater.d/* c параметром remove перед установкой пакетов и их же с параметром apply после.
Например, если используется control++ со списками, то в /etc/updater.d/ нужно положить скрипт, вызывающий сontrol++ и cнимающий списки до установки пакетов и устанавливающий их после установки. Последовательность действий:
- В каталоге /etc/updater.d создать файл (название произвольное) с содержимым:
#!/bin/bash if [ "$1" == "remove" ] ; then control++ reset fi if [ "$1" == "apply" ] ; then control++ blacklist fi
- Сделать этот файл исполняемым:
# chmod +x /etc/updater.d/<имя_файла>
- Установить на файл selinux тип integrity_protected_t:
# chcon -t integrity_protected_t /etc/updater.d/<имя_файла>
- Запустить обновление:
# updater-start
- Переименовать файл записи аудита /var/log/audit/audit.log:
# mv /var/log/audit/audit.log /var/log/audit/audit_old.log
- Выполнить запуск аудита:
# service auditd start