14.15. Контроль целостности
14.15.1. Контроль целостности исполняемых файлов и конфигурации гипервизора
Контроль целостности конфигурационных и исполняемых файлов, а также разделяемых библиотек гипервизора и загрузчиков (прошивок) BIOS и UEFI осуществляется с помощью утилиты AIDE (Advanced Intrusion Detection Environment), которая входит в комплект поставки операционной системы МСВСфера.
Контролю целостности подлежат следующие объекты:
/etc/libvirt/*.conf
— конфигурационные файлы компонентов среды виртуализации;/usr/share/edk2/ovmf/*.fd
— файлы UEFI-прошивки;/usr/share/seabios/bios-256k.bin
— файл BIOS-прошивки;исполняемые файлы и разделяемые библиотеки компонентов гипервизора.
Процедура установки, настройки и работы с утилитой aide
описана в главе «9.2. Программа для контроля целостности AIDE» руководства администратора.
В конфигурации по умолчанию aide
автоматически отслеживает изменения файлов
прошивок, исполняемых файлов и разделяемых библиотек гипервизора.
Для отслеживания изменений конфигурационных файлов перед инициализацией базы
данных aide
добавьте следующий блок в конфигурационный файл /etc/aide.conf
перед строкой /etc PERMS
:
# libvirt components configuration
/etc/libvirt/.*.conf$ CONTENT_EX
Если база данных aide
уже была инициализирована, обновите её согласно разделу «9.2.3. Обновление базы данных aide» после изменения конфигурации.
После этого вы можете использовать команду aide --check
для проверки
целостности в том числе и компонентов гипервизора, в случае обнаружения
нарушений вы получите соответствующее предупреждение в отчёте:
$ sudo aide --check
Start timestamp: 2025-01-22 13:58:18 +0300 (AIDE 0.16)
AIDE found differences between database and filesystem!!
Summary:
Total number of entries: 191099
Added entries: 0
Removed entries: 0
Changed entries: 3
---------------------------------------------------
Changed entries:
---------------------------------------------------
f ... .C... : /etc/libvirt/virtqemud.conf
f ..g ..... : /usr/bin/virt-qemu-run
f ..g ..... : /usr/share/seabios/bios-256k.bin
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /etc/libvirt/virtqemud.conf
SHA512 : rIklyUlys8wRXd81qxtyLDD4xQyRJRFo | yG0f0GD9rvQGa1CRkxuYSTTmNgBBjTO6
lMx9va0S8rFIWej/xY32WbWGTyU6bRIF | DhgUMGd7EH03616hyxOOkyDGIM96Is9x
NkQaE1F5J3Bvjoo0t/CVKw== | epJF/77v7xXI1m31YgzX0A==
File: /usr/bin/virt-qemu-run
Gid : 0 | 1000
File: /usr/share/seabios/bios-256k.bin
Gid : 0 | 1000
Также вы можете настроить периодический запуск aide
через службу cron
чтобы получать отчёты о целостности системы по электронной почте.
14.15.2. Контроль целостности конфигурации виртуальной машины
Гипервизор libvirt, поставляемый в составе сертифицированной версии операционной системы МСВСфера поддерживает автоматический контроль целостности конфигурации виртуальной машины, а также её первичного загрузчика (BIOS или UEFI-прошивки). В случае обнаружения факта нарушения целостности запуск виртуальной машины будет заблокирован системой.
Для активации функции контроля целостности вам необходимо установить пакет
sphere-libvirt-integrity
:
$ sudo dnf install sphere-libvirt-integrity
Какая-либо дополнительная конфигурация не требуется — проверка будет автоматически выполняться для всех виртуальных машин.
Эталонные контрольные суммы конфигурационных файлов и первичного загрузчика
виртуальной машины вычисляются в момент легитимного изменения конфигурации
виртуальной машины. Таковым считается изменение, выполненное пользователем
с соответствующими правами доступа в рамках установленной ролевой модели с
помощью штатных инструментов гипервизора: команд virsh edit
или
virsh define
, утилиты virt-manager
или API libvirt. Изменение, выполненное
любым другим способом, будет считаться нарушением целостности.
Если на момент установки пакета sphere-libvirt-integrity
в вашей системе уже
были созданы виртуальные машины, то вам необходимо выполнить любое изменение
их конфигурации одним из вышеперечисленных способов — это станет триггером для
вычисления системой эталонных контрольных сумм. Например:
# экспортировать конфигурацию виртуальной машины msvsphere-9-arm в файл
# msvsphere-9-arm.xml
$ virsh dumpxml --inactive --security-info msvsphere-9-arm > msvsphere-9-arm.xml
# обновить конфигурацию виртуальной машины msvsphere-9-arm из файла
# msvsphere-9-arm.xml
$ virsh define msvsphere-9-arm.xml
Domain 'msvsphere-9-arm' defined from msvsphere-9-arm.xml
На этапе сохранения конфигурации будут вычислены контрольные суммы, необходимые для работы системы.
В случае выявления нарушения целостности объектов контроля запуск такой виртуальной машины будет заблокирован:
$ virsh start msvsphere-9-arm
ошибка: Failed to start domain 'msvsphere-9-arm'
ошибка: Ошибка выполнения сценария обработчика: \
внутренняя ошибка: Дочерний процесс \
(LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin /etc/libvirt/hooks/qemu \
msvsphere-9-arm prepare begin -), не ожидалось состояние выхода 1
А в системный журнал событий безопасности службы auditd
будет добавлено
соответствующее событие с типом VIRT_INTEGRITY_CHECK
:
$ sudo ausearch -m VIRT_INTEGRITY_CHECK -ts recent
----
time->Mon Feb 10 20:54:40 2025
type=VIRT_INTEGRITY_CHECK msg=audit(1739210080.578:262): pid=2131 \
uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:virtd_t:s0-s0:c0.c1023 \
msg='virt=kvm vm="msvsphere-9-arm" uuid=459f0e74-2c86-42a8-8f24-5a45cc437a9b \
op=vm-config-check reason="Config-hash-mismatch-aborting-start" \
reason-code=20 exe="/usr/bin/python3.9" hostname=? addr=? terminal=? res=failed'
Формат данных, используемый в записях журнала аудита, подробно описан в разделе «6.4.1. Формат файла журнала событий безопасности» руководства администратора, так что здесь рассмотрим только поля, специфичные для данного типа события:
vm="msvsphere-9-arm"
— название виртуальной машины, для которой выполнялась проверка целостности;uuid=459f0e74-2c86-42a8-8f24-5a45cc437a9b
— уникальный идентификатор (UUID) виртуальной машины;op=vm-config-check
— название проверки, во время которой было обнаружено нарушение целостности.Допустимые значения:
vm-config-check
— проверка конфигурационного файла и загрузчика виртуальной машины;vm-files-check
— проверка целостности файлов внутри виртуальной машины. Эта функция будет рассмотрена в следующем разделе.
reason="Config-hash-mismatch-aborting-start"
— причина, по которой проверка завершилась неудачей. В данном случае — несоответствие контрольной суммы конфигурации виртуальной машины.reason-code=20
— код ошибки.Допустимые значения:
20
— нарушение целостности конфигурационного файла виртуальной машины;21
— нарушение целостности первичного загрузчика (прошивка BIOS/UEFI) виртуальной машины;22
— ошибка при чтении файла с эталонными контрольными суммами.
14.15.3. Контроль целостности файлов виртуальной машины
Гипервизор libvirt из состава сертифицированной версии МСВСфера ОС также поддерживает функцию контроля целостности файлов, которые находятся внутри виртуальной машины.
В текущей реализации этой функции есть следующие ограничения:
поддерживаются только гостевые операционные системы на базе GNU/Linux;
поддерживаемые файловые системы: Ext 2/3/4 и XFS;
не поддерживается работа с зашифрованными дисками и сетевыми хранилищами;
не поддерживается автозапуск виртуальных машин с включённой функцией контроля целостности файлов.
Для активации функции контроля целостности файлов вам необходимо установить
пакет sphere-libvirt-integrity
если вы не сделали этого ранее:
$ sudo dnf install sphere-libvirt-integrity
Далее, вам необходимо выключить виртуальную машину и задать список файлов для
отслеживания с помощью команды virsh file-integrity
. Например, следующие
команды включат проверку целостности для файлов /etc/passwd
и /etc/shadow
виртуальной машины msvsphere-9-arm
:
$ virsh shutdown msvsphere-9-arm
Domain 'msvsphere-9-arm' is being shutdown
$ virsh file-integrity msvsphere-9-arm --path-add /etc/passwd
$ virsh file-integrity msvsphere-9-arm --path-add /etc/shadow
Список отслеживаемых файлов можно посмотреть с помощью следующей команды:
$ virsh file-integrity msvsphere-9-arm --list-files
FilePath Hash
---------------------
/etc/passwd
/etc/shadow
Обратите внимание, в столбце Hash отсутствует информация по причине того, что эталонные контрольные суммы файлов ещё не были вычислены. Для их вычисления выполните команду:
$ sudo virsh file-integrity msvsphere-9-arm --update-hash
FilePath Hash
---------------------------------------------------------------------------------
/etc/passwd 870994e271e33bd7c83ef53c1955a1a1afd91f11af4c035f09c6ab1e5224b6af
/etc/shadow 475fc32b7d05c65d9334d5c0030f2371bdb8112233c19d755d20fec4d61ba8e9
На этом процедура настройки завершена — виртуальную машину можно включать.
В случае обнаружения нарушения целостности отслеживаемых файлов во время запуска виртуальной машины запуск будет заблокирован:
$ virsh start msvsphere-9-arm
ошибка: Failed to start domain 'msvsphere-9-arm'
ошибка: Ошибка выполнения сценария обработчика: \
внутренняя ошибка: Дочерний процесс \
(LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin \
/etc/libvirt/hooks/qemu msvsphere-9-arm prepare begin -), не ожидалось состояние выхода 1
А в системный журнал событий безопасности будет добавлена соответствующая
запись, имеющая тип VIRT_INTEGRITY_CHECK
:
$ sudo ausearch -m VIRT_INTEGRITY_CHECK -ts recent
----
time->Tue Feb 11 19:41:23 2025
type=VIRT_INTEGRITY_CHECK msg=audit(1739292083.307:724): \
pid=5959 uid=0 auid=4294967295 ses=4294967295 \
subj=system_u:system_r:virtd_t:s0-s0:c0.c1023 \
msg='virt=kvm vm="msvsphere-9-arm" \
uuid=459f0e74-2c86-42a8-8f24-5a45cc437a9b \
op=vm-files-check reason="Hash-of-file-mismatch" \
reason-code=4 filepath="/etc/passwd" \
filehash="e0937f15d8fd333aff2acc9c79c00dc2d10287502093305289e8d5cd3b70bcfa" \
expectedhash="870994e271e33bd7c83ef53c1955a1a1afd91f11af4c035f09c6ab1e5224b6af" \
exe="/usr/bin/python3.9" hostname=? addr=? terminal=? res=failed'
Формат данных, используемый в записях журнала аудита, подробно описан в разделе «6.4.1. Формат файла журнала событий безопасности» руководства администратора, так что здесь рассмотрим только поля, специфичные для данного типа события:
vm="msvsphere-9-arm"
— название виртуальной машины, для которой выполнялась проверка целостности;uuid=459f0e74-2c86-42a8-8f24-5a45cc437a9b
— уникальный идентификатор (UUID) виртуальной машины;op=vm-files-check
— название проверки, во время которой было обнаружено нарушение целостности. Допустимые значения:vm-files-check
— проверка целостности файлов внутри виртуальной машины. Эта функция будет рассмотрена в следующем разделе.vm-config-check
— проверка конфигурационного файла и загрузчика виртуальной машины;
reason="Hash-of-file-mismatch"
— причина, по которой проверка завершилась неудачей. В данном случае — несоответствие контрольной суммы файла.reason-code=4
— код ошибки. Допустимые значения:4
— реальная контрольная сумма файла отличается от эталонной;3
— ошибка вычисления контрольной суммы файла;2
— отслеживаемый файл не найден в виртуальной машине;1
— возникла ошибка при монтировании диска виртуальной машины;0
— диск не найден в конфигурации виртуальной машины.
filepath="/etc/passwd"
— путь к файлу;filehash=""
— реальная контрольная сумма файла;expectedhash=""
— ожидаемая контрольная сумма файла.
В случае если обнаруженные изменения являются корректными, вам необходимо обновить эталонные контрольные суммы файлов перед повторным запуском виртуальной машины:
$ sudo virsh file-integrity msvsphere-9-arm --update-hash
FilePath Hash
---------------------------------------------------------------------------------
/etc/passwd e0937f15d8fd333aff2acc9c79c00dc2d10287502093305289e8d5cd3b70bcfa
/etc/shadow a1218b7c44b77929d5068689a31ef66fc2144f98a4817e46dd241e53b2496a8e
При необходимости, отключить контроль целостности файла (в данном примере
/etc/passwd
) можно с помощью следующей команды:
$ virsh file-integrity msvsphere-9-arm --path-delete /etc/passwd
$ virsh file-integrity msvsphere-9-arm --list-files
FilePath Hash
---------------------------------------------------------------------------------
/etc/shadow a1218b7c44b77929d5068689a31ef66fc2144f98a4817e46dd241e53b2496a8e
Для отключения функции контроля целостности файлов остановите виртуальную машину, запустите редактор XML конфигурации виртуальной машины:
$ virsh shutdown msvsphere-9-arm
$ virsh edit msvsphere-9-arm
И полностью удалите секцию <fi:fileintegrity ...>...</fi:fileintegrity>
не
изменяя при этом остальные данные:
<domain type='kvm'>
<name>msvsphere-9-arm</name>
<uuid>459f0e74-2c86-42a8-8f24-5a45cc437a9b</uuid>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://msvsphere-os.ru/msvsphere/9"/>
</libosinfo:libosinfo>
<fi:fileintegrity xmlns:fi="http://libvirt.org/schemas/domain/metadata/fileintegrity/1.0" check="1">
<fi:item path="/etc/shadow" hash="a1218b7c44b77929d5068689a31ef66fc2144f98a4817e46dd241e53b2496a8e"/>
</fi:fileintegrity>
</metadata>
...
</domain>
После сохранения изменений функция контроля целостности для виртуальной машины будет отключена.