Что такое OSA / SCA
Ранее я писал про SAST — анализ собственного кода. Но есть ещё один пласт, который многие недооценивают: чужой код, который мы тащим к себе в проект вместе с библиотеками, пакетами и фреймворками.
━━━━━━━━ Что такое OSA / SCA ━━━━━━━
SCA (Software Composition Analysis) — это анализ состава приложения: какие open-source и сторонние компоненты используются в проекте, какие у них есть уязвимости, лицензии и зависимости.
OSA (Open Source Analysis) — по сути тот же класс задач: понять, из чего реально собран ваш проект и какие риски вы импортировали вместе с зависимостями.
━━━━━━━━ Что такое транзитивные зависимости ━━━━━━━
Вы подключили одну библиотеку. Она подтянула ещё пять. Те подтянули ещё двадцать. А потом внезапно выясняется, что ваш “небольшой сервис” уже живёт на целом лесу чужого кода.
Это и есть транзитивные зависимости — зависимости ваших зависимостей.
Ирония здесь в том, что многие разработчики до сих пор искренне удивляются, почему их фреймворк весит не “пару файлов”, а гигабайты, а итоговый контейнер выглядит как маленькая операционная система. Но библиотеки с нуля сегодня почти никто не пишет: мы все давно собираем свои приложения из чужих кубиков, а потом делаем вид, что это “наш код”.
По данным Black Duck, 64% open-source компонентов в типичном кодовой базе — это именно транзитивные зависимости. У Snyk есть ещё более жёсткая оценка: около 80% уязвимостей в open-source пакетах находятся в транзитивных зависимостях. То есть основная боль часто живёт даже не там, куда вы смотрите руками.
━━━━━━━━ Какие есть инструменты для анализа ━━━━━━━
Из open-source и “бесплатно попробовать” чаще всего вспоминают: — OWASP Dependency-Check — Trivy
━━━━━━━━ Где начинается реальная боль ━━━━━━━
В теории всё красиво: подключил scanner, получил список проблем, обновил пакеты, победил.
На практике вы запускаете SCA и получаете сотни или тысячи алертов. Часть из них: • глубоко сидит в транзитивке; • не вызывается в runtime; • неэксплуатируема в вашем сценарии; • либо просто создаёт шум.
И вот тут начинается старый добрый конфликт между разработкой и ИБ: одни говорят “у нас тысяча алертов, вы серьёзно хотите всё это чинить?”, другие отвечают “это же поверхность атаки”. И обе стороны по-своему правы.
━━━━━━━━ Мини-итог ━━━━━━━
Если говорить субъективно, то мы сами загнали себя в эту реальность. Мы хотели писать быстрее, проще и удобнее. Хотели не изобретать велосипед. Хотели брать готовое. И получили мир, где приложение часто состоит не столько из нашего кода, сколько из длинной цепочки чужих решений.
· 26.03
Про транзитивные зависимости — больная тема для Node.js экосистемы. В типичном Next.js проекте node_modules содержит 1000+ пакетов, и 90% из них — транзитивка. Запускаешь npm audit и получаешь 50 critical, из которых 45 сидят в зависимостях зависимостей, где ты даже не можешь сделать прямой override. На практике Trivy в CI/CD pipeline оказался самым адекватным решением — он хотя бы показывает reachability, а не просто «у вас тут CVE». А конфликт между «1000 алертов» и «поверхность атаки» решается только через policy: критичные CVE фиксим сразу, остальное в бэклог с review раз в спринт.
ответить
коммент удалён