Короткий ответ
Сначала через lock-файлы и SBOM находят все сервисы и версии сборок, которые использовали скомпрометированную версию пакета, изолируют/откатывают их на безопасную версию, ротируют все секреты, которые могли быть доступны через переменные окружения в затронутых окружениях, и затем вводят защиту «по умолчанию»: закрепление версий по хэшу, проверку источника пакетов, запрет автоматического подтягивания новых версий в сборке без ревью.
Как это работает подробнее
атаки на цепочку поставок часто происходят через компрометацию аккаунта мейнтейнера пакета или через публикацию версии с похожим именем (typosquatting); если сборка не фиксирует точную версию с хэшем и подтягивает «последнюю совместимую» версию автоматически, вредоносный код попадает в сборку без явного действия команды. SBOM и lock-файлы — это то, по чему можно быстро определить, какие артефакты реально включали скомпрометированную версию.
Что использовать на практике
- Практика. реагирование включает: инвентаризацию через SBOM/lock-файлы (где именно использована версия X.Y.Z), немедленную ротацию секретов, доступных процессу сборки/выполнения в затронутых окружениях (т.к. именно их атака пыталась украсть), откат на заведомо чистую версию и фиксацию её по хэшу/checksum, включение проверки целостности пакетов (integrity hash в
package-lock.json,--require-hashesв pip) и, где возможно, использование приватного proxy-реестра (Artifactory/Nexus) с собственной политикой допуска новых версий вместо прямого обращения к публичному реестру. - Проверка. Ожидаемое поведение: поиск по архиву SBOM возвращает точный список сервисов, собранных со скомпрометированной версией пакета, что позволяет приоритизировать ротацию секретов именно в этих окружениях; последующие сборки с проверкой integrity-хэша откажут собираться, если реестр вернёт пакет с содержимым, не совпадающим по checksum — это проверяется искусственной подменой содержимого пакета в тестовом реестре и наблюдением ошибки сборки.
Подводные камни
- Ошибка. считать инцидент закрытым после обновления пакета, не ротируя секреты, которые уже могли быть отправлены атакующему; продолжать использовать диапазоны версий (
^1.2.0) без lock-файла, что позволяет повторение той же проблемы с любым другим пакетом; не вести SBOM/инвентарь версий, из-за чего масштаб воздействия определяют вручную по всем репозиториям, теряя критичное время.