awesome-everything EN
↑ Обратно к восхождению

Безопасность

Supply-chain безопасность: чтение конфигов и пайплайнов

Суть Читайте реальные манифесты, lockfile, вызов cosign verify и CI-воркфлоу, предсказывайте supply-chain поведение и выбирайте фикс с наибольшим рычагом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Supply-chain проблемы живут в манифестах, lockfile и YAML пайплайнов — не в коде приложения. Прочитайте каждый сниппет, предскажите, где шаг установки уязвим, и выберите фикс, который сеньор сделал бы первым.

Цель

Отработайте цикл, который вы запускаете в каждом supply-chain ревью: прочитать манифест и пайплайн, предсказать, где могут войти недоверенные байты или недоверенный код, и взяться за контроль с наибольшим рычагом, прежде чем добавлять ещё сканирование.

Сниппет 1 — манифест

// package.json — и шаг CI, который его ставит
{
  "dependencies": {
    "left-pad": "^1.3.0",
    "@acme/billing": "^2.0.0"
  }
}
// CI:  run: npm install
Викторина

Две вещи здесь ослабляют шаг установки. Какая пара и каков единственный фикс с наибольшим рычагом?

Сниппет 2 — манифест против lockfile

# package.json говорит:
"@acme/ui": "^3.1.0"

# package-lock.json (закоммичен) зафиксировал:
"@acme/ui": { "version": "3.1.0",
              "resolved": "https://registry.npmjs.org/@acme/ui/-/ui-3.1.0.tgz",
              "integrity": "sha512-Abc123..." }

# Вчера опубликована новая 3.4.0. CI запускает `npm ci`.
Викторина

С `npm ci` и этим закоммиченным lockfile какая версия установится и что делает поле integrity?

Сниппет 3 — проверка provenance

# Пайплайн релиза подписывает образ; шлюз деплоя проверяет до выката:
cosign verify \
  --certificate-identity-regexp "https://github.com/acme/.*" \
  --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
  ghcr.io/acme/api@sha256:9f2b...   # зафиксировано по digest, не :latest
Викторина

Что на самом деле гарантирует этот шлюз cosign verify и почему важен @sha256 digest (а не :latest)?

Сниппет 4 — CI-воркфлоу

on:
  pull_request_target:          # запускается в контексте БАЗОВОГО репозитория
jobs:
  build:
    permissions:
      contents: write
      packages: write
    steps:
      - uses: actions/checkout@v4
        with: { ref: ${{ github.event.pull_request.head.sha }} }  # выкачивает код PR
      - run: npm install && npm run build   # выполняет недоверенный код с токенами на запись + секретами
Викторина

Почему этот воркфлоу опасен и каков первый фикс?

Итог

Каждое supply-chain ревью читается в манифестах и YAML пайплайнов: caret-диапазоны плюс npm install пропускают новые или подменённые байты, тогда как закоммиченный lockfile плюс npm ci форсирует точные версии и integrity-хэши; cosign verify против ожидаемой идентичности сборки, с образом, зафиксированным по digest, отклоняет самозваные артефакты на шлюзе деплоя; а CI-воркфлоу, выполняющий недоверенный код PR с секретами на запись, — баг с наибольшим радиусом поражения. Читайте конфиг, найдите, где недоверенные байты или недоверенный код встречаются с вашими учётными данными, и чините эту границу прежде, чем добавлять ещё сканирование.

Продолжить восхождение ↑Supply-chain безопасность: укрепить пайплайн релиза от и до
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.