Security Gate — это наша внутренняя AppSec-платформа, объединяющая инструменты и практики для проверки безопасности кода, зависимостей и других компонентов разработки. Платформа помогает находить потенциальные проблемы безопасности, приоритизировать результаты сканирования и встраивать проверки в привычный процесс работы с кодом.

В статье разберём, из чего состоит Security Gate, как устроены приоритизация находок и интерфейс и какие возможности доступны разработчикам.

Состав платформы

Security Gate позволяет анализировать безопасность несколькими способами. 

SAST: статический анализ кода

Сервис помогает находить потенциально опасные паттерны с помощью сигнатурных правил и межфайлового taint-анализа.

SAST может выявлять:

  • SQL-инъекции;

  • XSS;

  • RCE;

  • неправильную обработку данных;

  • отсутствие санитайзеров;

  • и другие антипаттерны, связанные с безопасностью кода.

SCA: анализ зависимостей

С помощью сервиса мы проверяем используемые в проектах open-source библиотеки на уязвимости и признаки компрометации. Он не ограничивается простым сопоставлением зависимостей с фидами. Сервис анализирует достижимость уязвимых методов по коду: проверяет явность вызовов и учитывает отношение зависимость к dev- или prod-реализации.

Поиск protestware и malware

Protestware — это зависимости и уязвимости, нацеленные на определённые страны или группы пользователей. Они активируются только при выполнении конкретных условий, например при заданной локали или диапазоне IP-адресов. Круг атаки может быть узким, поэтому сообщество Open Source не всегда быстро обнаруживает такие угрозы. Для поиска protestware мы используем собственные фиды, формируемые на основе анализа open-source проектов.

Поиск секретов

Если секрет попадает в репозиторий в открытом виде — это проблема. Платформа учитывает специфику таких находок и помогает отделять значимые секреты от dev-, локальных и других подобных значений.

Сканирование контейнеров

Сервис Fast Scanner автоматически проверяет изменения в момент создания merge request и сигнализирует о проблемах прямо в GitLab до того, как код куда-либо попал. Платформа также умеет сканировать контейнеры в Kubernetes и One-cloud. Подробнее о Fast Scanner расскажем ниже.


При обнаружении уязвимости платформа может оповещать через бота в VK WorkSpace. Его можно добавить в свой чат, указать проекты или продукты для мониторинга и настроить условия уведомлений — например, получать сообщения только по High и Critical или только по Critical SAST.

Поддерживаемые языки и технологии

Платформа поддерживает широкий набор языков и технологий, но уровень поддержки зависит от языка и доступных инструментов анализа. Среди поддерживаемых — Python, TypeScript, JavaScript, Go, Java, Ruby, Rust, Elixir, Dart, Swift, PHP, HTML и C/C++.

Для некоторых языков поддержка ограничена. Например, для Swift статический анализ работает только по правилам, без taint-анализа, а C/C++ сложнее анализировать из-за особенностей сборки и окружений. Поиск секретов покрывает все языки.

Приоритизация уязвимостей

Одна из ключевых задач платформы — не просто найти проблему, а помочь понять, насколько она важна. Сырые инструменты анализа часто переоценивают критичность найденных дефектов. Из-за этого в категории High и Critical попадает много срабатываний, которые не всегда требуют такого уровня внимания. Чтобы этого избежать, мы внедрили в Security Gate собственный механизм приоритизации.

Приоритизация правил SAST

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

Динамическая приоритизация

В Security Gate она работает на основе метаданных кода. Если платформа определяет, что код похож на тесты, автотесты, моки, фейки или другие реализации, не относящиеся к эксплуатации, то срабатывание не закрывается, но его критичность автоматически понижается. Такое срабатывание не попадает в SLA и не требует внимания в обычных процессах разработки.

Собственный калькулятор критичности CVE

Для CVE платформа использует собственный калькулятор критичности. При оценке учитываются не только стандартные CVSS-векторы: один из основных факторов — вероятность эксплуатации уязвимости в реальной среде в ближайшие 30 дней.

Модель учитывает несколько параметров:

  • наличие эксплойта;

  • наличие эксплойта в открытом доступе;

  • возможность автоматизировать эксплуатацию;

  • информацию об уязвимости в профильных каталогах;

  • обязательность зависимости для проекта;

  • вызов методов зависимости в коде;

  • принадлежность зависимости к dev- или prod-сборке.

Если Security Gate видит, что методы уязвимой зависимости явно вызываются в коде, то такая зависимость считается более значимой для проекта.

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

Приоритизация секретов

Для секретов тоже используется механизм динамической приоритизации. Отдельно для них работает LLM-триаж — подробнее о нём расскажем ниже.

Интерфейс Security Gate

Security Gate — инфраструктурный сервис, доступный штатным сотрудникам VK. После входа пользователь попадает на страницу со списком проектов. Для каждого проекта отображаются:

  • название;

  • ссылка на репозиторий;

  • дата последнего сканирования;

  • количество найденных уязвимостей;

  • распределение находок по уровням критичности.

