1.7.28 Замкнутая программная среда
Для контроля целостности компонентов ОС используется IMA. Компонент архитектуры измерения целостности (IMA) производит проверки целостности во время выполнения файлов с использованием хэшей, сравнивая их со списком допустимых хэшей.
Работает, начиная с версии ядра 5.15.* из репозитория РЕД ОС.
Для проведения контроля целостности необходимо перейти в сеанс пользователя root:
su -
и выполнить следующие действия:
1. Установить пакеты для работы с IMA:
dnf install ima-manage openssl-gost-engine keyutils
2. Включить ГОСТ в openssl:
openssl-switch-config gost
3. Сгенерировать пару ключей.
а) Создать файл test-ca.conf со следующим содержимым:
[ req ]
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = v3_ca
[ req_distinguished_name ]
O = IMA-CA
CN = IMA/EVM certificate signing key
emailAddress = ca@ima-ca
[ v3_ca ]
basicConstraints=CA:TRUE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
Значения полей O, CN, emailAddress являются произвольными, можно заменить их на свои. Место расположения файла не играет роли, он нужен только для создания пары ключей один раз.
б) Сгенерировать ключевую пару:
openssl req -nodes -x509 -utf8 -days 10000 -batch -config test-ca.conf -newkey gost2012_512 -pkeyopt paramset:A -out x509_evm.der -outform DER -keyout privkey_evm.pem
4. Создать папку /etc/keys/ima/ и скопировать в нее открытый ключ x509_evm.der.
mkdir /etc/keys/ima/ cp x509_evm.der /etc/keys/ima/x509_evm.der
Секретный ключ «privkey_evm.pem» сохранить в каталоге, недоступном для всех пользователей, кроме администратора root, например:
mv privkey_evm.pem /root/privkey_evm.pem
5. В файл /usr/lib/systemd/system/dracut-pre-mount.service в секцию [Service] добавить строку KeyringMode=shared.
6. В файле /usr/lib/dracut/modules.d/98integrity/module-setup.sh в функции check() изменить 255 на 0:
# called by dracut
check() {
return 0
}
7. Создать файл /etc/sysconfig/ima-policy со следующим содержимым:
# PROC_SUPER_MAGIC
dont_measure fsmagic=0x9fa0
dont_appraise fsmagic=0x9fa0
# SYSFS_MAGIC
dont_measure fsmagic=0x62656572
dont_appraise fsmagic=0x62656572
# DEBUGFS_MAGIC
dont_measure fsmagic=0x64626720
dont_appraise fsmagic=0x64626720
# TMPFS_MAGIC
dont_measure fsmagic=0x01021994
dont_appraise fsmagic=0x01021994
# RAMFS_MAGIC
dont_appraise fsmagic=0x858458f6
# DEVPTS_SUPER_MAGIC
dont_measure fsmagic=0x1cd1
dont_appraise fsmagic=0x1cd1
# BINFMTFS_MAGIC
dont_measure fsmagic=0x42494e4d
dont_appraise fsmagic=0x42494e4d
# SECURITYFS_MAGIC
dont_measure fsmagic=0x73636673
dont_appraise fsmagic=0x73636673
# SELINUX_MAGIC
dont_measure fsmagic=0xf97cff8c
dont_appraise fsmagic=0xf97cff8c
# CGROUP_SUPER_MAGIC
dont_measure fsmagic=0x27e0eb
dont_appraise fsmagic=0x27e0eb
# CGROUP2_SUPER_MAGIC
dont_measure fsmagic=0x63677270
dont_appraise fsmagic=0x63677270
# NSFS_MAGIC
dont_measure fsmagic=0x6e736673
dont_appraise fsmagic=0x6e736673
appraise func=BPRM_CHECK appraise_type=imasig
appraise func=BPRM_CHECK appraise_type=imasig
appraise func=FILE_MMAP mask=MAY_EXEC appraise_type=imasig
appraise func=FILE_MMAP mask=MAY_EXEC appraise_type=imasig
#appraise func=MODULE_CHECK appraise_type=imasig
#appraise func=FIRMWARE_CHECK appraise_type=imasig
# this is only for newer kernels that support loading policies
# from file by writing the file path to the ima sysfs node
#appraise func=POLICY_CHECK appraise_type=imasig
8. Запустить утилиту ima-manage с ключом init:
ima-manage init
9. В файле /etc/ima-manage.conf изменить значение HASHALGO="sha256" на HASHALGO="streebog512".
10. Запустить утилиту «ima-manage» с ключом «signfs» и указанием пути размещения секретного ключа:
ima-manage signfs /root/privkey_evm.pem
11. Запустить утилиту ima-manage с ключом «enforce»:
ima-manage enforce
Дождаться завершения работы утилиты и предложения перезагрузки. Дать согласие на перезагрузку системы.
Для проверки работы защиты от запуска неподписанных исполняемых файлов создайте копию существующего исполняемого файла, например:
cp /bin/ls ls.copy
Попробуйте его запустить, будет выведена ошибка:
./ls.copy bash: ./ls.copy: Permission denied
При этом в логе аудита появится запись о запрете запуска неподписанного файла:
grep -i ima /var/log/audit/audit.log | tail -n 1 type=INTEGRITY_DATA msg=audit(1638974599.231:11315): pid=2800 uid=1000 auid=1000 ses=2 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=appraise_data cause=IMA-signature-required comm="bash" name="/home/user/ls.copy" dev="dm-0" ino=946370 res=0 errno=0UID="user" AUID="user"
Для запуска сторонних файлов, не имеющих подписи, необходимо от имени администратора подписать файл:
evmctl ima_sign --hashalgo md_gost12_512 --key <путь_к_приватному_ключу_privkey_evm.pem> <путь_к_файлу>
Например:
evmctl ima_sign --hashalgo md_gost12_512 --key /root/privkey_evm.pem /home/user/ls.copy
Для включения режима журналирования (система не будет запрещать запуск неподписанных файлов, но будет записывать попытки их запуска) необходимо в файле /etc/default/grub изменить параметр ima_appraise=enforce на ima_appraise=log.
После этого обновите конфигурацию загрузчика ОС, для этого выполните в терминале команду:
- для систем, использующих BIOS:
grub2-mkconfig -o /boot/grub2/grub.cfg
- для систем, использующих UEFI:
grub2-mkconfig -o /boot/efi/EFI/redos/grub.cfg
Дата последнего изменения: 03.04.2023
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.