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

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

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

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

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

Настройка подключения к Appsec.Hub

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

  2. Перейдите в раздел Администрирование, в левой панели меню выберите Поиск или переход, а затем выберите Администрирование.

  3. Откройте страницу основных настроек Appsec.Code. Для этого в левом меню выберите пункт Настройки и его подпункт Основные.

  4. Найдите настройку Подключение к AppSec.Hub и раскройте ее с помощью кнопки Развернуть.

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

  6. В Appsec.Hub выберите в верхнем меню навигации User Profile.

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

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

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

  10. Вернитесь на главную страницу Appsec.Hub и в левом меню перейдите в раздел Applications.

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

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

    • URL адрес AppSec.Hub'а.
    • API токен - токен доступа администратора AppSec.Hub, который был создан ранее.
  13. Нажмите на кнопку Сохранить изменения и проверить подключение.

  14. При корректных URL и токене на экране появится надпись: Настройки приложения успешно сохранены. Подключение прошло успешно. AppSec.Hub доступен.

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

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

  2. В появившемся окне Настройки сканирования выберите требуемые практики, нажав на кнопку Подключить.

    Обратите внимание, что практика SCA поддерживается только для артефактов, а SAST - только для исходного кода.

  3. Убедитесь, что практика включена по сообщению Включено. Ненужную практику можно отключить с помощью соответствующей кнопки.

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

Запуск сканирования исходного кода (кодовой базы) и артефактов

  1. После включения практик SAST или SCA в Appsec.Code на домашней странице (т.е. на странице репозитория) проекта появится кнопка Сканировать.

  2. Нажмите на кнопку Сканировать. На открывшейся странице Параметры сканирования выберите нужную практику и нажмите на кнопку Начать сканирование.

    При выборе практики SCA становится доступно поле Введите URL для артефакта, в котором можно ввести ссылку на артефакт и его версию, хранящиеся в Nexus, Docker или другом репозитории.

  3. Appsec.Code возвратится на страницу репозитория проекта. На ней появится информационное сообщение об успешном или неуспешном запущенном сканировании.

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

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

На этой странице представлены таблица со статусом, критичностью и описанием уязвимости, данные об использованном для обнаружения уязвимости инструменте (который настроен в пайплайне Appsec.Hub), а так же CWE ID со ссылкой на источник. Нажмите на ссылку в колонке Описание, чтобы перейти на страницу с более подробной информации по конкретной уязвимости.

Интеграция с Вопросами

Начиная с релиза 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 в редакторе пайплайна

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

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

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

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

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

Начиная с релиза 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. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .gitlab-ci.yml.

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

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

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

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

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

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

Типы политик

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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