Skip to content

Список поддерживаемых сканеров

Инструкция по загрузке результатов сканирования.

Secret Scan

Название сканера VV_SCAN_TYPE Поддерживаемые языки Ссылка
Trufflehog3 TRUFFLEHOG3 All Github
Gitlab Secret detection GITLAB_SECRET_DETECT All Gitlab
Trufflehog TRUFFLEHOG All Github
GitLeaks GITLEAKS All Github

SAST

Название сканера VV_SCAN_TYPE Поддерживаемые языки Ссылка
Semgrep SEMGREP C#, Go, Java, JavaScript, JSX, JSON, PHP, Python, Ruby, Scala, Terraform, TypeScript, TSX Github
ESLint ESLINT ECMAScript, JavaScript Github
Checkmarx CHECKMARX C#, Go, Java, JavaScript, JSX, JSON, PHP, Python, Ruby, Scala, Terraform, TypeScript, TSX Checkmarx
GitLab SAST GITLAB_SAST .NET Core, .NET Framework, Go, Java, Python, React, JavaScript, TypeScript Gitlab
Snyk Code SNYK_CODE .NET, Apex, Bazel, C/C++, Elixir, Go, Java, Kotlin, JavaScript, PHP, Python, Ruby, Scala, Swift, TypeScript, VB.NET Snyk.io
SARIF SARIF все SarifWeb
SonarQube SONAR_QUBE все SonarSource
PT AI PT_AI все PT AI
Solar AppScreener APP_SCREENER_SAST все RT Solar
SASTAV SARIF все -
Svace SARIF все Svace
PVS-Studio PVS_STUDIO C, C++, C#, Java PVS-Studio
SpotBugs SPOTBUGS Java Github

Software Composition Analysis (SCA)

Название сканера VV_SCAN_TYPE Тип сканируемых объектов Ссылка
Trivy Image TRIVY_IMAGE OS packages, software dependencies Github
Trivy File system TRIVY_FS OS packages, software dependencies Github
Dependency Check DEPENDENCY_CHECK software dependencies Github
Grype GRYPE OS packages, software dependencies Github
Snyk SCA SNYK_SCA OS packages, software dependencies Snyk.io
GitLab Container Security GITLAB_CONTAINER_SECURITY OS packages, software dependencies GitLab
GitLab Dependency GITLAB_DEPENDENCY OS packages, software dependencies GitLab
SBOM SBOM OS packages, software dependencies CycloneDX
CodeScoring SBOM OS packages, software dependencies CodeScoring
AppSec.Track SBOM OS packages, software dependencies AppSec.Track
Luntry LUNTRY OS packages, software dependencies Luntry
PT AI PT_AI software dependencies PT AI
Solar AppScreener APP_SCREENER_SCA software dependencies RT Solar

DAST

Название сканера VV_SCAN_TYPE Тип сканируемых объектов Ссылка
Nuclei NUCLEI Network, Web Github
ZAP ZAP Network, Web ZAP
GitLab DAST GITLAB_DAST Network, Web GitLab
Acunetix ACUNETIX Network, Web Acunetix
Burp Suite BURP_SUITE Web Burp Suite
PT AI PT_AI Web PT AI
Solar AppScreener APP_SCREENER_DAST Web RT Solar

IaC

Название сканера VV_SCAN_TYPE Тип сканируемых объектов Ссылка
KICS SARIF IaC Github
Checkov SARIF IaC Github

Сканеры для оркестрации

Название сканера SLUG Тип Поддерживаемые цели
Semgrep SEMGREP SAST Продукт, Репозиторий
Trivy: FileSystem TRIVY_FS SCA Продукт, Репозиторий
Trivy: Image TRIVY_IMAGE SCA Продукт, Версия артефакта
Trufflehog TRUFFLEHOG SAST Продукт, Репозиторий
Gitleaks GITLEAKS SAST Продукт, Репозиторий
PT AI PT_AI SAST Продукт, Репозиторий
CodeScoring: Repository CODE_SCORING_REPOSITORY SCA Продукт, Репозиторий
CodeScoring: Artifact CODE_SCORING_ARTIFACT SCA Продукт, Версия артефакта
AppSec.Track: Repository APPSEC_TRACK_REPOSITORY SCA Продукт, Репозиторий
AppSec.Track: Artifact APPSEC_TRACK_ARTIFACT SCA Продукт, Версия артефакта
AppScreener: SAST APP_SCREENER_SAST SAST Продукт, Репозиторий
AppScreener: SCA Repository APP_SCREENER_SCA_REPOSITORY SCA Продукт, Репозиторий
SASTAV SASTAV SAST Продукт, Репозиторий
ZAP ZAP DAST Актив, Продукт

Особенности обработки SARIF

Определение серьёзности

При загрузке результатов в формате SARIF (включая SARIF-based сканеры: Svace, KICS, Checkov) платформа определяет серьёзность (severity) дефекта по следующему приоритету:

  1. result.level — уровень, указанный непосредственно в результате
  2. rule.properties.security-severity — числовой CVSS-подобный скоринг
  3. rule.properties["problem.severity"] или rule.properties.severity
  4. rule.defaultConfiguration.level — уровень по умолчанию из определения правила
  5. Если ни одно из полей не найдено — присваивается None

Маппинг SARIF level → Vampy severity:

SARIF level Vampy severity
critical Critical
error High
warning Medium
recommendation Low
note Low
none None

Пользовательские сабпарсеры

