Флаг: English English Флаг: Español Español

SCA — проверяем «чужой» код на вшивость

Опубликовано 17.01.2026

Представьте, что вы строите дом. Вы сами спроектировали стены, проверили каждый кирпич и убедились, что не забыли ключи в замке. Но что, если бетон, который вы купили у стороннего поставщика, со временем начинает рассыпаться? Или в готовых оконных рамах, которые вы установили, есть скрытые дефекты?

В современной разработке ситуация именно такая. Среднестатистическое приложение сегодня на 80–90% состоит из Open Source библиотек. Вы пишете лишь небольшую часть кода (верхушка айсберга), которая управляет огромным массивом чужого кода, скрытого «под водой».


Что такое SCA и зачем он нужен новичку?

SCA (Software Composition Analysis) — это процесс анализа состава вашего программного обеспечения. Проще говоря, это инструмент, который составляет список всех библиотек, которые вы используете (включая те, о которых вы даже не подозреваете), и проверяет их по базам известных уязвимостей.

Почему это критично?

Вы можете быть гением программирования и писать идеально защищённый код, но если вы используете популярную библиотеку для логирования или обработки картинок, в которой нашли дыру — ваше приложение будет взломано.

Классический пример: Log4Shell (2021 год). В крошечной библиотеке для Java (Log4j), которую использовали миллионы серверов по всему миру, нашли критическую уязвимость. Хакерам достаточно было «подсунуть» специально сформированную строку туда, где она попадёт в логи, чтобы получить удалённое выполнение кода и полный контроль над сервером. Компании тратили недели, просто чтобы найти, в каких именно их проектах используется эта библиотека.


Как это работает? Транзитивные зависимости

Когда вы добавляете в проект одну библиотеку (например, requests в Python или express в Node.js), она, в свою очередь, тянет за собой другие библиотеки. Те — следующие. Это называется транзитивными зависимостями.

В итоге, добавив один пакет, вы можете незаметно притащить в проект ещё 50 чужих модулей. SCA-сканеры анализируют ваши файлы манифестов (package.json, requirements.txt, go.mod, pom.xml) и строят полное дерево зависимостей, проверяя каждый элемент.


Инструмент: знакомство с Trivy

Для новичка хорошим выбором будет Trivy от компании Aqua Security. Это «швейцарский нож» безопасности: он умеет сканировать и файлы проектов, и Docker-образы, и Git-репозитории, а также другие цели.

Почему Trivy?

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

Практический пример: сканируем проект

Допустим, у вас есть проект на Node.js или Python.

Установка

macOS:

brew install aquasecurity/trivy/trivy

(Также в Homebrew доступна формула trivy, то есть можно поставить и так: brew install trivy.)

Linux/Windows: Скачайте бинарный файл из релизов Trivy и установите его в PATH.

Запуск сканирования файловой системы

trivy fs ./путь/к/вашему/проекту

Что вы увидите в терминале? Trivy выведет таблицу. В ней будут:

  • Library: название библиотеки (например, django или lodash).
  • Vulnerability ID: номер уязвимости в мировом реестре (например, CVE-2023-1234).
  • Severity: насколько это опасно (LOW, MEDIUM, HIGH, CRITICAL).
  • Installed Version: какая версия у вас сейчас.
  • Fixed Version: на какую версию вам нужно обновиться, чтобы закрыть дыру.

Стратегия выживания: что делать с результатами?

Когда вы впервые запустите SCA-сканер на реальном проекте, вы можете ужаснуться: «У меня 200 уязвимостей! Что делать?!» Спокойно. Не все они одинаково опасны.

1) Приоритеты (Triage)

Сначала исправляйте CRITICAL и HIGH. Это те дыры, которые чаще всего можно эксплуатировать относительно быстро и с высоким эффектом. Уязвимости уровня LOW часто носят более теоретический характер и могут подождать.

2) Обновление — лучший лекарь

В большинстве случаев решение проблемы SCA — это просто обновление зависимостей:

npm update
pip install --upgrade ...

Но будьте осторожны: мажорные обновления (например, с версии 2.0 на 3.0) могут сломать ваш код. Всегда проверяйте работоспособность после обновления.

3) Автоматизация (Dependabot и аналоги)

Если вы используете GitHub, обязательно включите Dependabot. Это робот, который сканирует зависимости и автоматически создаёт Pull Request с обновлением, если находит уязвимость. Вам остаётся только пройти стандартный процесс ревью/тестов и нажать кнопку «Merge».


Ловушка SCA: лицензионная чистота

Помимо безопасности, SCA-инструменты часто проверяют лицензии. Представьте, что вы случайно использовали библиотеку с лицензией GPL в коммерческом проекте. В зависимости от сценария распространения и юридической интерпретации это может создать обязательства по раскрытию исходного кода или иные требования. Продвинутые SCA-сканеры предупреждают об этом заранее, чтобы у юристов вашей компании не возникло вопросов.


Резюме: правила работы с зависимостями

  • Меньше — лучше: не тащите в проект библиотеку ради одной функции, которую можно написать в пять строк кода. Каждый новый пакет — это потенциальная дыра в безопасности.
  • Сканируйте регулярно: новые уязвимости находят постоянно. То, что было безопасно вчера, может стать критической угрозой сегодня.
  • Используйте lock-файлы: всегда фиксируйте версии (package-lock.json, poetry.lock), чтобы в продакшен не попала версия библиотеки, которую вы не тестировали.

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Похожие посты