Обеспечение безопасности разработки ПО¶
Интеграция с AppSec.Hub¶
AppSec.Code предоставляет следующие функциональные возможности по обеспечению защищенности разрабатываемого ПО, основанные на интеграции с платформой безопасной разработки программного обеспечения AppSec.Hub:
- Сканирование приложений, кодовых баз и артефактов на наличие известных уязвимостей.
- Сканирование с использованием различных практик проверки безопасности кода (SAST/SCA/DAST/CS).
- Формирование отчетности о результатах сканирования.
Настройка подключения к Appsec.Hub¶
-
Авторизуйтесь в Appsec.Code с правами администратора.
-
Перейдите в раздел Администрирование, в левой панели меню выберите Поиск или переход, а затем выберите Администрирование.
-
Откройте страницу основных настроек Appsec.Code. Для этого в левом меню выберите пункт Настройки и его подпункт Основные.
-
Найдите настройку Подключение к AppSec.Hub и раскройте ее с помощью кнопки Развернуть.
-
Зайдите на Appsec.Hub и авторизуйтесь с правами администратора.
-
В Appsec.Hub выберите в верхнем меню навигации User Profile.
-
В Appsec.Hub в левом меню User Profile выберите пункт Tokens, а затем нажмите на кнопку Add new.
-
В появившемся окне Create new access token введите название токена и дату истечения срока его действия (необязательное поле).
-
Скопируйте созданный токен из появившегося окна, нажав на кнопку Got it.
-
Вернитесь на главную страницу Appsec.Hub и в левом меню перейдите в раздел Applications.
-
С помощью кнопки Add new добавьте приложение, где будут определены шаблоны security pipelines, которые будут использоваться при запросах сканирования с Appsec.Code.
-
В Appsec.Code в настройках Подключение к AppSec.Hub введите параметры:
- URL адрес AppSec.Hub'а.
- API токен - токен доступа администратора AppSec.Hub, который был создан ранее.
-
Нажмите на кнопку Сохранить изменения и проверить подключение.
-
При корректных URL и токене на экране появится надпись: Настройки приложения успешно сохранены. Подключение прошло успешно. AppSec.Hub доступен.
Настройка параметров сканирования в проекте¶
-
Перейдите в нужный проект. В левом меню зайдите в Настройки и выберите пункт Настройки сканирования.
-
В появившемся окне Настройки сканирования выберите требуемые практики, нажав на кнопку Подключить.
Обратите внимание, что практика SCA поддерживается только для артефактов, а SAST - только для исходного кода.
-
Убедитесь, что практика включена по сообщению Включено. Ненужную практику можно отключить с помощью соответствующей кнопки.
-
При переподключении Appsec.Hub или изменении его настроек, обновить настройки сканирования можно по нажатию на кнопку Обновить список доступных практик.
Запуск сканирования исходного кода (кодовой базы) и артефактов¶
-
После включения практик SAST или SCA в Appsec.Code на домашней странице (т.е. на странице репозитория) проекта появится кнопка Сканировать.
-
Нажмите на кнопку Сканировать. На открывшейся странице Параметры сканирования выберите нужную практику и нажмите на кнопку Начать сканирование.
При выборе практики SCA становится доступно поле Введите URL для артефакта, в котором можно ввести ссылку на артефакт и его версию, хранящиеся в Nexus, Docker или другом репозитории.
-
Appsec.Code возвратится на страницу репозитория проекта. На ней появится информационное сообщение об успешном или неуспешном запущенном сканировании.
Работа с найденными уязвимостями¶
После завершения сканирования можно просмотреть найденные уязвимости. В левом меню выберите пункт Безопасность и его подпункт Отчет об уязвимостях, чтобы перейти на страницу Отчет об уязвимостях.
На этой странице представлены таблица со статусом, критичностью и описанием уязвимости, данные об использованном для обнаружения уязвимости инструменте (который настроен в пайплайне Appsec.Hub), а так же CWE ID со ссылкой на источник. Нажмите на ссылку в колонке Описание, чтобы перейти на страницу с более подробной информации по конкретной уязвимости.
Интеграция с Вопросами¶
Начиная с релиза 25.2.3, появилась интеграция между Отчетом об уязвимостях и системой управления Вопросами (Issues). Это позволяет эффективнее управлять исправлением уязвимостей, назначая их на конкретных исполнителей и отслеживая прогресс через стандартные Вопросы проекта.
Для этого настройте таск-менеджер по умолчанию:
- Перейдите в меню Настройки → Подключение к AppSec.Hub.
- В поле Таск-менеджер по умолчанию выберите Стандартные Issues.
Примечание
При настроенной интеграции с инструментом TeamStorm существует возможность в качестве таск-менеджера по умолчанию выбрать TeamStorm, см. раздел TeamStorm.
Уязвимости и Вопросы¶
Как назначить уязвимости на исправление:
- Открыть пункт меню Безопасность → Отчет об уязвимостях.
- Выбрать одну или несколько уязвимостей.
- Нажать Выберите исполнителя (из списка пользователей проекта).
- Нажать на кнопку В работу.
Примечание
Уязвимости со статусом В работе выбрать повторно нельзя.
Что происходит после этого:
- Уязвимости получают статус В работе (колонка Активность).
- В разделе Вопросы для каждой из выбранных уязвимостей создаются новые задачи:
- Название и Описание берутся из уязвимости.
- Источник – это CWE уязвимости.
- Исполнитель (Ответственный) – выбранный в Отчете об уязвимостях исполнитель (пользователь AppSec.Code).
Далее можно управлять Вопросами как обычными задачами:
- Назначать подзадачи, связывать с эпиками.
- Создавать запросы на слияние для исправления.
- Обсуждать в комментариях, добавлять метки.
Когда Вопрос закрывается, в Отчете об уязвимостях статус уязвимости в колонке Активность меняется на Устранено.
Пример рабочего процесса¶
- SAST находит уязвимость, она попадает в Отчет об уязвимостях.
- Руководитель назначает её на разработчика через Вопросы.
- Разработчик создает запрос на слияние, исправляет код, после запроса на слияние Вопрос закрывается.
- Статус в Отчете об уязвимостях автоматически меняется на Устранено.
Настройки сканирования SAST, SCA и DAST в редакторе пайплайна¶
-
В левом меню выберите пункт Сборка и его подпункт Редактор пайплайна.
-
На открывшейся странице Редактор пайплайна представлены кнопки с теми практиками, которые были выбраны в настройках сканирования этого проекта (SAST, SCA, DAST). После отключения отдельных практик в настройках сканирования проекта, при обновлении страницы Редактор пайплайна кнопки, соответствующие отключенным практикам, больше не отображаются.
-
При нажатии на кнопку с соответствующим названием происходит копирование в буфер обмена шаблона задачи для данной практики. Далее пользователь Appsec.Code может вставить из буфера обмена шаблон задачи в пайплайн и завершить редактирование актуальными данными.
-
При запуске данного пайплайна, добавленные задачи запускают на стороне 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 – слишком много параметров.
Использование в пайплайнах¶
-
В левом меню проекта выберите пункт Сборка и его подпункт Редактор пайплайна.
-
На странице Редактор пайплайна представлена кнопка CCN (Cyclomatic Complexity Number). Она копирует шаблон пайплайна Complexity Analyze в буфер обмена. Шаблон включает скрипт установки Lizard и вызов скрипта analyze.sh. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .gitlab-ci.yml.
-
Результаты выполнения скрипта выводятся в лог пайплайна и сохраняются в форматах: CSV, XML, HTML, CheckStyle, StdOut.
-
Созданные артефакты (отчёты) сохраняются в проекте в папку Артефакты/complexity-report.
- Архив с отчётами в разных форматах.
- Более подробная информация, чем в логе (например, имя метода и путь к исходнику) позволяет детально изучить проблемные места в исходном коде.
Политики безопасности¶
AppSec.Code предоставляет возможность создавать и использовать в проектах политики безопасности.
В левом меню проекта выберите пункт Безопасность и его подпункт Политики. На этой странице представлены все политики проекта.
Типы политик¶
В системе существует два типа политик безопасности:
-
Политика утверждения запроса на слияние.
- Предназначена для создания правил, проверяющих наличие уязвимостей безопасности и соответствие лицензии перед слиянием запроса на слияние.
- Управляет процессом ревью запросов на слияние.
- Может обеспечить обязательное ручное утверждение изменений независимо от наличия найденных уязвимостей.
- Требует явного подтверждения от пользователя с заданной ролью или от указанных пользователей/групп.
- Обеспечивает безопасность пуша в ветку по умолчанию/защищенные ветки (например, main).
-
AppSec.Hub - Управление уязвимостями.
- Предназначена для автоматизации процессов управления уязвимостями из AppSec.Hub.
- Контролирует безопасность кода (уязвимости).
- Обеспечивает автоматическое применение правил политики при наличии уязвимостей из AppSec.Hub.
- Блокирует слияние только при условии, что сканерами SAST/SCA/DAST в выбранной ветке (ветках) найдено заданное количество уязвимостей выбранного уровня.
- Требует подтверждения от пользователя с заданной ролью, например, Security Manager, или от выбранных пользователей/групп.
- Обеспечивает безопасность пуша в ветку по умолчанию/защищенные ветки (например, main).
В проекте можно создавать политики одного или обоих типов, при этом правила, определенные в этих политиках, будут применяться параллельно и сохраняться в YAML-файле в сопутствующем проекте Security Policy Project.
Создание политики¶
-
В левом меню проекта выберите пункт Безопасность и его подпункт Политики.
-
Нажмите на кнопку Новая политика.
-
Выберите тип политики и нажмите на кнопку Выберите политику.
-
В редакторе политики задайте ее параметры:
- Для политики типа Политика утверждения запроса на слияние укажите Имя политики.
- Укажите Описание политики (опционально).
- Выберите Статус политики (Включено/Отключено).
- Задайте Правила политики (Когда, Сканеры, Ветки, Исключения, Количество уязвимостей, Критичность).
- Задайте Действия политики (Количество требуемых подтверждений, от кого - Роли/Пользователи/Группы).
-
Нажмите на кнопку Настроить при помощи запроса на слияние. После этого происходит переход в сопутствующий проект Security Policy Project.
-
В сопутствующем проекте нажмите на кнопку Слияние.
-
Вернитесь в основной проект. После произведенного слияния политика начинает действовать.
Пример применения политик¶
-
Разработчик создает запрос на слияние из feature-branch в main.
-
AppSec.Code применяет политики:
- Если включена AppSec.Hub - Управление уязвимостями, система блокирует запрос на слияние, пока не исправлены уязвимости.
- Если включена Политика утверждения запроса на слияние, система требует подтверждения от указанных пользователей.
-
Утверждение запроса на слияние:
- Пользователь из списка подтверждающих заходит в запрос на слияние и нажимает на кнопку Утвердить.
- Только после этого запрос на слияние может быть смержен.