Skip to content

Подсистема контроля целостности операционной системы должна поддерживать технологии IMA и EVM.


https://www.altlinux.org/IMA_EVM [[ЛКНВ.11100-01 99 03 Руководство по комплексу средств защиты.pdf]], стр 122-129

==Поднят стенд: IMA EVM==

  1. Изменить параметры монтирования файловой системы. Для этого следует выставить параметр iversion на всех записях в файле /etc/fstab относящихся к местам, где могут быть исполняемые файлы
bash
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
  1. Настроить контроль целостности. Желаемый алгоритм хеширования (SHA или ГОСТ) можно выбрать в файле /etc/integrity/config. Там же можно включить EVM в дополнение к IMA. Для изменения алгоритма хеширования необходимо изменить значение переменной HASH_ALGO в файле /etc/integrity/config, например, заменить HASH_ALGO="sha512" на HASH_ALGO="streebog512". Если необходимо выполнить активацию EVM, то следует раскоментировать строку: WITH_EVM=yes

  2. Запустить инициализацию подсистем контроля целостности в автоматическом режиме:

bash
integrity-applier --auto
  1. После перезагрузки системы войти в систему и проверить параметры командной строки ядра:
bash
cat /proc/cmdline 
# BOOT_IMAGE=/boot/vmlinuz root=UUID=19124d73-ad8b-4b83- ba28-350312a1b7f7 ro panic=30 init_on_free=1 loglevel=3 splash lsm=integrity quiet ima_hash=streebog512 ima_appraise=enforce

В командной строке ядра должен присутствовать параметр ima_appraise=enforce – система находится в режиме оценки контроля целостности;

  1. Добавить в автозагрузку и включить службы:
bash
systemctl enable --now integrity-scanner.service integrity-notifier.service ima-check.service
  1. Проверить наличие маркировки у файла можно, выполнив команду (пример для /usr/bin/less):
bash
getfattr -m - -d /usr/bin/less
echo /usr/bin/less | integrity-sign --stdin --verbose --verify --with-evm
evmctl -v ima_verify /usr/bin/less

Строка security.ima=... свидетельствует о том, что файл маркирован.

В журнале записи, связанные с нарушением целостности можно просмотреть командой:

bash
journalctl -r | grep INTEGRITY_DATA

Есть конфиг /etc/integrity/config и в нём есть две переменные: LIBDIRS и EXECLIBDIR. Пусть заказчик настроит те пути, которые ему нужны. Можно задать несколько путей через пробел.

На всякий случай кусочек кода, чтобы было понятно:

bash
find -P /bin /sbin /usr/bin /usr/sbin /usr/share /etc /var/lib $EXECLIBDIRS -type f -executable -print

# all libraries which don't carry an executable bit
#shellcheck disable=SC2086
find -P /var/lib $LIBDIRS -\! -executable -type f \( -name '*.so' -o -name '*.so.*' \) -print
  • Как я понимаю, параметры --cert= and --key= позволяют указать пользовательские ключи и сертификаты во время запуска второй стадии?

Если запускаете с --auto, то да, нужно указать путь до сертификата и ключа и они автоматически подхватятся на второй стадии. Но если запускаете вторую стадию вручную, то тогда нужно прямо в этот момент и указать пути.

  • А как тогда используется параметр -B BASENAME | --basename=BASENAME ?

По умолчанию он равен "x509" и сертификат устанавливается под именем /etc/keys/x509_ima.der. Опция на тот случай, если у вас несколько сертификатов и все их нужно установить в /etc/keys/. То есть, когда часть файлов вы подписываете одним ключом, а часть — другим. Там же такая история, что сторонние поставщики ПО будут подписывать его своими ключами. Следовательно, доверенных ключей в ядре может быть несколько.

Контакты: bystrovno@basealt.ru