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

Обеспечение безопасности разработки ПО

Интеграция с AppSec.Hub

AppSec.Code предоставляет возможности по обеспечению защищенности разрабатываемого ПО, основанные на интеграции с платформой безопасной разработки программного обеспечения AppSec.Hub:

  • Сканирование приложений, кодовых баз и артефактов на наличие известных уязвимостей.
  • Сканирование с использованием различных практик проверки безопасности кода (SAST/SCA/DAST).
  • Формирование отчетности о результатах сканирования.

Возможности работы в AppSec.Hub определяются теми правами, которые есть у пользователя AppSec.Hub, использующего свой токен для интеграции.

Подключение на уровне экземпляра

  1. Зайдите в инструмент AppSec.Hub и авторизуйтесь с правами администратора.

  2. В AppSec.Hub нажмите на имя пользователя в правом верхнем углу и в выпадающем меню выберите пункт User Profile.

  3. В AppSec.Hub в левом меню User Profile выберите пункт Tokens, а затем нажмите на кнопку Add new в правом верхнем углу.

  4. В появившемся окне Create new access token введите название токена и дату истечения срока его действия (необязательное поле).

  5. Скопируйте созданный токен из появившегося окна, нажав на кнопку Got it.

  6. Вернитесь на главную страницу AppSec.Hub и в левом меню выберите пункт меню Applications.

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

  8. Авторизуйтесь в AppSec.Code с правами администратора.

  9. Перейдите в раздел администрирования Системы.

  10. Перейдите в раздел администрирования Системы, в левой панели меню выберите Настройки, а затем выберите Интеграции.

  11. На странице Управление интеграцией на уровне экземпляра в разделе Добавить интеграцию в подразделе AppSec продукты выберите строку с инструментом AppSec.Hub и нажмите на кнопку Настроить.

  12. В AppSec.Code в настройках подключения на вкладке Настройки введите параметры:

    • В разделе Параметры подключения:

      • В поле Включить интеграцию установите флажок Активно.
      • URL адрес AppSec.Hub.
      • API токен - токен доступа администратора AppSec.Hub, который был создан ранее.
    • В разделе Таск-менеджер:

      • В поле Таск-менеджер по умолчанию можно выбрать ранее подключенный таск-менеджер для обработки уязвимостей, например TeamStorm.
    • Нажмите на кнопку Сохранить изменения.

Подключение на уровне проекта

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

Например, можно деактивировать интеграцию с AppSec.Hub на уровне экземпляра Системы и включить на уровне проекта.

Для подключения на уровне проекта:

  1. Перейдите в выбранный проект.

  2. Выберите Настройки, а затем выберите Интеграции.

  3. На странице Интеграции в разделе Добавить интеграцию в подразделе AppSec продукты выберите строку с инструментом AppSec.Hub и нажмите на кнопку Настроить.

  4. В AppSec.Code в настройках подключения на вкладке Настройки введите параметры:

    • В разделе Параметры подключения:

      • В поле Включить интеграцию установите флажок Активно.
      • URL адрес AppSec.Hub (может отличаться от значения этого параметра на уровне Системы).
      • API токен - токен доступа администратора AppSec.Hub, который был создан ранее (может отличаться от значения этого параметра на уровне Системы).
    • В разделе Таск-менеджер:

      • В поле Таск-менеджер по умолчанию можно выбрать ранее подключенный таск-менеджер для обработки уязвимостей, например TeamStorm.
    • Нажмите на кнопку Сохранить изменения.

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

  • Использовать настройки по умолчанию - уровень экземпляра Системы.
  • Использовать пользовательские настройки - уровень проекта.

Настройка параметров сканирования в проекте

  1. В AppSec.Code перейдите в нужный проект. В меню выберите пункт Настройки и далее подпункт Настройки сканирования.

  2. В появившемся окне Настройки сканирования установите флажки для необходимых практик.

  3. При переподключении AppSec.Hub или изменении его настроек, обновить настройки сканирования можно по нажатию на кнопку Обновить список доступных практик.

Запуск сканирования кодовой базы

  1. После подключения AppSec.Hub в AppSec.Code на домашней странице проекта кнопка Запустить сканирование кодовой базы будет доступна для нажатия и проведения сканирования, если на странице Настройки сканирования установлен флажок практики SAST.

  2. Выберите ветку с исходным кодом, на которой будет проводиться сканирование.

  3. Нажмите на кнопку Запустить сканирование кодовой базы.

  4. На странице появится сообщение об успешном или неуспешном запущенном сканировании.

