Настройка политик

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

Политики на платформе CodeScoring представляют собой механизм отслеживания и блокирования open source компонентов в процессе разработки программного обеспечения. Они могут быть связаны с проверкой безопасности, совместимости лицензий или других критериев включения сторонних компонентов в разработку.

При создании политики выбирается модуль:

  • SCA — анализ проектов и сборок. Политику можно ограничить подразделениями, группами проектов и проектами; этапы выбираются отдельно.
  • OSA — проверка пакетов и контейнерных образов в репозиториях артефактов. Для неё можно выбрать типы компонентов и репозитории; применяется этап proxy.

Модуль созданной политики изменить нельзя. Для другого модуля создайте отдельную политику.

Механизм политик учитывает указанный этап разработки программного обеспечения: от поступления сторонних компонентов в периметр организации до отслеживания сборок и написания нового кода.

Политики настраиваются по условиям, объединенным логическими выражениями И/ИЛИ. Помимо стандартных настроек политик безопасности по уровню критичности уязвимостей, условия могут быть настроены согласно метаданным компонента: дата релиза, лицензия, автор и другим. Всего поддерживается 70+ типизированных условий. Среди проверок также присутствует встроенная вендорская политика проверки на лицензионную чистоту.

В результате срабатывания политики в CodeScoring создаются соответствующие алерты. Алерты можно временно или навсегда проигнорировать, а также выгрузить их в виде отчета.

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

Дополнительно, по срабатыванию политики может быть направлено уведомление ответственным специалистам в систему управления задачами или электронное письмо с описанием проблемы.

Этапы работы политик

Для политик SCA этапы настраиваются при редактировании проекта в разделе Настройки → Проекты в поле Этап политики или указываются через параметр --stage при запуске консольного агента Johnny. Наименования стадий имеют следующие значения:

  • dev – этап разработки;
  • stage – промежуточный (предпромышленный) этап;
  • test – этап тестирования;
  • prod – промышленный контур.

При создании или редактировании политики SCA в разделе Настройки → Политики необходимо указать стадии, к которым она будет применяться.

Кроме того, существуют специальные значения стадий, используемые по умолчанию для определённых задач:

  • proxy – для плагина в модуле OSA;
  • source – для анализа проектов с привязкой к VCS;
  • build – для консольного агента Johnny.

Для политики OSA используется только этап proxy. Он назначается автоматически и недоступен для политики SCA.

Создание политики

Политики создаются в разделе Настройки -> Политики. Нажмите Создать и выберите модуль SCA или OSA. В списке политик модуль показан отдельной колонкой; записи можно фильтровать по модулю.

Выбор модуля политики

Общие параметры формы:

  • Название;
  • Уровень — уровень критичности политики (не влияет на действия в системе);
  • Блокер — блокировка сборки или загрузки компонента из прокси-репозитория;
  • Отложенная блокировка — задержка (в днях) от первого срабатывания политики до блокировки;
  • Активно — состояние политики;
  • Описание — описание политики;
  • Условия — перечень условий в политике.

Для SCA дополнительно указываются Группы, Подразделения, Проекты и обязательные Этапы. Если подразделения, группы и проекты не указаны, политика применяется ко всем подходящим проектам.

Форма политики SCA

Для OSA выбираются обязательные Компоненты OSA (Пакеты или Контейнерные образы) и при необходимости Репозитории с плагином OSA. Для контейнерных образов можно выбрать только Docker-репозитории.

Форма политики OSA

Набор условий зависит от модуля. Только в SCA доступны глубина транзитивности, поиск потомков зависимости, достижимость уязвимости, окружение, способ обнаружения, связь зависимости и проверка несовместимости лицензии с лицензией проекта. Только в OSA доступны условия по репозиторию и менеджеру репозиториев. Остальные условия из списка ниже доступны в обоих модулях, если не указано иное.

