ROSA Security test

Техническое описание

Общее

Интерфейс: /usr/share/rosa-security-test/rst.py
Назначение: Функциональный тест системы
Метод использования: Вызов из командной строки
ФТБ: FDP_RSI_EXT.1
FIA_UID.2
FMT_MSA.1
FPT_MTR_EXT.1
FPT_TST.1
FPT_STM.1

Параметры запуска

После первого запуска, rst настроит автодополнение команд по нажатию <tab> ⭾ (требуется перезагрузка терминала).

-h --help Вызов справки
-g --with-interface Запуск тестирования c графическим интерфейсом
-u --ultimate-mode Ультимативный режим запуска: при ошибках пользователь имеет право только на завершение сессии.
--fault-code Возвращать вместо кол-ва не пройденных тестов номер первого проваленного теста
-l --logtype "nolog" - без ведения лога
"file" - вести лог в файл см. --logpath
"journal" - вести лог в journald
"std" - вести лог в stdout\stderr
--log-level "error" - регистрировать только ошибки
"warning" - регистрировать ошибки и предупреждения (по-умолчанию)
"info" - регистрировать ошибки, предупреждения, информационные сообщения
"debug" - регистрировать все события включая отладочный вывод
-p --log-path При --logtype file указывает директорию в которую нужно сохранять лог.
-c --no-colors Не вставляет ANSI-коды подкрашивающие текст. Будет полезно, если лог не будет читаться с помощью терминала.

Сообщения об ошибках

ROSA Security Test имеет два вида ошибок: общие - ошибки работы самой проверяющей программы, включая неверные параметры запуска и синтаксические ошибки в коде; индивидуальные - ошибки проверки, уникальные для каждого теста, отражающие текущий статус функций безопасности. Оба вида ошибок присутствуют в логе.

Описания тестов

Проверка идентификации (UnidentifiedProcesses)

  • Тест проверяет файл /etc/passwd на дубликаты, а также на повторения uid и login. Если login или uid встречается в файле дважды, то тест будет провален.
  • Далее следует проверка всех текущих процессов и правильности ассоциации каждого процесса пользователю согласно /etc/passwd. Если будет обнаружен процесс имеющий login отсутствующий в /etc/passwd - тест будет провален. То же самое для uid процессов.

Проверка виртуализации служебных файлов (OverlayTest)

Тест проверяет смонтированы ли каталоги оверлея(механизм подстановки пользовательского окружения согласно уровню конфиденциальности): ".config", ".cache", ".local". Если хоть один из них не будет смонтирован - тест будет провален.

Проверка механизма подписей (IntegrityMeasurement)

  • Тест проверяет наличие параметров конфигурации ядра и их значения:

    CONFIG_IMA=y CONFIG_EVM=y

    Если параметр не будет найден или его значение не будет равно "y" - тест будет провален.

  • Тест проверяет наличие каталога

    /sys/kernel/security/integrity/ima/

    Согласно документации наличие этого каталога говорит о том, что подписи поддерживаются ядром по-умолчанию. Следовательно, если этот каталог не существует - тест будет провален.

  • Тест пытается создать исполняемый файл(без подписи) в домашней директории текущего пользователя и "запустить" его. Если ему это удастся - тест будет провален.

Проверка ограничения возможности пользователя по созданию файлов без контекста безопасности (FileWithoutContext)

  • Тест создает файл в домашней директории текущего пользователя файл, затем проверяет наличие у него контекстной метки безопасности, если она отсутствует - тест будет провален.
  • Тест создает файл в директории /tmp, затем проверяет наличие у него контекстной метки безопасности, если она отсутствует - тест будет провален.

Поддержка MLS при операциях над файлами (FileOperationsWithMLS)

Тест манипулирует определенной структурой файлов и каталогов, пытаясь выявить проблемы при маркировки новых объектов файловой системы. Структура выглядит следующим образом:

. ├── dirA │ └── test.txt └── dirB └── test.txt

Тестирование осуществляется для всех директорий внутри домашней директории пользователя, включая её саму, и делится на 3 этапа:

  • Создание структуры: если создать не удалось - тест будет провален.
  • Копирование структуры: если скопировать не удалось - тест будет провален.
  • Удаление структуры: если удалить не удалось - тест будет провален.