Работа с найденными уязвимостями

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

Выберите пункт меню Безопасность и его подпункт Отчет об уязвимостях, чтобы перейти на страницу Отчет об уязвимостях.

На этой странице представлен список проведенных сканирований со следующей информацией:

  • Идентификатор сканирования в AppSec.Hub.
  • Дата и время сканирования.
  • Статус завершения сканирования.
  • Время выполнения сканирования.
  • Ветка, на которой проводилось сканирование.
  • Коммит, который сканировался.

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

На этой странице представлены статистика и список найденных уязвимостей со следующей информацией:

  • Статус уязвимости.
  • Критичность уязвимости.
  • Описание уязвимости. Нажмите на ссылку, чтобы посмотреть более подробную информацию об уязвимости.
  • Файл, в котором обнаружена уязвимость. Нажмите на ссылку, чтобы перейти в файл исходного кода.
  • CWE ID уязвимости со ссылкой на источник.
  • Данные об использованном для обнаружения уязвимости инструменте (который настроен в пайплайне AppSec.Hub).
  • Исполнитель (пользователь AppSec.Code).
  • Активность по данной уязвимости.

Интеграция с Обсуждениями

Примечание

В версии 26.1.1 для Issues используется термин Обсуждения (в предыдущих версиях - Вопросы).

Начиная с релиза 25.2.3, появилась интеграция между Отчетом об уязвимостях и системой управления Обсуждениями (Issues). Это позволяет эффективнее управлять исправлением уязвимостей, назначая их на конкретных исполнителей и отслеживая прогресс через стандартные Обсуждения проекта.

Для этого настройте таск-менеджер по умолчанию:

  1. Перейдите в меню НастройкиПодключение к AppSec.Hub.
  2. В поле Таск-менеджер по умолчанию выберите Стандартные Issues.

Примечание

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

Уязвимости и Обсуждения

Как назначить уязвимости на исправление:

  1. Открыть пункт меню БезопасностьОтчет об уязвимостях.
  2. Выбрать одну или несколько уязвимостей.
  3. Нажать Выберите исполнителя (из списка пользователей проекта).
  4. Нажать на кнопку В работу.

Примечание

Уязвимости со статусом В работе выбрать повторно нельзя.

Что происходит после этого:

  • Уязвимости получают статус В работе (колонка Активность).
  • В разделе Обсуждения для каждой из выбранных уязвимостей создаются новые задачи:
    • Название и Описание берутся из уязвимости.
    • Источник — это CWE уязвимости.
    • Исполнитель (Ответственный) — выбранный в Отчете об уязвимостях исполнитель (пользователь AppSec.Code).

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

  • Назначать подзадачи, связывать с эпиками.
  • Создавать запросы на слияние для исправления.
  • Обсуждать в комментариях, добавлять метки.

Когда Обсуждение закрывается, в Отчете об уязвимостях статус уязвимости в колонке Активность меняется на Устранено.

Пример рабочего процесса

  1. SAST находит уязвимость, она попадает в Отчет об уязвимостях.
  2. Руководитель назначает её на разработчика через Обсуждения.
  3. Разработчик создает запрос на слияние, исправляет код, после запроса на слияние Обсуждение закрывается.
  4. Статус в Отчете об уязвимостях автоматически меняется на Устранено.

Настройки сканирования SAST, SCA и DAST в редакторе пайплайна

Примечание

В версии 26.1.1 для Pipelines используется термин Конвейеры (в предыдущих версиях - Пайплайны).

  1. В левом меню выберите пункт Сборка и его подпункт Редактор конвейера.

  2. На открывшейся странице Редактор конвейера представлены кнопки с теми практиками, которые были выбраны в настройках сканирования этого проекта (SAST, SCA, DAST). После отключения отдельных практик в настройках сканирования проекта, при обновлении страницы Редактор конвейера кнопки, соответствующие отключенным практикам, больше не отображаются.

  3. При нажатии на кнопку с соответствующим названием происходит копирование в буфер обмена шаблона задачи для данной практики. Далее пользователь AppSec.Code может вставить из буфера обмена шаблон задачи в пайплайн и завершить редактирование актуальными данными.

  4. При запуске данного пайплайна, добавленные задачи запускают на стороне AppSec.Hub процессы сканирования, соответствующие практике, настроенной в задаче пайплайна.

