Организация замкнутой программной среды в zVirt SE
1. Общие сведения
Замкнутая программная среда (ЗПС) в zVirt SE использует подсистемы ядра Linux Integrity Measurement Architecture (IMA) и Extended Verification Module (EVM). Подсистемы проверяют целостность файловой системы.
1.1. Основные компоненты
IMA (Integrity Measurement Architecture) блокирует запуск измененного файла.
Режимы IMA:
-
Измерение (measurement) — пассивный режим, в котором собираются хеш-образы файлов (эталоны).
-
Оценка (appraisal) — активный режим, в котором текущий хеш файла сравнивается с эталоном, и при несовпадении доступ к файлу запрещается.
EVM (Extended Verification Module) проверяет метаданные файла и блокирует их изменение. К метаданным относятся security.ima, security.selinux, идентификатор пользователя (UID) и идентификатор группы (GID).
1.2. Принцип работы
Система работает по цепочке доверия.
Ядро собирается с корневым сертификатом удостоверяющего центра (УЦ). В хранилище ключей ядра загружается сертификат пользователя, заверенный этим УЦ. Исполняемые файлы подписываются закрытым ключом этого сертификата.
При доступе к файлу ядро проверяет подпись публичным ключом из хранилища .ima. Доступ разрешается только после подтверждения подписи.
2. Инструкция по настройке ЗПС
2.1. Подготовка сертификата
Для оценки целостности файлов подготовьте сертификат в формате DER.
-
Создайте запрос на подпись сертификата (Certificate Signing Request, CSR), например, по примеру конфигурационного файла myreq.cnf:
openssl req -new -newkey rsa:2048 -nodes -keyout myserver.key -out myserver.csr -config myreq.cnfГде:
-
myserver.key— файл, в который сохраняется закрытый ключ; -
myserver.csr— файл запроса на подпись сертификата (CSR); -
myreq.cnf— файл конфигурации запроса: владелец, организация и расширения сертификата.
-
-
Передайте файл запроса (в этом примере — myserver.csr) в УЦ Orion Soft (по электронной почте admin@orion) для заверения.
-
Получите подписанный сертификат (в этом примере — myserver.crt).
-
Конвертируйте подписанный сертификат в формат DER:
openssl x509 -in myserver.crt -out x509_ima.der -outform DERКоманда создает файл x509_ima.der.
[ req ]
# Базовые настройки для генерации запроса (CSR)
default_bits = 2048 # Разрядность ключа
default_md = sha256 # Алгоритм хеширования
prompt = no # Не задавать вопросы интерактивно, а брать всё из файла
distinguished_name = req_distinguished_name # Какая секция описывает DN
req_extensions = v3_req # Какая секция описывает расширения для CSR
# Секция Distinguished Name (DN) - информация о владельце сертификата
[ req_distinguished_name ]
# Замените значения в кавычках на свои
C = RU # Страна (2 буквы)
ST = Moscow # Штат или область
L = Moscow # Город
O = RRR GMBH # Название организации
OU = IT Security Dept # Отдел
CN = ima-signing-key # Common Name, обычно указывает на владельца ключа
emailAddress = admin@rrr.ru # Email для связи
# Секция с расширениями для запроса на подпись (CSR)
[ v3_req ]
# Основные параметры для code signing
keyUsage = digitalSignature # Использование ключа для цифровой подписи
extendedKeyUsage = critical,codeSigning # Использование для подписи кода (критично)
# Секция с альтернативными именами (SAN). Если не нужен, можно удалить или закомментировать.
subjectAltName = @alt_names
# Список альтернативных имён (SAN)
[ alt_names ]
DNS.1 = rrr.ru # Доменное имя
DNS.2 = rrr2.ru # Дополнительное доменное имя
2.2. Настройка узла
Чтобы включить ЗПС на узле zVirt SE, выполните действия:
-
Скопируйте сертификат x509_ima.der в каталог /etc/keys.
-
Поместите закрытый ключ myserver.key в защищенное хранилище.
-
Создайте файл политики /etc/ima/ima-policy с правилами оценки файлов:
echo -e "dont_appraise fsmagic=0x1021994\nappraise func=BPRM_CHECK mask=MAY_EXEC\nappraise func=MMAP_CHECK mask=MAY_EXEC " > /etc/ima/ima-policy -
Настройте dracut, чтобы включить сертификат в initramfs (начальную файловую систему в ОЗУ):
echo -e " install_items+= /etc/keys/x509_ima.der " > /etc/dracut.conf.d/ima.conf dracut -f -
Добавьте в конфигурацию GRUB параметр логирования, чтобы сначала проверить работу ЗПС:
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_appraise=log" -
Подпишите исполняемые файлы и библиотеки:
find /usr /etc /boot /opt /var -type f \( -perm /0111 -o -name "*.so*" \) -print0 | xargs -0 -I {} sh -c 'evmctl ima_sign --key myserver.key "$1"' -- {} -
Если проверка логов подтвердила работу ЗПС, включите принудительную блокировку:
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_appraise=enforce"
3. Администрирование и проверка
3.1. Команды управления
-
Загрузка сертификата в хранилище
.ima:keyctl padd asymmetric "" %:.ima < x509_ima2.der -
Просмотр подписи файла:
getfattr -n security.ima /path/to/file -
Просмотр ключей в хранилище
.ima:keyctl list %:.ima
3.2. Хранилища ключей (Keyrings)
В системе используются глобальные хранилища:
| Хранилище | Назначение |
|---|---|
|
Ключи, встроенные в ядро при компиляции |
|
Ключи, загруженные в систему и подтвержденные встроенными ключами |
|
Проверка подписей исполняемых файлов |
|
Защита метаданных |
|
Ключи оборудования (Machine Owner Key, MOK) |
|
Ключи из прошивки или UEFI |
|
Отозванные ключи |