Настройка проверки целостности (SIG)

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

Примечание

Документация описывает настройку SIG-сервиса в среде OpenStack Antelope, установленного с использованием kolla-ansible.

Требования к системе

  • Установленный и настроенный Agent (см. «Установка и настройка»);

  • В контейнере tos-agent установлена утилита afick;

  • В контейнер tos-agent проброшен сокет Docker для выполнения команд в nova_libvirt:

    volumes:
      - "/run/docker.sock:/run/docker.sock:shared"
      - "/usr/bin/docker:/usr/bin/docker:ro"
    
  • Контейнер tos-agent имеет доступ к XML-файлам виртуальных машин (обычно через общий том с nova_libvirt):

    volumes:
      - "/etc/libvirt/qemu/:/etc/libvirt/qemu/:ro"
    

Настройка

Для настройки SIG-сервиса необходимо в конфигурационном файле agent.conf указать sig в параметре agent_type и добавить секцию [sig]:

[DEFAULT]
agent_type = control,sig

[sig]
destroy_vm = true
signature_check_interval = 60
verifier_config_path = /etc/tos/afick.conf
vm_configs_filepath = /etc/libvirt/qemu/
system_check_dir = /usr/share/qemu,/usr/share/seabios,/usr/share/OVMF
sign_config_opts = /usr/share/qemu PARSEC,/usr/share/seabios PARSEC,/usr/share/OVMF PARSEC,/etc/libvirt/qemu/ agent,/var/lib/nova/instances/_base agent,/etc/libvirt/secrets agent

Параметры секции [sig]:

  • destroy_vm — уничтожать ВМ при компрометации. Значения: true, false;

  • signature_check_interval — интервал проверки в секундах. По умолчанию: 60;

  • verifier_config_path — путь к конфигу afick. По умолчанию: /etc/afick.conf;

  • vm_configs_filepath — путь к XML-файлам ВМ. По умолчанию: /run/libvirt/qemu/;

  • system_check_dir — список системных директорий для проверки (через запятую). Если не задан — проверка не выполняется;

  • sign_config_opts — правила проверки в формате путь правило, разделенные запятой. Правила определяют проверяемые атрибуты файлов:
    • agent — права, дата, имя, владелец, группа, размер, блоки, MD5;

    • DIR — права, inode, ссылки, владелец, группа;

    • ETC — права, дата, владелец, группа, размер, MD5;

    • Logs — права, ссылки, владелец, группа.

Настройка контейнера

При использовании kolla-ansible инициализация базы данных afick выполняется на этапе bootstrap контейнера:

if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
    afick -i -c /etc/tos/afick.conf
    exit 0
fi

Для хранения базы данных необходимо создать том:

volumes:
  - "tos:/var/lib/tos"

Конфигурационный файл afick должен содержать пути к базе данных, истории и архиву. Пример содержимого /etc/tos/afick.conf:

database:=/var/lib/tos/afick/afick
history:=/var/lib/tos/afick/history
archive:=/var/lib/tos/afick/archive

Принцип работы

SIG-сервис с интервалом signature_check_interval выполняет два типа проверок: целостность виртуальных машин и целостность системных директорий. Обновление базы данных afick выполняется при запуске сервиса.

Проверка виртуальных машин

Сервис сканирует директорию vm_configs_filepath и для каждого найденного XML-файла ВМ выполняет команду:

afick -c /etc/tos/afick.conf -k -l /etc/libvirt/qemu/<vm>.xml

При обнаружении изменений в XML-файле ВМ считается скомпрометированной. Если параметр destroy_vm установлен в true, выполняется уничтожение ВМ командой:

docker exec -u root nova_libvirt virsh destroy <vm>

Cloud Manager оповещается о компрометации.

Проверка системных директорий

Сервис проверяет директории из параметра system_check_dir:

afick -c /etc/tos/afick.conf -k -l <system_dir>

При обнаружении изменений узел переводится в режим обслуживания.

Обновление базы данных

При запуске сервиса проверяется наличие базы данных afick. Если база существует — выполняется её обновление:

afick -c /etc/tos/afick.conf -u

Если база отсутствует — сервис завершает работу с ошибкой. Инициализация базы данных должна быть выполнена на этапе bootstrap контейнера.

Дополнительно

  • Если system_check_dir не задан — проверка системных директорий не выполняется.

  • При добавлении новой директории необходимо указать её в system_check_dir и sign_config_opts.

  • База данных afick хранится в томе tos и сохраняется между перезапусками контейнера.