Применимо к редакции: МСВСфера 9 (ФСТЭК)

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>

После сохранения изменений функция контроля целостности для виртуальной машины будет отключена.