Информационная безопасность

Supply Chain Security

Декабрь 2020. SolarWinds Orion - продукт для мониторинга сети используется 33 000 компаний, включая Pentagon, Microsoft, FireEye. В системе сборки появляется Sunburst malware. Подписывается официальным сертификатом SolarWinds. Распространяется как легитимное обновление. 18 000 организаций устанавливают его. Атака остаётся незамеченной 8 месяцев. Supply chain - самый опасный вектор: жертва делает всё правильно (устанавливает подписанное обновление), но уже скомпрометирована.

  • **SolarWinds 2020:** malware в официальном обновлении, подписан легитимным cert - 18 000 жертв включая US government
  • **Log4Shell 2021:** CVSS 10.0 в Java logging library, транзитивная зависимость у миллиардов серверов - 2 часа от disclosure до массовой эксплуатации
  • **npm event-stream 2018:** хакер захватил популярный пакет (2M загрузок/неделю) и добавил stealer Monero кошельков - обнаружен через 5 недель

Dependency Scanning: уязвимости в npm/pip/maven

2021 год. Log4Shell (CVE-2021-44228). Уязвимость в Java-библиотеке log4j затронула Apple, Amazon, Tesla, Twitter, Cloudflare - буквально всех кто использовал Java. CVSS score: 10.0 - максимум. Эксплойт: одна строка в HTTP-заголовке User-Agent. Время от disclosure до массовой эксплуатации: 2 часа. Миллиарды серверов по всему миру.

**Typosquatting** - атака через похожие имена пакетов. `lodash` (настоящий) vs `lodash-utils` (вредоносный). В 2021 году npm-пакет `ua-parser-js` был захвачен: 8 миллионов загрузок в неделю, добавлен crypto miner и credential stealer. Всегда проверять точное имя, количество загрузок, дату создания, владельца пакета.

**Dependency confusion attack** (Alex Birsan, 2021): если внутренний npm registry имеет пакет `mycompany-utils`, атакующий публикует одноимённый пакет в публичном npm с более высоким номером версии. npm по умолчанию берёт публичную версию. Birsan получил bug bounty от Apple, Microsoft, PayPal за демонстрацию этой атаки.

npm audit показывает critical уязвимость в транзитивной зависимости (зависимость зависимости). `npm audit fix` не помогает. Что делать?

SBOM: инвентаризация компонентов

После Log4Shell организации обнаружили, что не знают, используется ли log4j в их системах. Поиск по кодовой базе не помогает - log4j мог быть транзитивной зависимостью уровня 5. **Software Bill of Materials (SBOM)** - машиночитаемый список всех компонентов ПО: пакеты, версии, лицензии, уязвимости.

**US Executive Order 14028 (2021)** обязывает всё ПО для federal agencies предоставлять SBOM. NTIA (Национальная администрация телекоммуникаций) опубликовала минимальные требования к SBOM. Это создаёт рыночное давление: enterprise-клиенты всё чаще требуют SBOM от поставщиков ПО.

Компания выпускает SaaS. Клиент просит предоставить SBOM. Что это даёт клиенту?

Sigstore: подпись и верификация артефактов

SolarWinds 2020: атакующие скомпрометировали систему сборки и подписали вредоносное обновление официальным сертификатом SolarWinds. 18 000 организаций, включая Microsoft, FireEye, US Treasury установили подписанный малварь. **Sigstore** - open source infrastructure для подписи и верификации ПО, созданный Linux Foundation в ответ на supply chain атаки.

**Keyless signing** - основной режим Sigstore в CI/CD. Вместо хранения приватного ключа (который можно украсть) используется краткосрочный сертификат от Fulcio CA, выданный через OIDC GitHub/GitLab токен. Подпись привязана к идентичности CI/CD пайплайна, а не к статическому ключу.

Образ подписан cosign. Атакующий получает доступ к registry и заменяет образ. Подпись проверяется - что произойдёт?

Lockfiles и reproducible builds

Без lockfile `npm install` может поставить разные версии в dev и production. Разные версии - разные уязвимости, разное поведение, нарушение audit trail. **Lockfile** (package-lock.json, yarn.lock, Pipfile.lock) фиксирует точные версии всех транзитивных зависимостей с hash содержимого.

**Reproducible builds** - цель: одинаковый source code + одинаковый toolchain = bit-for-bit одинаковый binary. Это позволяет независимо верифицировать что binary соответствует открытому source. Debian, Tor Browser, Bitcoin Core - используют reproducible builds. Защита от compromised build server.

Использование популярных open source библиотек безопасно - их проверяет сообщество

Популярность не равна безопасности. Log4j - один из самых популярных Java-фреймворков. npm event-stream (2018): 2 миллиона загрузок/неделю, добавлен stealer Monero кошельков. Проверка должна быть автоматизированной: dependency scanning в CI, SBOM, Sigstore attestation.

Экосистемы open source огромны. npm содержит 2+ миллиона пакетов. Maintainers не проверяются, аккаунты угоняются. Доверие сообщества не масштабируется на миллионы пакетов - нужна автоматизация.

Разработчик добавил package-lock.json в .gitignore. Почему это проблема?

Ключевые идеи

  • **Dependency Scanning:** npm audit / Snyk / Dependabot в CI. Транзитивные зависимости так же опасны как прямые - Log4Shell был транзитивным
  • **SBOM:** машиночитаемый инвентарь компонентов (SPDX/CycloneDX). При следующем Log4Shell - мгновенно знать, затронуты ли системы
  • **Sigstore:** подписывать образы через cosign в CI/CD. Верифицировать при деплое. Keyless signing - через OIDC, не статический ключ
  • **Lockfiles:** всегда в git, всегда npm ci (не npm install) в CI. Reproducible builds - одинаковый source = одинаковый binary

Связанные темы

Supply chain security - защита всей цепочки от code до production:

  • Безопасность контейнеров — Образы - конечная точка supply chain, сканирование уязвимостей
  • Безопасность API — API keys в зависимостях - частый вектор credential leakage
  • Шифрование данных — Подпись артефактов использует те же криптографические примитивы

Вопросы для размышления

  • Запущен ли Dependabot или Snyk на основных репозиториях? Как быстро приходят алерты о новых CVE?
  • Есть ли SBOM для production сервисов? Сколько времени займёт проверить, затронут ли следующий Log4Shell?
  • Подписываются ли Docker образы перед деплоем? Верифицируется ли подпись в Kubernetes через policy controller?

Связанные уроки

  • sec-18 — Контейнеры - конечная точка supply chain
  • oss-17-security
Supply Chain Security

0

1

Войти