Несколько инструментов могут выгружать результаты в одном базовом формате (SARIF, SBOM, GitLab SAST, GitLab DAST), но с разным id внутри отчёта. Пользовательские сабпарсеры сопоставляют этот id отдельному сканеру в Vampy: он отображается в UI и API отдельно (фильтр Инструмент), а дедупликация и авторезолв затрагивают только дефекты этого инструмента, а не все загрузки того же формата в ветке (подробнее).

В конфиге в ids перечисляют идентификаторы как в отчёте — значения должны совпадать на каждой загрузке.

Поддерживаемые ключи верхнего уровня в JSON: SARIF, SBOM, GITLAB_SAST, GITLAB_DAST.

Каждый элемент массива описывает сопоставление:

Поле Описание
type Тип сканера для Vampy: SAST, SCA, DAST и др.
vendor Имя вендора (используется для идентификации инструмента)
ids Список идентификаторов сканера как в отчёте
displayName Необязательно: как сканер отображается в фильтре Инструмент (по умолчанию {базовый сканер}: {vendor})

Подробнее о параметрах — в справочнике (custom_sub_parsers.enabled, custom_sub_parsers.config_json).

Пример: SARIF

Допустим, сканер выгружает результаты в SARIF. В отчёте в секции runs → tool → driver указано имя инструмента:

{
    "$schema": "https://json.schemastore.org/sarif-2.1.0.json",
    "version": "2.1.0",
    "runs": [
        {
            "tool": {
                "driver": {
                    "name": "my_vendor_id"
                }
            }
        }
    ]
}

Нас интересует поле runs[].tool.driver.name — по нему Vampy выбирает сабпарсер.

Сформируйте JSON-конфиг:

{
  "SARIF": [
    {
      "type": "SAST",
      "vendor": "My Scanner Vendor",
      "ids": ["my_vendor_id"],
      "displayName": "My Vendor: SARIF"
    }
  ]
}

где:

  • my_vendor_id — значение name из SARIF;
  • vendor — наименование вендора;
  • type — подсказка Vampy о типе сканера (SAST, SCA и т.д.);
  • displayName — подпись в фильтре Инструмент.

Пример: GitLab SAST

В отчёте GitLab SAST идентификатор сканера находится в scan.scanner.id:

{
    "scan": {
        "scanner": {
            "id": "gitlab-semgrep",
            "name": "Semgrep"
        }
    }
}

Добавьте (или дополните существующий) конфиг:

{
  "GITLAB_SAST": [
    {
      "type": "SAST",
      "vendor": "Corporative Gitlab Semgrep",
      "ids": ["gitlab-semgrep"]
    }
  ]
}

В ids укажите значение scan.scanner.id из отчёта (в примере — gitlab-semgrep). Отчёт загружайте с типом GitLab SAST, не как отдельный произвольный формат.

Пример: SBOM

В CycloneDX идентификатор инструмента берётся из metadata.tools[].name. Vampy использует первое совпадение и нормализует id: первое слово до пробела, в нижнем регистре (например, Dependency-Trackdependency-track).

{
  "bomFormat": "CycloneDX",
  "metadata": {
    "tools": [
      {
        "vendor": "OWASP",
        "name": "Dependency-Track",
        "version": "4.11.5"
      }
    ]
  }
}

Конфиг:

{
  "SBOM": [
    {
      "type": "SCA",
      "vendor": "Corporate Dependency Track",
      "ids": ["dependency-track"]
    }
  ]
}

Загружайте отчёт как SBOM. Если в name есть суффикс после пробела (Codescoring (https://...)), в ids укажите только первую часть — codescoring.

Включение и применение конфигурации

Помимо JSON нужно включить работу с пользовательскими сабпарсерами.

Формат JSON в конфигурации

Значение config_json / customSubParsersConfigJson должно быть передано как однострочный JSON (без переводов строк внутри значения).

Ключ в конфиге может быть только один: несколько сабпарсеров (для одного или разных базовых форматов) объединяют в один JSON-объект. Не дублируйте строку v.common_config.parsing.custom_sub_parsers.config_json (или customSubParsersConfigJson) — повтор ключа обычно приводит к ошибке при чтении конфигурации.

Пример двух сабпарсеров SARIF в одном значении:

{"SARIF":[{"type":"SAST","vendor":"Vendor A","ids":["id_a"]},{"type":"SAST","vendor":"Vendor B","ids":["id_b"]}]}

Docker (config/user.ini):

v.common_config.parsing.custom_sub_parsers.enabled = on
v.common_config.parsing.custom_sub_parsers.config_json = {"SARIF":[{"type":"SAST","vendor":"My Scanner Vendor","ids":["my_vendor_id"],"displayName":"My Vendor: SARIF"}]}

Kubernetes (values.yaml):

commonConfig:
  parsing:
    customSubParsersEnabled: "on"
    customSubParsersConfigJson: '{"SARIF":[{"type":"SAST","vendor":"My Scanner Vendor","ids":["my_vendor_id"],"displayName":"My Vendor: SARIF"}]}'

После изменения примените конфигурацию: в Docker — /opt/hw-vmp/bin/reconfig (после правки config/user.ini), в Kubernetes — helm upgrade с тем же release и обновлённым values.yaml.

Проверка

  1. В расширенных фильтрах списка дефектов в блоке Инструмент должен появиться новый сканер (например, My Vendor: SARIF).
  2. Загрузите отчёт как обычный базовый формат: для примера выше — Sarif, для GitLab — GitLab SAST.
  3. В списке дефектов и в карточке дефекта в поле Инструмент отображается ваш сканер (slug вида SARIF_MY_SCANNER_VENDOR), а не только общий тип отчёта.