SecScore как аналог Quality Gate
31 марта 2026 г.·128 views

🛠 SecScore как аналог Quality Gate

Давай сегодня посмотрим с тобой на готовое open-sourse решение, которое из коробки кастомится и просто можно переиспользовать в своих работах (почему бы и не да? если только соблюдать лицензию 🤔).

SecScore — open-source для оценки безопасности сборки путем использования принципов Quality Gate. По сути это коробочный аналог, который должен быть у всех встроен для оценки безопасности и рисков ИБ, но эта тула заточена под метрики: веса по критичности, жёсткие условия и фильтрация только новых дефектов. Я что то подобное, но более серьозное делал в РБ еще, принцип концепта я в карусель закинул, что бы ты мог посмотреть на логику работы.

Логика

• Score — каждой уязвимости присваивается вес, суммарный score сравнивается с порогом. Достигли порога тогда сборка падает

• Hard Fails — условия, при которых сборка падает безоговорочно, даже если общий score в норме, как пример:любой секрет в коде, любая Critical-уязвимость в авторизации или иные критерии которые поставишь ты для своего проекта

• Условия — можно настроить реакцию только на новые дефекты, поэтому тебе придется пилить напильником дополнительно условия исключений false [psitive/ negative сработок, тех долг контролировать через дополнительный механизм, у себя я стараюсь предлагать Jira Issue Workflow (ранее описывал это на схемке, когда трогали тему с QG тут)

Конфиг

score:

threshold: 100

weights:

critical: 50

high: 20

medium: 7

low: 1

hard_fails:

- severity: critical

rule: "sql-injection"

- severity: high

rule: "hardcoded-secret"

- type: secret

severity: any

- rule_id: "CWE-78"

severity: critical

conditions:

only_new: true

Пример - SecScore создаёт комментарий в PR с принятым решением и перечнем причин

name: Security Gate

on:

pull_request:

branches: [main]

jobs:

secscore:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v4

- name: Run SAST (Semgrep → SARIF)

run: |

semgrep ci --sarif --output results.sarif

- name: Run SecScore

run: |

secscore \

--sarif results.sarif \

--config secscore.yaml \

--pr-comment \

--github-token ${{ secrets.GITHUB_TOKEN }}

Как в итоге это работает?

• Набрали слишком много баллов, тогда мягкий порог по score

• Нашли что-то недопустимое, тогда жёсткий стоп без обсуждений (бизнес dont like it)

• Простые QG не учитывают совокупный риск и факторы

• Hard Fails фиксируют «красные линии» отдельно от числового порога

• Комфортно начинать с мягкого порога (threshold: 200) и Hard Fails только на самое критичное, ну только вменяемое и что реально аффектит проект, но для этого тебе надо ручками потриажить и построить механизм - тоже custom

• Постепенно снижается порог по мере закрытия долга

• Включить only_new: true при первом внедрении, чтобы не заблокировать весь пайплайн сразу

Пример набора условий

conditions:

- metric: vulnerabilities_critical

operator: GREATER_THAN

value: 0 # ни одного Critical

- metric: vulnerabilities_high

operator: GREATER_THAN

value: 5 # не больше 5 High

- metric: coverage

operator: LESS_THAN

value: 80 # покрытие не ниже 80%

- metric: duplicated_lines_density

operator: GREATER_THAN

value: 3 # дублирование не выше 3%

- metric: security_hotspots_reviewed

operator: LESS_THAN

value: 100 # все hotspots проверены

Сноска

Quality Gate — это автоматическая проверка, через которую должен пройти код, прежде чем двинуться дальше по пайплайну. Не прошёл — сборка падает, деплой блокируется

#appsec #devsecop #reserch #toolchain #vulnmanagement #techsolution

#appsec#devsecop#reserch#toolchain#vulnmanagement#techsolution
Открыть в Telegram