Далее настраиваются условия срабатывания политики, поддерживаются следующие параметры:

  • PURL — package URL, идентификатор компонента;
  • Название зависимости — имя используемого компонента;
  • Версия зависимости — конкретная версия компонента, обнаруженная в проекте;
  • Автор зависимости — имя или организация, указанные как автор компонента;
  • Дата публикации зависимости — дата первого появления версии зависимости в открытых источниках;
  • Возраст зависимости (в днях) — количество дней с момента публикации зависимости;
  • Количество уязвимостей в зависимости — общее число уязвимостей, связанных с компонентом;
  • Зависимость опасна – зависимость считается опасной, если у нее есть уязвимости с:
    • префиксом MAL- (фид вредоносных пакетов OSV);
    • одним из следующих CWE:
      • CWE-506: Внедренный вредоносный код;
      • CWE-507: Троянское ПО;
      • CWE-508: Нераспространяющийся вредоносный код;
      • CWE-509: Распространяющийся вредоносный код (вирус или червь);
      • CWE-510: Скрытые средства несанкционированного доступа;
      • CWE-511: Логическая или временная бомба;
      • CWE-512: Шпионское ПО;
      • CWE-912: Скрытые функции;
    • или одним из следующих значений поля Импакт в базе Kaspersky OSS Threats Data Feed:
      • Вредоносное ПО;
      • Другое влияние.
  • Зависимость является протестным ПО – зависимость считается протестным ПО, если у нее есть уязвимости из проприетарного фида protestware;
  • Зависимость является ПО-вымогателем – зависимость считается ПО-вымогателем, если у нее есть уязвимости, используемые в ПО-вымогателе по данным CISA-KEV;
  • Зависимость отозвана - зависимость отозвана из источника;
  • Зависимость из внутреннего источника – признак пакета внутренней разработки (inner source). Условие доступно только для политик SCA;
  • Зависимость является потомком – поиск на нижестоящих уровнях транзитивных зависимостей, относящихся к указанному родительскому компоненту. Поиск зависимости осуществляется для более глубоких уровней вложенности графа зависимостей. Например, для случая цепочки зависимостей a<-b<-c<-d потомками b будут с и d;
  • Глубина транзитивности зависимости - контролирует глубину поиска зависимостей, где 1 - прямая зависимость, 2 и более - транзитивные. Допускается указывать только натуральные числа;
  • Технология — язык программирования или экосистема;
  • Лицензия – SPDX-идентификатор лицензии;
  • Категория лицензии — классификация лицензии по типу (например, copyleft, permissive);
  • ID уязвимости — идентификатор уязвимости;
  • Оценка CVSS2 — численная оценка угрозы по стандарту CVSS 2;
  • Уровень угрозы CVSS2 — уровень угрозы по стандарту CVSS 2;
  • CVSS2 Access Vector (AV) – путь эксплуатации уязвимости (физический или сетевой);
  • CVSS2 Access Complexity (AC) – сложность эксплуатация уязвимости;
  • CVSS2 Authentication (Au) – требования аутентификации для эксплуатации уязвимости;
  • CVSS2 Availability Impact (A) – степень потери доступности данных;
  • CVSS2 Confidentiality Impact (C) – степень потери конфиденциальности данных;
  • CVSS2 Integrity Impact (I) – степень потери целостности данных;
  • Оценка CVSS3 — численная оценка угрозы по стандарту CVSS 3;
  • Уровень угрозы CVSS3 — уровень угрозы по стандарту CVSS 3;
  • CVSS3 Attack Vector (AV) — вектор атаки;
  • CVSS3 Attack Complexity (AC) — сложность атаки;
  • CVSS3 Privileges Required (PR) — требуемый уровень доступа для эксплуатации уязвимости;
  • CVSS3 User Interaction (UI) — наличие взаимодействия с пользователем;
  • CVSS3 Scope (S) — область безопасности компонента;
  • CVSS3 Confidentiality (C) — cтепень потери конфиденциальности данных;
  • CVSS3 Integrity (I) — степень потери целостности данных;
  • CVSS3 Availability (A) — степень потери доступности данных;
  • Оценка CVSS4 — численная оценка угрозы по стандарту CVSS 4;
  • Уровень угрозы CVSS4 — уровень угрозы по стандарту CVSS 4;
  • CVSS4 Attack Vector (AV) — вектор атаки;
  • CVSS4 Attack Complexity (AC) — сложность атаки;
  • CVSS4 Attack Requirements (AT) — наличие требований к атаке;
  • CVSS4 Privileges Required (PR) — требуемый уровень доступа для эксплуатации уязвимости;
  • CVSS4 User Interaction (UI) — наличие взаимодействия с пользователем;
  • CVSS4 Confidentiality Impact to the Vulnerable System (VC) — влияние на конфиденциальность уязвимой системы;
  • CVSS4 Confidentiality Impact to the Subsequent System (SC) — влияние на конфиденциальность последующей системы;
  • CVSS4 Integrity Impact to the Vulnerable System (VI) — влияние на целостность уязвимой системы;
  • CVSS4 Integrity Impact to the Subsequent System (SI) — влияние на целостность последующей системы;
  • CVSS4 Availability Impact to the Vulnerable System (VA) — влияние на доступность уязвимой системы;
  • CVSS4 Availability Impact to the Subsequent System (SA) — влияние на доступность последующей системы;
  • Дата публикации уязвимости — дата, когда уязвимость была впервые опубликована;
  • Дата обновления уязвимости — дата последнего обновления информации об уязвимости;
  • Уязвимость импакт (Kaspersky) – поле Импакт в базе Kaspersky OSS Threats Data Feed;
  • Уязвимость имеет эксплойт – признак наличия публичного эксплойта в базе знаний уязвимостей (NVD, GHSA, БДУ ФСТЭК или другой);
  • Уязвимость имеет исправление – признак наличия версии, на которую можно обновиться для устранения уязвимости;
  • Уязвимость достижима – уязвимый метод компонента используется в исходном коде. Более подробно об анализе достижимости можно прочесть в документации агента Johnny.
  • Возраст уязвимости (в днях) — количество дней с момента публикации уязвимости;
  • Окружение — окружение разработки;
  • Способ обнаружения — способ обнаружения зависимости (по манифесту, содержанию проекта или в результате разрешения зависимостей);
  • Связь — связь зависимости в проекте (прямая или транзитивная);
  • CWE — идентификатор типа уязвимости по стандарту Common Weakness Enumeration;
  • Репозиторий — название репозитория в менеджере репозиториев, из которого получен компонент;
  • Менеджер репозиториев — название подключенного менеджера репозиториев;
  • Категория протестного ПО — категория протестной уязвимости;
  • SSVC2 Эксплуатация — эксплуатируемость уязвимости;
  • SSVC2 Автоматизируемо — автоматизируемость уязвимости;
  • SSVC2 Техническое влияние — техническое влияние на уязвимую систему;
  • EPSS процент — вероятность использования уязвимости в реальных условиях в ближайшие 30 дней;
  • EPSS процентиль — доля уязвимостей с таким же или более низким баллом.

