Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Пользовательская проверка соответствия

Пользовательские скрипты можно запускать на контейнерах и хостах для использования в проверках соответствия и других оценках. Пользовательская проверка соответствия — это bash-скрипт, который можно запустить на любом контейнере для проверки условий и вывода результатов в раздел соответствия контейнера или узла.

1. Настройка переменной окружения

Возможность создания пользовательских скриптов по умолчанию отключена для защиты от несанкционированного использования. Ее можно включить, настроив переменную окружения CUSTOM_CHECK_CONTROL в контроллере и энфорсере (хостовом агенте) подов NeuVector.

Возможные значения: disable (по умолчанию, запрещено), strict (только для роли администратора) или loose (для ролей администратора, соответствия и политики выполнения).

Для настройки переменной выполните следующие шаги:

  1. В веб-интерфейсе Nova Container Platform перейдите на страницу АдминистрированиеCustomResourceDefinitions.

  2. С помощью поисковой строки найдите и нажмите на Kustomizations.

  3. На странице Kustomizations перейдите ко вкладке Инстансы и с помощью поиска найдите nova-release-neuvector-main.

  4. Нажмите на nova-release-neuvector-main и перейдите на вкладку YAML. Добавьте следующий патч в блок spec:

  patches:
    - patch: |-
        apiVersion: apps/v1
        kind: StatefulSet
        metadata:
          name: neuvector-controller-pod
          namespace: nova-neuvector
        spec:
          template:
            spec:
              containers:
              - name: neuvector-controller-pod
                env:
                - name: CUSTOM_CHECK_CONTROL
                  value: loose
      target:
        kind: StatefulSet
        name: neuvector-controller-pod
        namespace: nova-neuvector
    - patch: |-
        apiVersion: apps/v1
        kind: DaemonSet
        metadata:
          name: neuvector-enforcer-pod
          namespace: nova-neuvector
        spec:
          template:
            spec:
              containers:
              - name: neuvector-enforcer-pod
                env:
                - name: CUSTOM_CHECK_CONTROL
                  value: loose
      target:
        kind: DaemonSet
        name: neuvector-enforcer-pod
        namespace: nova-neuvector

2. Ограничения и особенности

Пользовательские скрипты следует использовать с особой осторожностью. Пользовательский скрипт может запустить любой исполняемый файл в пространстве имен контейнера с привилегиями контейнера. Исполняемые файлы, такие как rm, format, fdisk и т.д., могут быть деструктивными. Это предостережение также относится к узлам кластера. Пользовательские скрипты проверки на узлах могут быть еще более разрушительными, если они имеют доступ к мастер узлу кластера.

  • Пользовательские скрипты запускаются с теми же привилегиями, что и запущенный контейнер.

  • Результат проверки соответствия удаляется после удаления пользовательского скрипта.

  • Пользовательские проверки соответствия должны соответствовать определенному формату, чтобы правильно отразить результаты в отчете о соответствии для контейнера или узла.

    • Скрипт начинается с оператора if для проверки определенного условия.

    • Пользовательская проверка считается пройденной, если код завершения равен 0.

    • Пользовательская проверка завершается неудачей, если код завершения равен 1.

  • Для завершения скриптов отводится 1 минута, в противном случае они останавливаются, и в результате проверки соответствия выдается сообщение об ошибке.

  • Скрипт может быть выполнен во всех трех режимах работы: Discover, Monitor и Protect.

2.1. Примеры скриптов

Пример скрипта для проверки наличия у контейнера учетной записи root без пароля
if [ $(cat /etc/shadow | grep  'root:::0:::::') ]; then
     DESCRIPTION="CVE-2019-5021 fails."
     echo $DESCRIPTION;
     exit 1;
else
     echo "CVE-2019-5021 pass";
     exit 0;
fi
Пример скрипта для проверки файла "cow" в контейнере
if [ $(find . / | grep -w 'cow') ]; then
     DESCRIPTION="cow seen in the container"
    echo $DESCRIPTION;
    exit 1;
else
    echo "no cow found pass";
    exit 0;
fi

3. Создание пользовательского скрипта для проверки

  1. В веб-интерфейсе NeuVector перейдите на вкладку PolicyGroups и выберите группу.

  2. Перейдите на вкладку Custom Check.

  3. Введите название скрипта. Пробелы не допускаются.

  4. Скопируйте и вставьте скрипт в раздел скриптов. Для примера используйте скрипт для проверки файла cow в контейнере.

  5. Нажмите кнопку Add, чтобы добавить скрипт.

  6. Для просмотра результата работы скрипта перейдите в меню AssetsContainers → выберите контейнер → Compliance или AssetsNodes → выберите узел → Compliance.

Скрипты запускаются на контейнерах, охватываемых сервисной группой, сразу после создания скрипта, а также при его обновлении.

4. Создание правила ответа для отчета соответствия

Правила реагирования, основанные на результатах проверки соответствия требованиям, можно создать в разделе PolicyResponse Rules. Результаты относятся к категории Compliance, и для всех событий определенного уровня можно создать ответы.

  1. В веб-консоли NeuVector перейдите на вкладку PolicyResponse Rules и нажмите на кнопку Add to Top.

  2. Выберите Compliance.

  3. Введите имя группы обслуживания в поле Group и выберите нужную группу.

  4. Выберите уровень level:Warning в поле Add Criteria.

  5. Включите необходимые действия: Quarantine, Webhook и/или Suppress Log.

  6. Переведите ползунок статуса в состояние Enabled.

  7. Нажмите кнопку Add, чтобы добавить правило ответа.

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