← [Раздел 06](README.md) · [Главная](../README.md)

# SCA: сканирование зависимостей

## Цель

Разобраться в **SCA** (Software Composition Analysis): как находить уязвимости в сторонних библиотеках, приоритизировать CVE и встроить проверку в CI/CD.

## Предварительно

- [secrets-scanning.md](secrets-scanning.md).
- Понимание: приложение собирается из вашего кода + npm/pip/maven packages.

## Время

~25 минут чтения + 20 минут на просмотр отчёта SCA tool

---

## Что такое SCA

**SCA** анализирует **manifest файлы** (зависимости) и сопоставляет версии с базами уязвимостей (NVD, GitHub Advisory, vendor DB).

| Ваш код | SCA смотрит сюда |
|---------|------------------|
| `app.js` logic | `package-lock.json`, `requirements.txt`, `go.sum` |

~80% кодовой базы современного app — часто **не ваш код**, а dependencies.

## SCA vs SAST

| | SCA | SAST |
|---|-----|------|
| Объект | Libraries | Your source |
| Тип проблем | Known CVE | Coding flaws |
| Fix | Bump version | Change code |

Оба нужны; SCA часто даёт **actionable** fixes (upgrade X → Y).

## Как выглядит finding

```
Package: lodash@4.17.15
CVE-2020-8203 (High)
Fixed in: 4.17.19
Path: app → express → lodash
```

| Поле | Значение |
|------|----------|
| **Severity** | Critical / High / Medium / Low (CVSS-based) |
| **Reachability** | Используется ли уязвимый код на вашем path |
| **Fix version** | Минимальный безопасный upgrade |

## Инструменты

| Tool | Эcosystem | Примечание |
|------|-----------|------------|
| **Dependabot** | GitHub native | PR с bumps |
| **Renovate** | Multi-platform | Гибкие rules |
| **Snyk** | Multi | Commercial + free tier |
| **Trivy** | Containers + SBOM | Также image scan |
| **OWASP Dependency-Check** | Java, multi | Open source |
| **pip-audit / npm audit** | Python / Node | Built-in CLI |

CI пример (концепт):

```yaml
# Псевдо-pipeline stage
sca:
  script:
    - trivy fs --severity HIGH,CRITICAL .
    - exit-code 1 on findings  # gate
```

## SBOM — Software Bill of Materials

**SBOM** — «ингredient list» приложения: все компоненты и версии.

| Формат | Использование |
|--------|---------------|
| CycloneDX | Supply chain, compliance |
| SPDX | License compliance |

SBOM нужен для: incident response («есть ли log4j в prod?»), регуляторики, vendor requests.

Гenerate на каждый release; храните артефакт рядом с build.

## Приоритизация: не все CVE одинаковы

| Фактор | Вопрос |
|--------|--------|
| Severity | CVSS ≥ 7? |
| Exploitability | EPSS / known exploit in wild? |
| Reachability | Vulnerable function вызывается? |
| Exposure | Public internet vs internal only |
| Compensating controls | WAF, network segmentation |

**Risk-based triage:** critical CVE в dev dependency с no network — ниже приоритет, чем medium в auth library на edge.

## Политика обновлений

| Severity | SLA (пример) |
|----------|--------------|
| Critical (RCE, auth bypass) | 24–72h |
| High | 2 weeks |
| Medium | Next sprint |
| Low | Quarterly batch |

Automated PR (Renovate) + human review для major versions.

## License compliance (bonus)

SCA tools часто показывают **лицензии** (GPL, MIT). Юридический риск при неправильном использовании copyleft в proprietary product.

## Transitive dependencies

```
your-app → framework → utils → vulnerable-lib
```

Fix: upgrade parent или override/resolution (осторожно с breaking changes).

## Частые проблемы

| Проблема | Решение |
|----------|---------|
| 500 CVE, все ignored | Policy + reachability analysis |
| No lockfile | Commit lockfiles always |
| Pin forever | Scheduled dependency day |
| False «fixed» | Re-scan after deploy |

## Supply chain hardening (кратко)

- [ ] Verify package signatures where supported
- [ ] Private registry mirror for critical builds
- [ ] Pin digests for container base images
- [ ] Review new dependencies (не `npm install` без thought)

---

## Самопроверка

1. Чем SCA отличается от `npm audit` и от SAST?
2. Что такое SBOM и зачем при инциденте log4shell-style?
3. Почему CVSS 9.8 иногда не P0?
4. Что такое transitive dependency?

## Дальше

[SAST — статический анализ кода](sast.md)