Есть возможность задать списковые значения для следующих параметров:

  • Список PURL
  • Список названий зависимостей
  • Список email авторов зависимостей
  • Список ID уязвимостей
  • Список окружений
  • Список технологий
  • Список лицензий
  • Список категорий лицензий
  • Список CWE
  • Список репозиториев
  • Список уровней угрозы CVSS2
  • Список уровней угрозы CVSS3
  • Список уровней угрозы CVSS4
  • Список категорий протестного ПО

Создание копии политики

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

Создание копии политики из меню списка

Или на форме политики нажать кнопку Создать копию.

Создание копии из карточки политики

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

Политики после обновления

При переходе на разделение по модулям политики только с этапом proxy становятся политиками OSA, остальные — SCA. Если у политики были и proxy, и другие этапы, она разделяется: исходная запись остаётся в SCA без proxy, создаётся отдельная политика OSA для proxy. Название и условия сохраняются; связанные репозитории переходят в OSA, а подразделения, группы и проекты остаются в SCA. Действия уведомлений копируются для политики OSA без ограничений по группам и проектам.

После обновления проверьте условия всех затронутых политик SCA и OSA, в том числе политик, которые не разделялись на две записи. Дерево условий сохраняется без изменений, поэтому оно может содержать условия, недоступные в новом модуле. Например, в OSA может остаться оператор Лицензия — несовместима или условие Связь, а в SCA — условие Репозиторий.

Такие политики не отключаются автоматически. Несовместимые условия продолжают участвовать в расчёте; в OSA они могут давать постоянный результат true или false и менять результат групп И/ИЛИ. При следующем редактировании политика с несовместимым условием не пройдёт проверку. Проверьте и исправьте условия после обновления.

Пример политики

Условия политики можно объединять в группы с помощью логических выражений И/ИЛИ. Группы не имеют ограничений по уровню вложенности и количеству условий.

Например, можно задать условия политики для следующего сценария – либо зависимость содержит уязвимость с эксплойтом и рекомендацию по исправлению, либо зависимость является директивной и содержит критическую уязвимость по стандарту CVSS 3.

Для создания такой политики необходимо добавить две группы, объединенные выражением ИЛИ. Это значит, что политика сработает при соответствии любой из перечисленных групп условий. Внутри группы задаются условия, объединенные выражением И.

Policy example

Политика становится активной сразу после создания по нажатию кнопки Создать. Для созданной политики можно настроить действия при ее срабатывании: уведомление на почту или создание задачи в Jira или Kaiten.

Важно: политики срабатывают во время анализа, поэтому важно их создать до запуска анализа.

Рекомендация: если оставить поля Подразделения, Группы и Проекты пустыми, политика будет применяться для всех активных проектов в системе.

Страница была полезна?