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

# SAST — статический анализ безопасности

## Цель

Понять, как работает **SAST** (Static Application Security Testing), какие классы уязвимостей он находит, как снизить false positives и встроить SAST в PR workflow.

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

- [sca-zavisimosti.md](sca-zavisimosti.md) — отличие от анализа зависимостей.
- Базовый синтаксис одного языка (JavaScript, Python или Java).

## Время

~30 минут чтения + просмотр sample SARIF report

---

## Что такое SAST

**SAST** анализирует **исходный код** (или bytecode) **без запуска** приложения.

```
Source code → Parser / AST → Rules engine → Findings (file:line)
```

Shift-left: feedback в IDE или на PR за минуты.

## Что SAST находит хорошо

| Класс | Пример |
|-------|--------|
| Injection patterns | SQL concat, command exec |
| Hardcoded secrets | Sometimes (дублирует secrets scan) |
| Weak crypto | MD5 for passwords, ECB mode |
| Dangerous APIs | `eval()`, insecure deserialization |
| Path traversal hints | User input in file paths |
| XSS sinks | Unescaped output to HTML |

Ссылки на таксономию: **CWE** (Common Weakness Enumeration), **OWASP Top 10**.

## Что SAST находит плохо

| Слепая зона | Почему |
|-------------|--------|
| Business logic flaws | «User A видит данные B» без pattern |
| Runtime config | Debug flag только в prod env |
| Infrastructure | Misconfigured S3 — IaC scanners |
| Zero-day | Нет signature yet |

→ Дополняйте DAST, review, pentest ([dast-i-pentest-lite.md](dast-i-pentest-lite.md)).

## Популярные инструменты

| Tool | Языки | Notes |
|------|-------|-------|
| **Semgrep** | Multi | Custom rules, fast |
| **CodeQL** | Multi | GitHub integration, deep analysis |
| **SonarQube** | Multi | Quality + security rules |
| **Bandit** | Python | Lightweight |
| **eslint-plugin-security** | JavaScript | In existing lint |
| **Checkmarx / Veracode** | Enterprise | Commercial |

Open source старт: Semgrep + language-specific linter.

## SAST в CI pipeline

```
PR opened → checkout → sast scan → upload SARIF → PR annotations
                              │
                              └── gate: block if critical
```

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

```bash
semgrep scan --config p/ci --sarif --output results.sarif .
```

**SARIF** — стандартный формат findings для GitHub/GitLab security tab.

## Severity и triage

| Severity | Типичная политика |
|----------|-------------------|
| Critical | Block merge |
| High | Block или exception |
| Medium | Warn + ticket |
| Low / Info | Backlog |

### False positives

SAST **шумит**. Без triage команда отключает tool.

| Стратегия | Описание |
|-----------|----------|
| Start with `p/ci` rulesets | Проверенные правила |
| Custom suppressions | `# nosemgrep: rule-id` с comment why |
| Baseline | Ignore legacy; block new only |
| AppSec office hours | Разбор top rules |

## Custom rules (Semgrep example concept)

Правило: запрет raw SQL concat

```yaml
# Упрощённый пример структуры
rules:
  - id: no-sql-concat
    pattern: $QUERY = "..." + $USER_INPUT
    message: Potential SQL injection
    severity: ERROR
```

Custom rules кодируют **ваши** [security requirements](../05-secure-sdlc/bezopasnye-trebovaniya.md).

## SAST + IDE

Developer shift-left:

- Plugin в VS Code / JetBrains
- Fix до commit → меньше CI failures
- Same rules as CI (consistency)

## Метрики (осторожно)

| Метрика | Риск gamification |
|---------|-------------------|
| Open findings count | Hide by downgrade severity |
| Time to fix | Good if paired with quality |
| % repos covered | Adoption KPI |

Лучше: **new critical intro rate** → 0.

## Integration с code review

| CI SAST | Human review |
|---------|--------------|
| Known anti-patterns | Auth logic |
| Every line scanned | Context & abuse cases |

Reviewer проверяет: «SAST clean, но IDOR возможен?»

## Checklist внедрения SAST

- [ ] Выбран 1 tool для 1–2 primary languages
- [ ] Scan на каждый PR (< 10 min runtime)
- [ ] SARIF в platform security dashboard
- [ ] Policy: critical blocks merge
- [ ] Документ triage + suppressions process
- [ ] Обучение: top 5 rules для команды

---

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

1. SAST vs SCA — в чём разница объектов анализа?
2. Назовите 2 класса bugs, которые SAST пропустит.
3. Зачем SARIF?
4. Почему «5000 medium findings» хуже, чем «20 high с triage»?

## Дальше

[Quality gates в CI](quality-gates-v-ci.md) — как связать SAST, SCA и secrets в политику merge.
