Подсистема контроля целостности операционной системы должна поддерживать технологии IMA и EVM.
https://www.altlinux.org/IMA_EVM [[ЛКНВ.11100-01 99 03 Руководство по комплексу средств защиты.pdf]], стр 122-129
==Поднят стенд: IMA EVM==
- Изменить параметры монтирования файловой системы. Для этого следует выставить параметр
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/integrity/config
. Там же можно включить EVM в дополнение к IMA. Для изменения алгоритма хеширования необходимо изменить значение переменнойHASH_ALGO
в файле/etc/integrity/config
, например, заменитьHASH_ALGO="sha512"
наHASH_ALGO="streebog512"
. Если необходимо выполнить активацию EVM, то следует раскоментировать строку:WITH_EVM=yes
Запустить инициализацию подсистем контроля целостности в автоматическом режиме:
integrity-applier --auto
- После перезагрузки системы войти в систему и проверить параметры командной строки ядра:
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
– система находится в режиме оценки контроля целостности;
- Добавить в автозагрузку и включить службы:
systemctl enable --now integrity-scanner.service integrity-notifier.service ima-check.service
- Проверить наличие маркировки у файла можно, выполнив команду (пример для
/usr/bin/less
):
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=...
свидетельствует о том, что файл маркирован.
В журнале записи, связанные с нарушением целостности можно просмотреть командой:
journalctl -r | grep INTEGRITY_DATA
Есть конфиг /etc/integrity/config и в нём есть две переменные: LIBDIRS и EXECLIBDIR. Пусть заказчик настроит те пути, которые ему нужны. Можно задать несколько путей через пробел.
На всякий случай кусочек кода, чтобы было понятно:
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/. То есть, когда часть файлов вы подписываете одним ключом, а часть — другим. Там же такая история, что сторонние поставщики ПО будут подписывать его своими ключами. Следовательно, доверенных ключей в ядре может быть несколько.