SAST-сканирование с помощью semgrep

Начиная с релиза 25.4.1, добавлена возможность сканирования SAST с помощью утилиты semgrep для всех языков, которые semgrep поддерживает.

Для SAST-сканирования с помощью semgrep необходимо выполнить следующие шаги:

  1. В левом меню выберите пункт Сборка и его подпункт Редактор конвейера.

  2. На открывшейся странице Редактор конвейера в пайплайн необходимо добавить следующие строки:

    include:
      - template: Jobs/SAST.appsec_code-ci.yml
    
  3. При запуске данного пайплайна будет проведено SAST-сканирование с помощью утилиты semgrep. Результаты сканирования выводятся в лог пайплайна под заголовком Scan Status в стандартном для semgrep формате.

    SAST-сканирование с помощью semgrep не создаёт артефакты в задачах пайплайна, а сохраняет их в артефактах проекта. Для их просмотра выберите в проекте пункт меню Сборка и его подпункт Артефакты. Результаты сканирования сохранены здесь в файле gl-sast-report.json.

Сканирование с помощью AppSec.Track

Начиная с релиза 25.4.2, добавлена возможность сканирования с помощью инструмента AppSec.Track.

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

  1. В левом меню выберите пункт Сборка и его подпункт Редактор конвейера.

  2. На странице Редактор конвейера представлена кнопка AppSec.Track. Она копирует в буфер обмена шаблон для интеграции AppSec.Track CLI в пайплайн, см. документацию AppSec.Track. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .appsec_code-ci.yml.

    Перед запуском пайплайна необходимо настроить скрипт:

    • Объявить переменные DOCKER_AUTH и TRACK_ACCESS_TOKEN в настройках CI/CD проекта (пункт меню Настройки → подпункт CI/CD → раздел Переменные CI/CD).

      Если интеграция с AppSec.Track используется для сканирования образов из общедоступных источников, например docker.io, то настройка авторизации не нужна.

    • Указать токен пользователя AppSec.Track в переменной TRACK_ACCESS_TOKEN, а переменную TRACK_TOKEN в разделе variables: скрипта определить следующим образом:

      TRACK_TOKEN: "$TRACK_ACCESS_TOKEN"
      
    • Добавить переменную DOCKER_CONF в раздел variables: скрипта, например:

      DOCKER_CONF: '{ "auths": { "docker.your_company.com": { "auth": "$DOCKER_AUTH" }}}'
      
    • В переменной SCANNER_IMAGE: указать образ с актуальной версией утилиты AppSec.Track CLI (не ниже 3.21.0).

    • В переменной SCANNER_APP: указать имя сканируемого приложения в AppSec.Track.
    • В переменной SCANNER_TEAM: указать имя команды приложения в AppSec.Track.
    • В переменной APP_VERSION: указать версию приложения в AppSec.Track.
    • В переменной APP_ENVIRONMENT: указать окружение (допустимые значения: dev, test, prod, stage, release).
    • В переменной TRACK_URL: указать экземпляр AppSec.Track, с помощью которого осуществляется сканирование.
    • В переменной SBOM_NAME: указать имя файла, в который будет сохранен полученный в результате SBOM-файл.
    • В переменной SCANNING_IMAGE: указать сканируемый образ, если сканируется Docker-образ.
    • Закомментировать один из разделов Scan Repo: или Scan Image: в зависимости от типа сканируемого объекта.
  3. При запуске пайплайна будет проведено сканирование с помощью инструмента AppSec.Track. Результаты сканирования выводятся в лог пайплайна в стандартном формате инструмента AppSec.Track.

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

    artifacts:
        paths:
        - $SBOM_NAME
    

    В этом случае после завершения выполнения пайплайна для просмотра результатов сканирования можно выбрать в меню проекта пункт Сборка и его подпункт Артефакты. Результаты будут доступны в архиве artifacts.zip в SBOM-файле в формате JSON.

Анализ цикломатической сложности

Начиная с релиза 25.2.3, AppSec.Code предоставляет возможность проводить анализ цикломатической сложности исходного кода проекта с использованием инструмента Lizard. Это помогает контролировать качества кода:

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