В интерфейсе доступны фильтры: можно учитывать архивные проекты, экспериментальные правила, статусы срабатываний, нужные инструменты и другие параметры. Значения в разделах Critical, High, Medium и Low показывают количество срабатываний соответствующего уровня в проекте.

Также в интерфейсе есть механизм переопределения критичности. Если команда считает, что критичность срабатывания нужно изменить, то можно указать новый статус. Это касается SAST, SCA и секретов.

Анализ зависимостей

В разделе SCA отображаются компоненты, в которых найдены уязвимости. Для каждой зависимости приводятся связанные CVE и дополнительная информация о срабатывании.

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

В карточке срабатывания отображаются:

  • влияние;

  • информация о срабатывании;

  • инструменты, которые обнаружили срабатывание.

Дедупликация срабатываний

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

Статический анализ кода

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

Для некоторых срабатываний доступен просмотр потока данных.

Поток данных

Функция раскрытия потока данных показывает не только место срабатывания, но и путь данных в программе.

Security Gate учитывает источники, промежуточные участки и санитайзеры, которые встречаются по пути. Это помогает понять, как именно данные доходят до потенциально опасного места. Если до одного и того же участка можно дойти несколькими путями, то эти потоки отображаются отдельно.

Подробности срабатывания

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

  • путь до проекта;

  • дату обнаружения;

  • последние изменения строк кода;

  • сотрудника, который вносил последние изменения;

  • ссылку на конкретный сниппет в GitLab;

  • описание проблемы;

  • рекомендации;

  • примеры уязвимого кода;

  • примеры исправления.

Статусы, комментарии и история изменений

В Security Gate можно подтверждать или отклонять срабатывания, возвращать их в необработанное состояние и оставлять комментарии. При отклонении можно указать причину. В комментариях видно, кто и когда оставил сообщение. Доступна и история изменений: кто, когда и какие действия выполнял со срабатыванием.

Интеграция с Jira

Платформа интегрируется с Jira: можно связывать срабатывания с задачами и работать с находками в привычном для команды процессе.

Кросс-веточный триаж

Security Gate поддерживает кросс-веточный триаж. Если одно и то же срабатывание появляется в нескольких ветках, то не нужно решать по каждой отдельно — достаточно один раз выставить вердикт, и он учтётся для связанных случаев.

Фильтрация

Результаты можно фильтровать по:

  • веткам;

  • тегам;

  • хешам;

  • статусам срабатываний;

  • уровню критичности;

  • наличию задачи в Jira;

  • пользователям, которые меняли статус;

  • инструментам;

  • правилам инструмента;

  • пути до файла;

  • экспериментальным правилам.

Экспериментальные правила по умолчанию не показываются пользователям платформы и не учитываются при подсчёте SLA.

Экспорт отчётов

Из Security Gate можно скачать отчёт в XLSX или CSV. При выгрузке можно указать нужные фильтры и поля. Платформа также работает с SBOM-отчётами.

Триаж: LLM для разбора срабатываний

В Security Gate интегрирован механизм VK Triage. Он помогает разбирать срабатывания: отделять ложноположительные от значимых, дополнительно объяснять проблему и предлагать пример исправления. Это не агентская система — в триаж передаются данные, которыми уже располагает сама платформа.

Для секретов LLM-триаж решает две задачи:

  1. Отклонять очевидные ложные срабатывания, которые нашли анализаторы. Поиск секретов не всегда строится только на понятных паттернах: иногда применяют методы энтропии, которые помогают находить строки, похожие на секреты, но способные вызывать ложные срабатывания

  2. Определять, насколько секрет относится к prod-реализации. Например, часть значений относится к локальной отладке, dev-установке или служебным сценариям — такие находки не всегда критичны

Главная цель — не допустить, чтобы скомпрометированные секреты открывали доступ к данным пользователей или инфраструктуре.

После доработок первый промпт для автоотклонения показал на внутреннем бенчмарке результат F1 score 0,981. Это позволило автоматически отклонять часть мусорных срабатываний.

Насколько можно доверять LLM-триажу? Результаты зависят от типа срабатывания. Для секретов первая задача — определить, секрет это или нет, — дала хорошие результаты, мы перевели её в автоотклонение. Для SAST всё сложнее: модели может не хватать контекста, например журналов и конфигураций, поэтому результаты не используются как финальное автоматическое решение. Для SCA триаж может рекомендовать статус, но финальное решение не принимает.

Интеграция с GitLab

Security Gate встроена в процесс разработки и интегрирована с корпоративным GitLab. На страницах репозиториев автоматически отображается бейдж Security Gate — он показывает количество проблем по ключевым направлениям: критические SAST-срабатывания, SCA High+ и Secrets High+.

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

Автоматическое подключение проектов

Проекты в корпоративном GitLab автоматически подключаются к Security Gate. Если репозиторий ещё не зарегистрирован на платформе, то Security Gate инвентаризирует его, создаёт проект и запускает сканирование.

Автоматически сканируется только default branch, заданный настройками GitLab. Если изменений в коде не было, то проект принудительно пересканируется раз в 30 дней. Если изменения были, то проект встаёт в очередь на сканирование, а затем результаты возвращаются на платформу.

