Технологии

Как вредоносный код проникает в доверенное ПО через цепочку поставок

Susan Hill

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

Почти ничто из того, что вы запускаете сегодня, не написано целиком той компанией, чьё имя стоит на экране. Одно приложение может тянуть за собой сотни или тысячи пакетов с открытым кодом, каждый из которых поддерживают незнакомые люди и за каждым тянутся ещё пакеты. Разработчики редко читают этот код; они доверяют реестру, откуда он пришёл, и приложенному номеру версии. Тот, кто проникает в любое звено этой цепи, разом достаёт до всех, кто ниже по течению, и поэтому одна отравленная деталь способна задеть десятки тысяч проектов, прежде чем кто-то это заметит.

Точки входа сводятся к нескольким схемам. Тайпсквоттинг подкладывает вредоносный пакет с именем в одно нажатие клавиши от популярного и ждёт опечатки. Путаница зависимостей использует то, как инструменты сборки разрешают имена, и обманом заставляет их взять публичный пакет вместо частного пакета компании. Захват учётной записи присваивает учётные данные настоящего сопровождающего и рассылает вредонос как рядовое обновление; в начале 2026 года широко используемый пакет axios на короткое время выпустил скомпрометированную версию после того, как машину его главного сопровождающего взломали с помощью социальной инженерии. А отравление конвейера сборки бьёт по автоматическим системам, которые собирают и выпускают ПО, где один испорченный шаг достаёт до каждого зависимого проекта.

Конвейер сборки стал самой желанной мишенью именно потому, что стоит выше всего остального. Когда популярный компонент GitHub Actions tj-actions/changed-files был скомпрометирован в 2025 году, злоумышленники переписали его теги версий так, чтобы они указывали на вредоносный код, и вытащили секреты из журналов сборки более чем двадцати тысяч репозиториев: ключи доступа, токены и закрытые ключи — всё открытым текстом. Более поздняя кампания, которую исследователи назвали Megalodon, превратила GitHub Actions в самораспространяющийся бэкдор, добравшийся до 5561 репозитория примерно за шесть часов. Машину, которая собирает ваше ПО, можно подменить так же легко, как и само ПО.

Инструменты, которыми разработчики пользуются каждый день, тоже в зоне поражения. GlassWorm, впервые обнаруженный в конце 2025 года, расходился через расширения для Visual Studio Code в магазинах OpenVSX и Microsoft. Он прятал свою нагрузку с помощью невидимых символов Unicode, так что вредоносные строки были буквально нечитаемы в редакторе и проходили человеческую проверку. После установки он крал учётные данные npm, GitHub и Git и использовал их, чтобы автоматически заражать новые пакеты и расширения, — определяющая черта червя. Поскольку редакторы обновляют расширения тихо, в фоне, жертвы получали отравленные версии, ничего не нажимая. Ещё одно отравленное расширение VS Code послужило для кражи около 3800 внутренних репозиториев самого GitHub.

Что делает эти атаки такими неуловимыми, так это то, что каждый отдельный шаг выглядит законным. Пакет подписан. Обновление приходит из настоящего реестра. Учётная запись сопровождающего подлинная. Традиционная защита ищет известные вредоносные файлы и явный вредонос, но атаки на цепочку поставок прячутся внутри доверенного, ожидаемого и зачастую невидимого кода, который приходит ровно тогда и так, как и положено приходить ПО. Хуже того: давний совет по безопасности — обновляться немедленно — и есть тот механизм, на который рассчитывает атакующий. Впервые установка свежей версии перестала быть однозначно безопасным выбором.

Защитники сошлись на горстке приёмов, которые работают. Файлы блокировки закрепляют каждую зависимость за точной, проверенной версией, так что установщик берёт только проверенное, а не просто самое новое. Отключение автоматических установочных скриптов перекрывает самый частый путь, которым вредоносный пакет запускает код в момент появления. Привязка GitHub Actions к конкретному хешу коммита, а не к подвижному тегу, обнуляет трюк с переписыванием тегов. Список компонентов ПО — подробная опись всего, что входит в сборку, — позволяет команде за минуты понять, уязвима ли она, когда раскрывают очередной инцидент. Многие организации, избежавшие недавних атак, не сделали ничего экзотического: они собирали из зафиксированного файла блокировки и работали за прокси реестра, который отправлял свежеопубликованные пакеты в карантин.

Для тех, кто не пишет код, защита по большей части косвенная, но урок — нет. Цепочка поставок ПО сегодня — поле боя первой линии, и обезопасить её должны те компании, что делают приложения в вашем телефоне и ноутбуке. Разумная реакция — это ни паника, ни старый рефлекс обновлять всё, едва появится уведомление. Это предпочитать ПО команд, которые открыто говорят, что они выпускают и как собирают, и относиться к доверенному источнику как к тому, что нужно заслужить на каждом звене, а не как к свойству, само собой спускающемуся по цепи.

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

Обсуждение

Имеется 0 комментариев.