0
Обложка: SCA-анализаторы и DevSecOps: как обезопасить приложение от уязвимостей

SCA-анализаторы и DevSecOps: как обезопасить приложение от уязвимостей

Использование фреймворков, библиотек и внешних сервисов для написания, хранения, тестирования и деплоя собственного кода — существенно ускоряет процесс разработки и выхода на рынок. Но это добавляет в IT-продукт множество сторонних зависимостей и связанных с ними уязвимостей.

В рамках данной статьи рассмотрим SCA-анализаторы — средства автоматизированной проверки используемых внешних библиотек и компонентов.

Анастасия Худоярова
Анастасия Худоярова
Ведущий специалист по безопасной разработке в Awillix

Даже гиганты отрасли, такие как Microsoft и IBM, не защищены от проблем безопасности, связанных с внешними библиотеками. Самый нашумевший пример — критическая уязвимость CVE-2021-44228, которая была обнаружена 9 декабря 2021 года и приводила к удаленному выполнению кода.

В прошлом году компании Claroty и Snyk провели исследование, в ходе которого нашли в популярных библиотеках ряд уязвимостей, которые приводили к XSS-атакам, Open Redirect, CSRF, DoS.

Обзор инструментов для анализа сторонних зависимостей

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

Для поддержания безопасности на всех этапах процесса разработки необходимо внедрение автоматических инструментов защиты. Это привело к возникновению подхода DevSecOps и появлению различных инструментов, в том числе для анализа сторонних зависимостей (SCA).

элементы подхода DevSecOps

SCA является частью Composition Analysis, который входит в управление кибер-рисками цепочки поставок.  Рассмотрим наиболее известные инструменты.

Dependency-Check

Данная утилита подойдет для анализа приложений, написанных на Python, Ruby, Java, .NET, Node.js.

Осуществляет поиск известных уязвимостей в базах NVD, Sonatype CSS Index, NPM Audit по CPE-записи, в которую входят название компонента, версия, вендор.

Минус: следует учитывать, что базы обновляются при каждом запуске утилиты, это увеличивает время сканирования.

Решение: для оптимизации работы подключить промежуточную базу MySQL, которая будет своеобразным локальным кэшем, который можно обновлять по расписанию с помощью специализированного ключа.

Dependency-Track

Используется для Java, Erlang, .Net, JavaScript, (NodeJS), PHP, Python, Ruby.

Веб-платформа, которая работает с форматом Bill-of-Materials, или BOM. Это xml-файл, в котором хранится спецификация ПО: хэши библиотек, их названия, соотношение друг с другом, версии и источники. Dependency-Track прогоняет их по базам NVD, Sonatype OSS Index, NPM, RetireJS, а также дает возможность поддерживать вашу собственную БД. Для наглядного представления результатов в утилите существуют дашборды.

Nexus IQ

Прекрасный выбор для работы с приложениями на Java, C/C++,  C#, .Net, JavaScript, PHP, Python, Ruby, Objective C,  Swift, R, Go.

Проприетарное решение от Sonatype, к преимуществам которого можно отнести низкое число ложных срабатываний — всего 2%, возможность сканирования Docker-контейнеров и поддержку различных форматов входных данных. Высокая точность достигается за счет использования собственных наработок  поиска уязвимостей, например, в отдельных функциях и классах.

Open Source Lifecycle Management

Анализирует приложения на Java, C#, PHP, Obj-C.

Наиболее подходит компаниям, которые находятся на начальной стадии SDLC и ищут наиболее важные для себя критерии в работе различных анализаторов.

Главная особенность утилиты — приоритизация рисков, которая подстраивается именно под ваш продукт: если у вас используется какая-то библиотека, но вы не вызываете уязвимый код напрямую, то степень критичности и риска уязвимости в конкретном приложении снижается. Другая интересная особенность — возможность подключения плагина анализатора в среду разработки. Это позволяет повысить качества кода с точки зрения безопасности уже на этапе его написания и осуществить проверку без необходимости отправки изменений на удаленный сервер.

Также в утилите предусмотрено удобное обновление до нужных версий через pull requests, что тоже удобно для разработчиков.

Минусы: сложно синхронизировать с BOM-файлами, если вы хотите проводить анализ, опираясь на них; не самое удобное представление для анализа транзитивных зависимостей.

Snyk

Одно из наиболее популярных решений для работы с  JavaScript, Java (Gradle, Maven), .NET, Python, Golang, Swift, Objective-C (CocoaPods), Scala, Ruby, PHP, and Baze.

Удобный для разработчиков инструмент,в котором есть возможность обновления через pull-request-ы, и, что самое интересное, добавления пользовательских исправлений, если вендор, например, еще не выпустил необходимых патчей. Также Snyk предоставляет граф, который отображает связи между зависимостями и ассоциированными с ними уязвимостями. Это облегчает работу при принятии решения об исправлении уязвимости.

