Перейти к содержанию

Вкладка безопасности

Доступно только в GitFlic Enterprise

Страница Безопасность используется для просмотра и обработки обнаруженных уязвимостей, найденных анализаторами безопасности проекта. Уязвимости на странице можно фильтровать по типу, снэпшоту, уровню опасности и другим параметрам.

Режим разметки позволяет выбирать классификацию для обнаружений (Ложное срабатывание или Подтвержденная уязвимость). Подробнее в статье про режим Разметки.

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

Загрузка отчетов

Поддерживаемые типы отчетов

На странице безопасности поддерживаются следующие типы отчетов:

Тип отчета Описание Формат Спецификация
SAST Результаты статического анализа безопасности исходного кода SARIF SARIF 2.1.0
DAST Результаты динамического анализа безопасности приложения SARIF SARIF 2.1.0
SCA Результаты анализа состава программного обеспечения и используемых компонентов CycloneDX CycloneDX в формате JSON или XML

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

Загрузка из конвейера

Анализатор безопасности запускается в задаче конвейера и формирует отчет поддерживаемого формата. После завершения задачи отчет передается в GitFlic и отображается на странице безопасности проекта.

Конфигурация и запуск анализатора выполняются на мощностях, используемых агентом CI/CD. Анализатор и сценарий его запуска необходимо выбрать и настроить для проекта самостоятельно.

Подробнее о подготовке отчетов и подключении анализаторов рассказано в статьях SAST, DAST и SCA.

Ручная загрузка

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

Для ручной загрузки отчета требуется:

  1. Открыть раздел управления отчетами на странице безопасности.
  2. Перейти к добавлению отчета.
  3. Загрузить подготовленный файл.
  4. Указать тип отчета.
  5. Выбрать ветку, к которой относится отчет.
  6. Завершить загрузку.

При ручной загрузке снэпшот связывается с последним коммитом выбранной рабочей ветки.

Ручная загрузка предназначена для случаев, когда отчёт безопасности необходимо добавить без CI/CD-конвейера.

За один раз можно передать до 30 файлов.

Загрузка пустого отчета

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

Снэпшоты отчетов

Отчеты объединяются в снэпшоты. Снэпшот фиксирует результаты анализа для конкретного состояния проекта.

Для отчета, сформированного в конвейере, снэпшот содержит ссылку на конвейер, в котором был получен отчет. На странице конвейера доступна ссылка на коммит, определяющий состояние репозитория на момент сканирования.

Таким образом, цепочка связей имеет следующий вид:

Снэпшот отчета → конвейер → коммит

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

При ручной загрузке снэпшот создается для последнего коммита выбранной рабочей ветки.

Обзор страницы уязвимости

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

Для каждой обнаруженной уязвимости доступна следующая информация: Важность, Ветка, Коммит, Утилита, Сканер, Актуальный снапшот, Статус, Класс.

На вкладке «По веткам» отображаются только те контексты уязвимости, которые одновременно:

  • относятся к веткам, находящимся в текущих настройках LTS;
  • уже были созданы для данной уязвимости при обработке отчётов.

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

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

Изменение состояния

Если для выбранного контекста создан объект исследования и у пользователя есть право управления уязвимостями, на странице доступны состояния:

  • Требует внимания;
  • Подтверждена;
  • Отклонена;
  • Разрешена.

Перевод в Разрешена требует дополнительного подтверждения. Это терминальное (конечное, финальное) состояние: после него перевести тот же объект исследования обратно в другое состояние нельзя.

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

Комментарии и дискуссии

Комментарии привязаны к контексту уязвимости. Поэтому обсуждение одной и той же обнаруженной уязвимости в разных LTS-ветках ведётся раздельно.

На странице есть два представления:

  • «Текущая ветка» — дискуссии выбранного контекста;
  • «Другие LTS-ветки» — дискуссии этой же уязвимости в остальных доступных LTS-контекстах.

В текущем контексте пользователь с соответствующими правами может:

  • начать новую дискуссию;
  • отвечать в существующей дискуссии;
  • пометить дискуссию решённой;
  • удалить собственный комментарий;
  • при наличии расширенного права удалить чужой комментарий.

Автор корневого комментария или пользователь с соответствующим правом может завершить дискуссию. Вкладка «Другие LTS-ветки» предназначена для просмотра. Чтобы оставить комментарий в другой ветке, необходимо выбрать её на вкладке «По веткам», после чего она станет текущим контекстом.

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

Настройка LTS-веток

Настройка находится в параметрах проекта в разделе «Безопасность».

LTS-ветки задают те ветки, по которым GitFlic группирует состояния уязвимостей. Это полезно, когда отчёты запускаются во множестве feature-веток, но результаты необходимо относить к ограниченному набору длительно поддерживаемых веток.

Порядок имеет значение: чем выше ветка находится в списке, тем выше её приоритет.

Работа с уязвимостями в Запросах на Слияние

При работе в Запросе на Слияние можно посмотреть не полный список уязвимостей веток (исходной и целевой), а разницу — изменения безопасности, которые вносит текущий Запрос на Слияние.

На вкладку Безопасность входят два типа уязвимостей:

  • уязвимость привносится запросом на слияние;
  • уязвимость решается запросом на слияние.

Для расчёта обнаружений необходимо включить «Конвейер слияния».

Расчёт привязан к состоянию веток на момент запуска конвейера:

  • коммит исходной ветки, для которого запущен конвейер;
  • коммит целевой ветки, зафиксированный при запуске конвейера.

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

Для одного вида анализа используются множества уязвимостей выбранных снэпшотов:

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

Пограничные случаи:

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