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

# Кейсы из продакшена (обезличенные)

## Цель

Разобрать **реалистичные сценарии** DevSecOps в production: что пошло не так, какие контролы сработали или отсутствовали, и какие уроки переносятся в вашу практику. Все имена и цифры вымышлены или обезличены.

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

- [audit-evidence.md](../09-compliance/audit-evidence.md), [lab-04](../11-praktikum/lab-04-incident-tabletop.md).
- Понимание CI, K8s, секретов.

## Время

~45 минут.

## Кейс 1 — Секрет в форке публичного репо

**Контекст:** Стартап `ShopExample`, 15 разработчиков, GitHub Free, публичный шаблон frontend.

**Событие:** Стажёр закоммитил `.env` с `STRIPE_SECRET_KEY=sk_test_...` (тестовый, но валидный). Бот проиндексировал GitHub за 4 минуты. Через 2 часа — несанкционированные charges на test mode (видны в dashboard).

**Что сработало:** Stripe test mode лимиты; алерт от GitHub secret scanning (email).

**Что не сработало:** Нет pre-receive hook; Gitleaks не в CI; code review пропущен («мелкий фикс»).

**Действия:**

1. Revoke Stripe key, новый в GitHub Encrypted Secret.
2. `git filter-repo` на private mirror + force push (согласовано).
3. Обязательный workflow `gitleaks` + branch protection.

**Метрика после:** 100% PR со scan; повтор — 0 за 18 месяцев.

**Урок для курса:** [Lab 01](../11-praktikum/lab-01-secrets-v-git.md) — история Git важнее текущего файла.

---

## Кейс 2 — Critical CVE в базовом образе node:16

**Контекст:** Банк `FinanceDemo`, 200 сервисов, образ `corp/node:16-bullseye` пересобирается еженедельно.

**Событие:** Trivy добавил новое CVE Critical в OpenSSL в базовом Debian. 180 сервисов унаследовали. Прод deploy не блокировался — `allow_failure: true` на container scan.

**Инцидент:** Внешний сканер партнёра обнаружил уязвимый TLS endpoint; SLA контракта — 7 дней на Critical.

**Действия:**

1. Emergency base image `node:20-bookworm` + пересборка pipeline.
2. Политика: `--exit-code 1` на Critical только на `release/*`.
3. `.trivyignore` только с CAB approval.

**Метрика:** MTTR patch Critical: 21 день → 3 дня.

**Урок:** [Lab 02](../11-praktikum/lab-02-scan-docker-image.md) + политика ignore с тикетом.

---

## Кейс 3 — Lateral movement через overprivileged SA

**Контекст:** SaaS `MetricsCloud`, multi-tenant K8s, namespace на клиента.

**Событие:** RCE в sidecar (уязвимый lib) → pod использовал default SA с `cluster-admin` binding (legacy chart).

**Сработало:** Falco: unexpected `kubectl` API calls from pod SA (custom rule).

**Не сработало:** RBAC review при helm install; NetworkPolicy отсутствовала.

**Containment:** Revoke binding; deploy с `Role` read-only logs; deny-all NetworkPolicy + explicit allow к Prometheus.

**Урок:** [Lab 03](../11-praktikum/lab-03-k8s-rbac-networkpolicy.md); регулярный `rbac-tool` audit.

---

## Кейс 4 — «Временно» отключили SAST на квартал

**Контекст:** Медиа `StreamExample`, Semgrep 400 findings High, команда под deadline.

**Событие:** CTO подписал waiver на 90 дней. На день 91 — не включили обратно. Через 4 месяца — SQLi в legacy PHP, утечка 8k email (без паролей).

**GDPR:** Уведомление регулятора; штраф ниже максимума из-за быстрого IR.

**Действия:**

1. SAST mandatory с budget 2 дня/спринт на top rules.
2. Dashboard waiver expiry в Slack.
3. Tabletop quarterly ([Lab 04](../11-praktikum/lab-04-incident-tabletop.md)).

**Урок:** [iso27001-obzor.md](../09-compliance/iso27001-obzor.md) — исключения без срока = nonconformity.

---

## Кейс 5 — Supply chain: compromised npm dependency

**Контекст:** E-commerce `CartDemo`, lockfile committed.

**Событие:** Typosquatting пакет в transitive dep; postinstall script exfil env (staging). Vault token не в env — только file mount; exfil пустой.

**Сработало:** Trivy fs + npm audit gate; Falco detect outbound to rare IP.

**Улучшения:** SBOM на каждый release; Dependabot; internal npm proxy.

**Урок:** Defense in depth — один слой не спасает, цепочка замедляет атаку.

---

## Паттерны успешных команд

| Паттерн | Описание |
|---------|----------|
| Golden pipeline | Один include/template на все репо |
| Security PM sync | 30 мин/нед с владельцами waiver |
| Blameless PM | Фокус на системе, не на стажёре |
| Evidence locker | S3/GCS immutable audit bundle |
| Game days | Tabletop + иногда red team lite |

## Антипаттерны

- «Security — это отдел, не моя работа»
- Скан только на release tag (слишком поздно)
- 1000 алертов Falco без triage
- Секреты в Jira тикетах

## Как использовать кейсы на интервью

Выберите один кейс, ответьте:

1. Какой **ваш** вклад был бы как DevSecOps?
2. Какой **один** контроль предотвратил бы 80% ущерба?
3. Какую **метрику** показали бы руководству через квартал?

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

1. Какой общий фактор в кейсах 1 и 4?
2. Почему `allow_failure: true` на Trivy опасен?
3. Как Falco и NetworkPolicy дополняют друг друга в кейсе 3?
4. Что бы вы положили в audit evidence после кейса 4?

## Дальше

Вы завершили курс **09–12**. Вернитесь к [главной документации](../README.md) или опубликуйте материалы: `make upload-docs` в корне репозитория DevSecOps.
