Обеспечение безопасности разработки ПО¶
Интеграция с 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, расположенной в правом верхнем углу, добавьте приложение, где будут определены шаблоны пайпланов, которые будут использоваться при запросах сканирования с AppSec.Code.
-
В AppSec.Code в настройках Подключение к AppSec.Hub введите параметры:
- URL адрес AppSec.Hub'а.
- API токен - токен доступа администратора AppSec.Hub, который был создан ранее.
-
Нажмите на кнопку Сохранить изменения и проверить подключение.

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

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

Обратите внимание, что практика 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 процессы сканирования, соответствующие практике, настроенной в задаче пайплайна.
SAST-сканирование с помощью semgrep¶
Начиная с релиза 25.4.1, добавлена возможность сканирования SAST с помощью утилиты semgrep для всех языков, которые semgrep поддерживает.
Для SAST-сканирования с помощью semgrep необходимо выполнить следующие шаги:
-
В левом меню выберите пункт Сборка и его подпункт Редактор пайплайна.
-
На открывшейся странице Редактор пайплайна в пайплайн необходимо добавить следующие строки:
include: - template: Jobs/SAST.gitlab-ci.yml -
При запуске данного пайплайна будет проведено SAST-сканирование с помощью утилиты semgrep. Результаты сканирования выводятся в лог пайплайна под заголовком Scan Status в стандартном для semgrep формате.
SAST-сканирование с помощью semgrep не создаёт артефакты в задачах пайплайна, а сохраняет их в артефактах проекта. Для их просмотра выберите в проекте пункт меню Сборка и его подпункт Артефакты. Результаты сканирования сохранены здесь в файле gl-sast-report.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 – слишком много параметров.
Использование в пайплайнах¶
-
В меню проекта выберите пункт Сборка и его подпункт Редактор пайплайна.
-
На странице Редактор пайплайна представлена кнопка CCN (Cyclomatic Complexity Number). Она копирует шаблон пайплайна Complexity Analyze в буфер обмена. Шаблон включает скрипт установки Lizard и вызов скрипта analyze.sh. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .gitlab-ci.yml.

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

-
Созданные артефакты (отчёты) сохраняются в проекте в папку Артефакты/complexity-report.
- Архив с отчётами в разных форматах.
- Более подробная информация, чем в логе (например, имя метода и путь к исходнику) позволяет детально изучить проблемные места в исходном коде.
Аналитика строк кода¶
В меню проекта выберите пункт Аналитика и его подпункт Аналитика строк кода.

На странице представлены следующие метрики:
- Количество строк кода (LOC).
- Количество функций (Functions).
- Цикломатическая сложность (CC).
Можно задать следующие параметры метрик:
- Выбрать ветку или тег.
- Задать даты внесения изменений в исходный код в полях От и До (опциональный параметр).
Если поля От и До заполнены, значения в полях Количество строк кода, Количество функций и Цикломатическая сложность рассчитываются относительно сканирований для указанных дат. Если поля От и До не заполнены, значения рассчитываются относительно предпоследнего и последнего сканирований.
Поиск дубликатов кода¶
Начиная с релиза 25.4.1, реализована функциональность поиска дубликатов кода при сканировании кодовой базы, помогающая контролировать качество кода и включающая в себя:
- Поддержку различных языков программирования (JavaScript, TypeScript, Java, C#, Python, Ruby, PHP, Go, C++, Swift, Kotlin, Scala, Rust и другие).
- Анализ кода на наличие повторяющихся фрагментов.
- Результаты анализа содержат информацию о количестве дубликатов и проценте дублирования, количестве проанализированных файлов и строк кода с разбиением по языкам и другие метрики.
Для поиска дубликатов необходимо выполнить следующие шаги:
-
В меню проекта выберите пункт Сборка и его подпункт Редактор пайплайна.
-
На странице Редактор пайплайна представлена кнопка DuplicateCheck. Она копирует шаблон для поиска дубликатов кода в буфер обмена. Шаблон включает в себя фрагмент для поиска дубликатов кода code-duplication с вызовом скрипта analyze.sh. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .gitlab-ci.yml.
-
Результаты выполнения скрипта выводятся в лог пайплайна и сохраняются в форматах HTML, JSON и CSV. Созданные отчёты сохраняются в артефактах выполненного задания в каталоге code-duplication-reports. Там же сохраняется лог анализа.
-
В меню проекта выберите пункт Аналитика и его подпункт Аналитика дубликатов кода. На странице представлены метрики отчета по дубликатам.
Можно задать следующие параметры метрик:
- Выбрать ветку или тег.
- Задать даты внесения изменений в исходный код в полях От и До (опциональный параметр).
Раздел Срез заполняется при наличии нескольких отчетов и заполненных полях От и До.
Политики безопасности¶
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 - Управление уязвимостями, система блокирует запрос на слияние, пока не исправлены уязвимости.
- Если включена Политика утверждения запроса на слияние, система требует подтверждения от указанных пользователей.
-
Утверждение запроса на слияние:
- Пользователь из списка подтверждающих заходит в запрос на слияние и нажимает на кнопку Утвердить.
- Только после этого запрос на слияние может быть смержен.