Автор: Алексей Смирнов · Podlodka Podcast #448
Уводим «Хвост инженера» в сторону безопасности. Этот выпуск Podlodka — о том, как уязвимости приходят в проект через обычные зависимости и наши привычки.
Алексей Смирнов основал CodeScoring — платформу для анализа open source зависимостей. Разбирает то, что обычно выпадает из разговоров о безопасном коде: угрозы, которые приходят не из вашего репозитория.
Уязвимость может прийти из библиотеки, которую вы не трогали три года, из инструмента сборки, из GitHub Actions. Ответственность разработчика распространяется на весь граф зависимостей — не только на то, что вышло из-под его рук.
Кому смотреть: тем, кто подключает зависимости не задумываясь и считает, что безопасность — это про свой код, а не чужой.
Из этого можно взять в работу: посмотри, что происходит с зависимостями, когда меняется мейнтейнер. XZ Utils показал, что именно здесь и нужно смотреть в первую очередь.
Что такое Supply Chain Attack
Атака на цепочку поставки — это компрометация не вашего кода, а чего-то, от чего он зависит. Злоумышленник не ломает ваш сервер — он ломает инструмент или библиотеку, которыми вы пользуетесь. Самый наглядный пример из выпуска — бэкдор в XZ Utils (CVE-2024-3094): атакующий под псевдонимом «Jia Tan» два года контрибьютил в проект, получил права мейнтейнера и внедрил бэкдор не в git-историю, а в tarball-релизы. Обнаружили случайно — по аномалии CPU при SSH.
Основные векторы атак
- Dependency confusion — публикация в публичный реестр пакета с тем же именем, что у внутреннего. Менеджер пакетов выберет «новую» публичную версию.
- Тайпсквоттинг —
reqestsвместоrequests. Опечатка при установке делает своё дело. - Компрометация мейнтейнера — захват аккаунта или социальная инженерия, как в случае XZ.
- Вредоносные обновления — легитимный пакет обновляется уже с новым хозяином (история с
event-streamв npm). - Атаки через CI/CD — компрометация GitHub Actions, образов Docker Hub, артефактов сборки.
Как защищаться
- SCA (Software Composition Analysis) — автоматический анализ зависимостей на CVE, встроенный в CI, а не запускаемый раз в квартал. Инструменты: Snyk, Dependabot, CodeScoring.
- SLSA (Supply-chain Levels for Software Artifacts) — фреймворк от Google с четырьмя уровнями доверия к сборочной цепочке: воспроизводимые сборки, подписанные артефакты, аудируемый provenance.
- SBOM (Software Bill of Materials) — машиночитаемый реестр всех зависимостей. В США уже стал регуляторным требованием.
- Pinning + хеши — фиксировать не диапазон версий, а конкретный integrity hash.
Про AI-генерированный код
LLM-модели обучались на всём GitHub — включая уязвимый код. Veracode зафиксировал: ассистенты стабильно воспроизводят известные классы уязвимостей. DevSecOps-пайплайн должен покрывать и этот слой.