Supply Chain Security: как да се защитите от компрометирани зависимости, пакети и CI/CD (SBOM + SLSA без “теория”)

Днешните атаки често не идват директно към вас, а през библиотека, контейнер образ или CI/CD pipeline. Ето практични стъпки да затворите най-честите дупки в software supply chain.

Как изглежда атаката в реалния свят

Вместо да атакуват директно инфраструктурата ви, нападателите:

  • компрометират dependency (пакет/библиотека)
  • подменят container image
  • вкарват зловреден код през CI/CD секрети
  • атакуват build сървъри или signing ключове

Резултатът: “вие” доставяте проблема към клиентите си или го разгръщате вътрешно.

Минимална цел: да знаете какво пускате в продукция

Първата практична линия на защита е видимост:

  • кои зависимости имате (директни и транзитивни)
  • кои версии
  • откъде идват
  • кой ги е построил (build provenance)
  • как са подписани/валидирани

Тук SBOM и SLSA не са “buzzwords”, а начин да докажете произход и състав.

План в 3 нива (изпълним, без big-bang)

Ниво 1: “Хигиена” (1–2 седмици)

  • заключете dependency версии (lock files)
  • включете автоматични dependency updates с review
  • забранете непроверени публични registry-та (или ги проксирайте през вътрешен)
  • минимизирайте и ротирате CI/CD секрети

Ниво 2: “Контроли” (2–6 седмици)

  • сканиране на зависимости и контейнер образи при всеки build
  • policy gate: build-ът не минава при критични уязвимости (с разумни изключения и срок)
  • отделни среди и права за build vs deploy
  • ограничете кой може да модифицира pipeline-и и secrets

Ниво 3: “Доказуемост” (6–12 седмици)

  • SBOM за всеки release (и архив)
  • provenance/attestations за build артефакти (кой/как е построил)
  • подписи за артефакти и валидация при deploy
  • мониторинг за “аномалии” в build процеса

12 практични контрола за CI/CD и зависимости

  1. Principle of least privilege за CI runner-и и service accounts
  2. Secrets management вместо secrets в repo/variables “на доверие”
  3. Branch protections + mandatory reviews за pipeline файлове
  4. Signed commits/tags за release-и
  5. Immutable artifacts (не “latest”, не overwrite на версии)
  6. Container image pinning по digest, не по tag
  7. Allowlist на registry-та и package sources
  8. Reproducible builds където е възможно
  9. Separate build/deploy keys и отделни права
  10. Сканиране на IaC (Terraform/K8s manifests)
  11. Логване на pipeline действия (кой пусна, кой промени, кой одобри)
  12. План за реагиране при компрометирана зависимост (kill switch + бърз rebuild)

Как да започнете “утре” (най-лесният starter kit)

  • изберете 1 критично приложение
  • генерирайте SBOM за текущия release и го архивирайте
  • включете dependency/container scanning в CI
  • добавете правило: “критични CVE = fail”, но с изключение само по тикет и срок
  • ограничете редакцията на CI/CD конфигурацията само до малка група

Полезни рамки за ориентация: OWASP за dependency рискове и SLSA като модел за нива на зрелост.