Lizard анализирует исходный код и вычисляет следующие метрики:

  • NLOC — количество строк кода (без комментариев).
  • CCN (Cyclomatic Complexity Number) — цикломатическая сложность (количество линейно независимых путей выполнения в исходном коде). Чем выше значение CCN, тем сложнее код и тем меньше возможностей его поддерживать.
  • token — количество токенов (операторы, идентификаторы и т.д.).
  • PARAM — число параметров в функциях/методах.
  • length — длина кода (например, строк в функции).
  • location — путь к файлу и конкретному методу/классу.

Проблемные места в исходном коде помечаются предупреждениями (Warnings), если:

  • CCN > 15 — высокая цикломатическая сложность (слишком сложная логика).
  • length > 1 000 — слишком длинный код (например, функция).
  • NLOC > 1 000 000 — чрезмерно большой файл.
  • PARAM > 100 — слишком много параметров.

Использование в пайплайнах

  1. В меню проекта выберите пункт Сборка и его подпункт Редактор конвейера.

  2. На странице Редактор конвейера представлена кнопка CCN (Cyclomatic Complexity Number). Она копирует шаблон пайплайна Complexity Analyze в буфер обмена. Шаблон включает скрипт установки Lizard и вызов скрипта analyze.sh. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .appsec_code-ci.yml.

  3. Результаты выполнения скрипта выводятся в лог пайплайна и сохраняются в форматах: CSV, XML, HTML, CheckStyle, StdOut.

  4. Созданные артефакты (отчёты) сохраняются в проекте в папку Артефакты/complexity-report.

    • Архив с отчётами в разных форматах.
    • Более подробная информация, чем в логе (например, имя метода и путь к исходнику) позволяет детально изучить проблемные места в исходном коде.

Аналитика строк кода

В меню проекта выберите пункт Аналитика и его подпункт Аналитика строк кода.

На странице представлены следующие метрики:

  • Количество строк кода (LOC).
  • Количество функций (Functions).
  • Цикломатическая сложность (CC).

Можно задать следующие параметры метрик:

  • Выбрать ветку или тег.
  • Задать даты внесения изменений в исходный код в полях От и До (опциональный параметр).

Если поля От и До заполнены, значения в полях Количество строк кода, Количество функций и Цикломатическая сложность рассчитываются относительно сканирований для указанных дат. Если поля От и До не заполнены, значения рассчитываются относительно предпоследнего и последнего сканирований.

Поиск дубликатов кода