Этапы "Создания" и "Копирования" завершаются специальной(дополняющей) проверкой на корректность контекстных меток безопасности каждого объекта структуры(рекурсивно):

  • Если директория в /home не имеет метку или имеет отличную от user_home_dir_t или home_t - тест будет провален.
  • Если файл в /home не имеет метку или имеет отличную от home_t - тест будет провален.
  • Если selinux-пользователь в метке безопасности объекта отличается от того, который ассоциирован с текущим пользователем(субъектом создавшим этот объект) - тест будет провален.
  • Если объект имеет уровень конфиденциальности отличный от уровня конфиденциальности субъекта, который его увидел в /home - тест будет провален.
  • Если объект имеет категорию безопасности недоступную для субъекта, который его увидел в /home - тест будет провален.

В остальных случаях, при ошибке доступа к объекту, его проверка игнорируется.

Проверка ограничений пользователя на доступ к файлам и директориям (DeniedFileDirAccess)

Тест проверяет доступ пользователя ко всем существующим файлам в домашнем каталоге пользователя, а также /tmp и /var/tmp на соответствие модели доступа.

  • Если обнаружится файл с нечитаемой меткой безопасности, будет произведена попытка его чтения или записи в него, если одна из операций пройдет успешно - тест будет провален.
  • Если будет обнаружен файл с диапазоном уровней - тест будет провален.
  • Если файл с уровнем конфиденциальности ниже, чем у текущего пользователя, будет произведена попытка записи в него, в случае успеха - тест будет провален.
  • Если файл с уровнем конфиденциальности выше, чем у текущего пользователя, будет произведена попытка его чтения, в случае успеха - тест будет провален.
  • Если файл имеет категорию, а пользователь нет, будет произведена попытка его чтения, в случае успеха - тест будет провален.
  • Если файл имеет состав категорий не входящий в состав категорий пользователя, будет произведена попытка записи, в случае успеха - тест будет провален.

Далее следует проверка возможности пользователя осуществлять запись в корневые директории(кроме /tmp). Если запись будет произведена успешно - тест будет провален.

Проверка сервисов аудита (AuditServices)

Тест проверяет статусы сервисов осуществляющих аудит: systemd-jouranld-service, rsyslog-service, auditd.service, rosa-central-panel-serverd.service. Если хотя бы один сервис не запущен - тест будет провален.

Помимо этого тест анализирует последние 10 записей журнала по каждому сервису с целью обнаружения ключевых слов, на которые стоит обратить внимание: wrong, error, invalid, fault, terminated, killed, suspended.

Проверка ограничений пользователя на установку программного обеспечения (AccessToSoftwareInstallation)

Тест пытается установить и удалить пакет. Если хотя бы одна операция будет завершена успешно - тест будет провален.

Проверка ограничений пользователя на изменение системного времени (AccessToChangeSystemTime)

Тест пытается изменить системное время. Если попытка будет успешной - тест будет провален.

Общая проверка режима безопасности (1CommonTest)

Тест проверяет статус selinux. Если он находится в режиме disabled или permissive - тест будет провален. Затем тест проверяет включена ли поддержка multi-level security(mls), если нет - тест будет провален.

Проверка границ пользовательского пространства (FilePermissions)

Тест проверяет все файлы и директории(объекты) системы, кроме разрешенных пользователю для записи или чтения (регулируются mls).

Также исключены из проверки:

  • Сокеты

  • Симлинки

  • Директории:

    /tmp /var/tmp /run/user /home /mnt /media /sys /dev

    т.к. проверяются другими тестами (или контролируются SElinux)

  • Директория /proc т.к. она не содержит объектов которые "реально" поддерживают хранение информации. Также есть возможность сокрытия объектов этой директории, если в параметрах монтирования указать hidepid=2:

    /proc:proc /proc proc defaults,noexec,nodev,nosuid,hidepid=2 0
  • Объекты:

    • /dev/urandom
    • /dev/random
    • /dev/zero
    • /dev/null
    • /dev/dri/renderD128
    • /dev/full
    • /dev/mquene
    • /var/spool/postfix/dev/urandom
  • Объекты с метками:

    • var_run_tmp (mls)
    • cupsd_rw_etc_t (mls)

В следующих ситуациях тест будет провален:

  • Если будет обнаружен объект, владельцем которого является текущий пользователь.
  • Если будет обнаружен объект, который принадлежит группе из состава тех групп, в которых состоит пользователь, и при этом, этой группе будет доступно право записи применимое к этому объекту.
  • Если будет обнаружен объект с разрешением записи "для всех".