Ответ вслух Senior Зависимости и supply chain обновлено

Кейс: вредоносная версия популярного пакета

Вопрос

Стало известно, что версия популярной npm-библиотеки, которую вы используете, содержала код кражи токенов. Ваши действия?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Первым делом нахожу масштаб: по SBOM, lock-файлам и логам CI определяю, где и в какой период ставилась вредоносная версия, включая ноутбуки разработчиков. Блокирую её в прокси-реестре и фиксирую безопасную версию.

Что должно прозвучать в ответе

  • Найти по SBOM и lock-файлам, где и когда эта версия устанавливалась, включая CI и машины разработчиков

  • Заблокировать версию в прокси-реестре, откатиться на безопасную

  • Считать скомпрометированными секреты окружений, где пакет устанавливался, и ротировать их

  • Проверить логи на использование украденных токенов

  • Расследование как инцидента и сообщение затронутым

  • Выводы: ignore-scripts, задержка на новые версии, минимальные секреты в сборке

Что могут спросить следом

  • Как понять, успел ли код выполниться?
  • Что изменить, чтобы такая атака не дала доступа к проду?

Разбор

Образцовый ответ: «Первым делом нахожу масштаб: по SBOM, lock-файлам и логам CI определяю, где и в какой период ставилась вредоносная версия, включая ноутбуки разработчиков. Блокирую её в прокси-реестре и фиксирую безопасную версию. Все секреты, доступные в этих окружениях (токены CI, npm, облака, переменные), считаю скомпрометированными и ротирую. Смотрю логи облака и реестров на использование токенов с чужих адресов. Работаю как с инцидентом: хронология, уведомления, если затронуты данные клиентов. Дальше меры: --ignore-scripts по умолчанию, политика не брать версии моложе нескольких дней, сборки без лишних секретов, OIDC вместо долгоживущих ключей».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.