Данная утилита позволяет повысить качество и надежность кода, а потому больше подходит разработчикам, чем аналитикам ИБ. Последним, возможно, будет недостаточно комплексной информации для полноценного анализа результатов.

Приведем пример pipeline-ов для Gitlab и Github Actions:

Настройка SCA анализатора Snyk
Настройка SCA анализатора Snyk

Обратите внимание на secrets.SNYK_TOKEN. Никогда не прописывайте токены непосредственно в код! Ваши секреты должны остаться в тайне, используйте отдельное хранилище или сохраните их в настройках гитлаба.

WhiteHat Security

Применяется при работе со следующими языками и платформами: Java, C#, PHP, Objective-C, JavaScript, HTML/5, XML, TypeScript, Python.

Решение подойдет для команд, в которых разработчики или аналитики по ИБ не имеют достаточного опыта работы с SCA-анализаторами.

Конечный результат автоматического сканирования проходит ручную верификацию уязвимостей на стороне специалистов WhiteHat Security, которые дадут вам дополнительную информацию, описание и рекомендации, которые характерны именно для вашего проекта.

Fossa

Работает с Java, Python, Golang, Java, Objective-C, Swift, Perl, Ruby, Rust, Scala, C/C++, Kotlin, подходит для анализа мобильных приложений, сканирования контейнеров.

Помимо анализа уязвимостей, в сервисе сделан акцент на лицензиях и авторских правах. Исследовательская группа юридических консультантов сервиса непрерывно поддерживает информацию open source лицензирования в актуальном состоянии.

Имеется возможность добавлять собственные модули и плагины, однако нередко возникают сложности при настройке SCA под специфичные требования компании.

JFrog Xray

Способен анализировать код на PHP, Java, Python, Golang, C/C++, Docker контейнеры, Maven, Gradle, RPM, NuGet и пакеты.

Утилита выполняет рекурсивный глубокий анализ и сканирование кода и бинарных файлов, которые лежат в Artifactory. Данный продукт является одним из лидеров рынка, так как позволяет анализировать уже скомпилированные бинарные файлы. Это дает возможность дополнительно убедиться в том, что при сборке приложения не были подгружены дополнительные уязвимые зависимости. Однако его уместно использовать, когда у вас уже есть своя экосистема или решения от JFrog.

Safety

Open source инструмент для анализа Python кода.

Отличается высокой точностью обнаружения уязвимостей благодаря использованию собственной базы SafetyDB, локальная версия которой обновляется раз в месяц. За дополнительную плату доступны ежедневные обновления. Запускать можно как локально, так и в пайплайнах, что удобно для разработчиков и ответственных за DevOps.

RetireJS

Предназначен для node-приложений.

Обширная база используется для других сканеров, например, Dependency-track.

NPM Audit

Удобный консольный инструмент разработчиков для локальной оценки потенциальных угроз.

Настройка NPM Audit SCA

AuditJS

Работает быстро, можно запускать локально и в пайплайнах. База используется в других сканерах, например, в Sonatype.

Bundler Audit

Один из лидеров среди анализаторов для Ruby.

Удобный и быстрый. Его БД уязвимостей также используется в других сканерах.

SCA: на что обратить внимание

При обнаружении уязвимости её устранение в конечном итоге ложится на плечи разработчика. Чем раньше он увидит проблему, тем быстрее и безболезненнее сможет ее исправить, поскольку могут возникнуть внезапные конфликты зависимостей или, например, при использовании безопасной версии компонента будут выявлены совершенно неожиданные баги.

Внедрение SCA упрощает жизнь и предоставляет информацию в наглядном виде. Но, несмотря на кажущуюся простоту SCA, могут возникнуть вопросы, над которыми следует задуматься.

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

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

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

Гибкой и удобной альтернативой является граф зависимостей. Для его построения можно воспользоваться встроенным функционалом анализаторов или, например, использовать IT-depends. Проанализировав граф, вы сформируете полное понимание, что нужно обновить.

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

Как выбрать SCA-анализатор

Для того, чтобы определиться, какой инструмент анализа сторонних зависимостей вам подойдет, ответьте на следующие вопросы:

  1. Какие языки вы хотите анализировать?
  2. Кто будет в основном пользоваться — разработчики или аналитики по ИБ?
  3. Каков масштаб вашего продукта? Сколько зависимостей вам нужно анализировать, требуются ли дашборды, нужны ли ролевые модели — в каждом инструменте свои особенности, которые следует учитывать при выборе.
  4. Что разрешают ваши политики безопасности? Какие модули политики есть, что вам нужно настраивать и дополнять — это тоже важный параметр, потому что не каждый инструмент обладает гибким и удобным интерфейсом.