В таком сценарии Security Gate работает как инструмент ретроспективного анализа кода. Если нужно проверить изменения здесь и сейчас, то можно отправлять код на анализ через CI/CD или использовать Fast Scanner.

Если сотрудник зарегистрирован в корпоративном GitLab и имеет доступ к репозиторию с правами Developer или выше, то права в Security Gate он получит автоматически. Сейчас к автосканированию подключено более 40 000 репозиториев.

Просканировать отдельную ветку можно двумя способами:

  • Настроив отправку на анализ через CI/CD: job упаковывает архив с кодом и отправляет его на сканирование, результаты появляются в Security Gate. Это целевой вариант, он работает автоматически

  • Запустив вручную через интерфейс (для пользователей с расширенными правами)

Работа с malware в open-source зависимостях

Отдельная задача Security Gate — работа с рисками в open-source зависимостях, которые используются в проектах. При новой malware-проблеме не нужно вручную проверять всю кодовую базу в поисках пакета: можно быстро определить затронутые проекты и обратиться к нужным продуктовым командам.

С такими рисками работает отдельный модуль — SG Malware Protector. Он мониторит новые данные о malware-уязвимостях, сопоставляет их с инвентаризацией зависимостей и сообщает о найденных совпадениях.

Модуль также интегрирован с корпоративным артефакторием: проверяет, есть ли проблемные пакеты среди запроксированных, актуализирует чёрный список и помогает не пропустить вредоносную зависимость в процесс разработки. Есть и полуавтоматизированный механизм удаления malware из артефактория.

Fast Scanner

Fast Scanner — сервис, который автоматически подключается к merge request в корпоративном GitLab и проверяет безопасность кода. Security Gate сканирует глубже, но дольше, а Fast Scanner нужен для быстрых проверок прямо в процессе разработки. Если в merge request появляется проблема, то Fast Scanner пишет об этом в комментарии. Можно исправить проблему до того, как изменения попадут в основную или релизную ветку.

В Fast Scanner компоненты группируются по версиям. Уязвимости можно раскрывать и смотреть их описание, критичность и статус.

Если проблему исправили в рамках merge request, то Fast Scanner автоматически пересканирует изменения и переведёт срабатывание в статус исправленного.

Срабатывания бывают трёх типов:

  1. Новые или изменённые в текущем MR.

  2. Уже существовавшие в проекте и не относящиеся к текущему MR.

  3. Исправленные.

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

Для секретов Fast Scanner показывает файл, строку, тип секрета и статус. Если секрет исправлен, то отображается коммит с исправлением.

Работа с мобильными приложениями

Для мобильных приложений Security Gate находит секреты в артефактах в открытом виде. Если есть lock-манифесты, то платформа автоматически обнаруживает их, формирует SBOM и ищет уязвимые зависимости.

Для Android есть результаты анализа даже без сборки: некоторые инструменты умеют строить межфайловый taint-анализ без компиляции. Для Swift поддержка тоже есть, но ограничена особенностями платформы и механизмов сборки.

Развитие платформы

Покрытие в Security Gate отличается от покрытия тестами. Платформа может оценивать количество файлов, покрытых проверками при статическом анализе, но эта метрика скорее внутренняя. Куда полезнее — количество уязвимостей и скорость их устранения. В ближайшей версии Security Gate появится отображение SLA по критичностям в рамках тиров: речь о SLA на реакцию — сколько времени срабатывание находится в статусе «Не обработано».

Сейчас мы разрабатываем механизм автоматического создания MR на обновление зависимостей. Однако здесь есть сложность: автоматические инструменты обновления могут предложить версию, которая сама содержит другие уязвимости, а это ведёт к каскадным обновлениям и новым проблемам. Поэтому мы уже внедрили механизм Safe Version: он собирает доступные версии компонента, сопоставляет их с известными уязвимостями и показывает, какие версии можно считать безопасными.

Карантин новых версий open-source зависимостей. Идея в том, что новая версия компонента после появления в registry «отстаивается» — её анализируют и проверяют — и только потом становится доступной при проксировании. Дело в том, что не все вредоносные пакеты можно выявить сигнатурным анализом артефакта: иногда проблема становится заметна только по поведению или после информации о реальных атаках.

Также в разработке собственный аналог Nexus IQ — файрвол, интегрированный с Nexus. Он будет собирать метаинформацию о пакетах в публичных registry и учитывать паттерны, связанные с безопасностью.

Резюме

Security Gate объединяет в себе несколько направлений AppSec: статический анализ кода, проверку зависимостей, поиск секретов, работу с malware и protestware, Fast Scanner и другие механизмы интеграции в разработку.

Платформа не только собирает результаты сканирования, но и помогает работать с ними: приоритизирует находки, объединяет дубли, показывает поток данных, даёт рекомендации, поддерживает триаж, интеграцию с GitLab и уведомления.

Главная идея Security Gate — сделать безопасность частью обычного процесса разработки, чтобы проблемы можно было увидеть, разобрать и исправить до того, как они пойдут дальше.