Начиная с релиза 25.4.1, реализована функциональность поиска дубликатов кода при сканировании кодовой базы, помогающая контролировать качество кода и включающая в себя:

  • Поддержку различных языков программирования (JavaScript, TypeScript, Java, C#, Python, Ruby, PHP, Go, C++, Swift, Kotlin, Scala, Rust и другие).
  • Анализ кода на наличие повторяющихся фрагментов.
  • Результаты анализа содержат информацию о количестве дубликатов и проценте дублирования, количестве проанализированных файлов и строк кода с разбиением по языкам и другие метрики.

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

  1. В меню проекта выберите пункт Сборка и его подпункт Редактор конвейера.

  2. На странице Редактор конвейера представлена кнопка DuplicateCheck. Она копирует шаблон для поиска дубликатов кода в буфер обмена. Шаблон включает в себя фрагмент для поиска дубликатов кода code-duplication с вызовом скрипта analyze.sh. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .appsec_code-ci.yml.

  3. Результаты выполнения скрипта выводятся в лог пайплайна и сохраняются в форматах HTML, JSON и CSV. Созданные отчёты сохраняются в артефактах выполненного задания в каталоге code-duplication-reports. Там же сохраняется лог анализа.

  4. В меню проекта выберите пункт Аналитика и его подпункт Аналитика дубликатов кода. На странице представлены метрики отчета по дубликатам.

    Можно задать следующие параметры метрик:

    • Выбрать ветку или тег.
    • Задать даты внесения изменений в исходный код в полях От и До (опциональный параметр).

    Раздел Срез заполняется при наличии нескольких отчетов и заполненных полях От и До.

Рейтинг разработчиков

Начиная с релиза 25.4.2, реализован рейтинг разработчиков проекта. Данный рейтинг показывает, какой вклад в проект внес каждый разработчик.

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

  1. В меню проекта выберите пункт Сборка и его подпункт Редактор конвейера.

  2. На странице Редактор конвейера представлена кнопка DeveloperRating. Она копирует шаблон для составления рейтинга в буфер обмена. Шаблон включает в себя фрагмент developer_rating с вызовом скрипта gitstats. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .appsec_code-ci.yml.

  3. После завершения выполнения скрипта выберите в меню проекта пункт Сборка и его подпункт Артефакты. Результаты выполнения доступны в задании с именем developer_rating.

  4. Для просмотра результатов выполнения скрипта выберите в меню проекта пункт Аналитика и его подпункт Статистика по разработчикам.

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

    • На вкладке Активность представлена статистика по количеству коммитов в проекте. Можно выбрать один из видов отображения статистики (по часам, по дням недели, по месяцам, по годам).

    • На вкладке Авторы представлен список авторов проекта, отсортированный по количеству коммитов. Для каждого автора приведены его имя, количество коммитов, количество добавленных и удаленных строк, даты первого и последнего коммита, общее количество дней в проекте, а также количество активных дней работы с кодом, в которые были осуществлены коммиты.

    • На вкладке Теги представлен список тегов проекта. Для каждого тега приведены его имя, дата создания, количество вошедших в тег коммитов, а также список авторов коммитов для этого тега.

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

AppSec.Code предоставляет возможность создавать и использовать в проектах политики безопасности.

В левом меню проекта выберите пункт Безопасность и его подпункт Политики. На этой странице представлены все политики проекта.

Типы политик

В системе существует два типа политик безопасности:

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

    • Предназначена для создания правил, проверяющих наличие уязвимостей безопасности и соответствие лицензии перед слиянием запроса на слияние.
    • Управляет процессом ревью запросов на слияние.
    • Может обеспечить обязательное ручное утверждение изменений независимо от наличия найденных уязвимостей.
    • Требует явного подтверждения от пользователя с заданной ролью или от указанных пользователей/групп.
    • Обеспечивает безопасность пуша в ветку по умолчанию/защищенные ветки (например, main).
  2. AppSec.Hub - Управление уязвимостями.

    • Предназначена для автоматизации процессов управления уязвимостями из AppSec.Hub.
    • Контролирует безопасность кода (уязвимости).
    • Обеспечивает автоматическое применение правил политики при наличии уязвимостей из AppSec.Hub.
    • Блокирует слияние только при условии, что сканерами SAST/SCA/DAST в выбранной ветке (ветках) найдено заданное количество уязвимостей выбранного уровня.
    • Требует подтверждения от пользователя с заданной ролью, например, Security Manager, или от выбранных пользователей/групп.
    • Обеспечивает безопасность пуша в ветку по умолчанию/защищенные ветки (например, main).

Примечание

В версии 26.1.1 вместо политики AppSec.Hub - Управление уязвимостями представлена Политика выполнения конвейера.

В проекте можно создавать политики одного или обоих типов, при этом правила, определенные в этих политиках, будут применяться параллельно и сохраняться в YAML-файле в сопутствующем проекте Security Policy Project.

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

  1. В левом меню проекта выберите пункт Безопасность и его подпункт Политики.

  2. Нажмите на кнопку Новая политика.

  3. Выберите тип политики и нажмите на кнопку Выберите политику.

  4. В редакторе политики задайте ее параметры:

    • Для политики типа Политика утверждения запроса на слияние укажите Имя политики.
    • Укажите Описание политики (опционально).
    • Выберите Статус политики (Включено/Отключено).
    • Задайте Правила политики (Когда, Сканеры, Ветки, Исключения, Количество уязвимостей, Критичность).
    • Задайте Действия политики (Количество требуемых подтверждений, от кого - Роли/Пользователи/Группы).

  5. Нажмите на кнопку Настроить при помощи запроса на слияние. После этого происходит переход в сопутствующий проект Security Policy Project.

  6. В сопутствующем проекте нажмите на кнопку Слияние.

  7. Вернитесь в основной проект. После произведенного слияния политика начинает действовать.

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

  1. Разработчик создает запрос на слияние из feature-branch в main.

  2. AppSec.Code применяет политики:

    • Если включена AppSec.Hub - Управление уязвимостями, система блокирует запрос на слияние, пока не исправлены уязвимости.
    • Если включена Политика утверждения запроса на слияние, система требует подтверждения от указанных пользователей.
  3. Утверждение запроса на слияние:

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