Угрозы цепочке поставок
Как зависимости превращаются в векторы атак
«Угрозы цепочке поставок» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Что такое атака на цепочку поставок
Атака на цепочку поставок программного обеспечения компрометирует организацию не напрямую, а через повреждение того, чему она доверяет и что использует: библиотеки, инструмента сборки, базового образа контейнера или сервера обновлений.
Поскольку современное программное обеспечение собирается из сотен сторонних компонентов, одно заражённое звено наследуется каждым последующим потребителем. Злоумышленник вкладывается один раз и получает доступ ко множеству жертв.
- Инверсия доверия — граница безопасности выходит за пределы собственного кода
- Транзитивный радиус поражения — один вредоносный пакет распространяется в тысячах сборок
Айсберг зависимостей
Когда Вы добавляете одну прямую зависимость, часто автоматически подключаются десятки транзитивных зависимостей, которые Вы никогда не выбирали. Типичное приложение на Node или Python объявляет несколько пакетов, но в итоге включает сотни зависимостей.
Перечислите всё дерево разрешённых зависимостей, а не только манифест, чтобы увидеть, что именно Вы поставляете:
# npm: full resolved dependency tree
npm ls --all
# Python: pinned transitive closure
pip freeze
# count transitive nodes
npm ls --all --parseable | wc -lТайпсквоттинг и путаница
Злоумышленники публикуют вредоносные пакеты с именами, похожими на имена популярных пакетов, рассчитывая на опасную опечатку.
- Тайпсквоттинг —
reqeustsвместоrequests - Комбосквоттинг —
python-requests, имитирующий настоящее имя - Путаница зависимостей — публикация общедоступного пакета с тем же именем, что и у Вашего внутреннего закрытого пакета, из-за чего неправильно настроенный механизм разрешения зависимостей загружает версию злоумышленника
Защититесь, зафиксировав доверенный внутренний реестр и используя закрытые пакеты с указанием области действия или пространства имён.
Захват учётной записи и прав сопровождающего
Легитимный, широко используемый пакет может стать вредоносным, если учётная запись его сопровождающего будет скомпрометирована или злоумышленник-участник получит права на публикацию.
Недавние реальные инциденты показывают, как злоумышленники выведывают учётные данные сопровождающих с помощью фишинга, а затем выпускают заражённое исправление, которое похищает токены во время установки.
- Требуйте двухфакторную аутентификацию для всех учётных записей, используемых для публикации
- Отдавайте предпочтение пакетам с токенами публикации с ограниченной областью действия и защищёнными выпусками
- Следите за появлением неожиданных новых сопровождающих у критически важных зависимостей
Вредоносные сценарии установки
Во многих экосистемах код выполняется во время установки, ещё до запуска Вашего приложения. Команда npm install может выполнить обработчик postinstall, который похитит переменные окружения или ключи SSH.
Отключайте произвольные сценарии установки в среде непрерывной интеграции и проверяйте все пакеты, которым они необходимы:
# npm: block lifecycle scripts during install
npm ci --ignore-scripts
# inspect what a package would run
npm view <package> scripts
# pnpm equivalent
pnpm install --ignore-scriptsСкомпрометированные инструменты сборки
Сама среда сборки представляет собой ценную цель. Если злоумышленник внедрит вредоносный код в компилятор, образ исполнителя непрерывной интеграции или плагин сборки, каждый созданный им артефакт будет содержать скрытый доступ, даже если Ваш исходный код чист.
Классический пример — троянизированный механизм обновления, который подписывает вредоносное ПО легитимным ключом подписи кода, поэтому жертвы принимают его за подлинное.
- Относитесь к инфраструктуре сборки как к рабочей инфраструктуре и полностью укрепляйте её
- Используйте временные воспроизводимые исполнители сборки
- Отделяйте ключи подписи от узла сборки
Файлы блокировки и хеши целостности
Файл блокировки фиксирует точные версии и хеши содержимого, поэтому повторное разрешение зависимостей не сможет незаметно подменить артефакт. Всегда добавляйте этот файл в репозиторий и позволяйте среде непрерывной интеграции проверять его, а не свободно разрешать зависимости заново.
В поле целостности хранится хеш; если загруженный архив не совпадает с ним, установка завершается с ошибкой.
# package-lock.json integrity entry
# "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
# "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA=="
# CI must install from lock, never re-resolve
npm ci
yarn install --frozen-lockfileСканирование зависимостей на уязвимости
Версии с известными уязвимостями (отслеживаемые как CVEs) — наиболее распространённая слабость цепочки поставок. Инструменты анализа состава программного обеспечения (SCA) сопоставляют разрешённые зависимости с базами данных уязвимостей.
Запускайте сканирование в среде непрерывной интеграции и останавливайте сборки при обнаружении критических проблем:
# npm built-in audit
npm audit --audit-level=high
# OSV scanner across ecosystems
osv-scanner --lockfile=package-lock.json
# Trivy for filesystem and images
trivy fs --severity HIGH,CRITICAL .Фиксация версий и включение зависимостей в репозиторий
Плавающие диапазоны версий (^1.2.0) позволяют новым выпускам автоматически попадать в проект. Это удобно, но подвергает Вас риску вредоносного исправления.
- Фиксируйте точные версии и осознанно проверяйте обновления
- Фиксируйте по дайджесту версии образов контейнеров, а не по изменяемым тегам вроде
latest - Включайте критически важные зависимости в собственный репозиторий или зеркало, чтобы удаление из исходного источника не нарушило Вашу работу и не привело к заражению
# pin a container image by immutable digest
FROM python:3.12-slim@sha256:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613fНепрерывный мониторинг и подтверждение происхождения
Защита цепочки поставок — это постоянный процесс, а не разовая проверка. Вам необходимо знать, что Вы поставляете, откуда это поступило и когда это станет уязвимым.
- Создавайте SBOM для каждого выпуска (в следующем уроке)
- Фиксируйте происхождение сборки, чтобы можно было доказать, как был создан артефакт
- Подпишитесь на уведомления об уязвимостях, чтобы новая CVE запускала повторную оценку уже выпущенных сборок
Моделирование угроз для конвейера
Отобразите каждый этап, на котором появляется ненадёжный ввод: компьютеры разработчиков, системы управления исходным кодом, реестры зависимостей, систему сборки, хранилище артефактов и канал обновлений. Каждый из них может стать точкой внедрения.
Для каждого этапа спросите: кто может вносить сюда изменения, что позволит ему сделать компрометация и как Вы её обнаружите? Такой подход даёт приоритизированный список мер защиты, а не общий контрольный список.
Быстрая проверка: путаница зависимостей
Проверьте понимание распространённого класса атак на цепочку поставок.
Итоги: угрозы цепочки поставок
Вы узнали, почему зависимости являются векторами атак и как уменьшить связанную с ними уязвимость.
- Инверсия доверия означает, что Ваша безопасность зависит от третьих сторон, которые Вы не контролируете
- К основным угрозам относятся: тайпсквоттинг, путаница зависимостей, захват учётной записи сопровождающего, вредоносные сценарии установки и скомпрометированные инструменты сборки
- Основные средства защиты: файлы блокировки с хешами целостности, сканирование с помощью SCA, точная фиксация по дайджесту, двухфакторная аутентификация для издателей и непрерывный мониторинг
Далее Вы составите точный перечень содержимого программного обеспечения с помощью SBOM.
Часто задаваемые вопросы
Урок «Угрозы цепочке поставок» бесплатный?
Да — полный текст урока «Угрозы цепочке поставок» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «Угрозы цепочке поставок»?
Как зависимости превращаются в векторы атак Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Угрозы цепочке поставок»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Угрозы цепочке поставок
- Перечень компонентов программного обеспечения (SBOM)
- Подпись зависимостей и артефактов
- Защита конвейеров CI/CD