Сканирование Java приложений на уязвимости для усиления безопасности.

Сканирование Java приложений на уязвимости


Декабрь 23, 2021


Осторожность не помешает

«Безопасность — прежде всего»! Именно такого принципа придерживаются инженеры BellSoft, когда речь идет о поставке готовых продуктов нашим заказчикам. Будучи ведущим контрибьютором в OpenJDK и членом OpenJDK Vulnerability Group, мы выявляем и устраняем уязвимости и баги в тесном сотрудничестве с сообществом. Благодаря этому мы гарантируем, что в сборках Liberica JDK отсутствуют известные проблемы безопасности. Наша команда техподдержки работает в режиме 24x7x365 и дает SLA по запросу в течение часа.

Но вне зависимости от того, насколько безопасен JDK дистрибутив, вы должны гарантировать безопасность своего ПО на протяжении всей цепи поставки и своевременно устранять проблемы безопасности. В этом вам помогут сканеры безопасности.

В данной статье мы узнаем, почему сканирование на уязвимости является неотъемлемым компонентом стратегии DevOps, и сравним два популярных сканера безопасности для проектов на Java. Мы также проанализируем стандартное приложение с применением сканера и Liberica JDK в качестве рантайма.

  1. Обязательно проводите сканирование на уязвимости!
  2. Сканеры на страже Java приложений
  3. Как выбрать сканер для Java
    1. Snyk
    2. Xray Jfrog
  4. Повысьте безопасность вашего проекта с Liberica JDK и сканером
  5. Заключение

Обязательно проводите сканирование на уязвимости!

На все ПО, разработанное и публикуемое в рамках проекта OpenJDK, распространяется действие лицензии GPL: это значит, что компоненты программного обеспечения находятся в открытом доступе. Благодаря этому вы работаете в среде разработки, соответствующей стандартам Java SE, и свободно внедряете в свой проект неограниченное количество зависимостей с открытым исходным кодом, не платя за это ни копейки. Это выгодно, ведь в рамках любого проекта на Java используются десятки и даже сотни зависимостей. Они значительно ускоряют процесс разработки и облегчают жизнь программиста. Если вам нужно распарсить файл, подключиться к базе данных или упростить работу с классами Java с помощью дополнительных служебных методов, — вы с легкостью найдете инструмент для любой задачи. Просто зайдите в репозиторий Maven, где собраны все артефакты, и выберите версию, совместимую с вашим JDK и другими зависимостями. Удобно? Несомненно! Но, к сожалению, в мире открытого исходного кода есть свои подводные камни.

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

Таким образом, непрерывный мониторинг безопасности Java приложений является неотъемлемой частью процессов DevOps в вашей компании. Необходимо обеспечивать безопасность компонентов продукта на каждой стадии CI/CD пайплайна. В идеале разработчик должен:

  • Использовать артефакты только из надежных источников;
  • Внедрять только последнии версии зависимостей без известных уязвимостей;
  • Следить за выходом новых пакетов с исправленными уязвимостями;
  • Обновлять зависимости сразу после выхода новой версии.

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

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

Сканеры на страже Java приложений

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

alt_text

Процесс сканирования на уязвимости

Но на этом работа сканера не заканчивается. Хотя его интегрируют в проект на стадии сборки, он выполняет мониторинг безопасности компонентов на протяжении всего CI/CD пайплайна. У некоторых сканеров есть функция мониторинга безопасности на стадии после выпуска в производство.

После идентификации проблем есть два пути их решения:

  1. Обновить версию зависимости. Для этого, возможно, потребуется немного переписать код в целях сохранения совместимости.
  2. Удалить зависимость и использовать другую, отвечающую вашим нуждам. Скорее всего, в этом случае придется переписать часть кода, объем которой зависит от того, насколько глубоко внедрен компонент. Но чаще всего это не требуется, так как идентифицированные уязвимости быстро исправляются в следующем пакете.

Вам не нужно беспокоиться об устаревших версиях вашего ПО и самостоятельно сравнивать версии. Сканер делает это за вас.

Как выбрать сканер для Java

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

Самые популярные сканеры для разработки на Java — это Snyk, Xray Jfrog и Black Duck. Также есть сканеры с открытым исходным кодом, например, SonarQube или Trivy. Все сканеры различаются между собой ценой и функциональностью. Давайте сравним два из них: Snyk и Xray Jfrog.

Snyk

Snyk (сайт на английском языке) — это платформа разработчика по обеспечению безопасности приложений, которая сканирует код, зависимости, контейнеры и инфраструктуру как код (IaC) на уязвимости. Платформа работает на четырех уровнях:

  • Обнаруживает проблемы в коде в IDE, предлагает варианты их устранения и проверяет внесенные изменения;
  • Интегрирует репозитории исходного кода для сканирования на наличие проблем безопасности с автоматическим определением приоритетности. Можно посмотреть подробный отчет о каждой уязвимости или устранить несколько проблем одновременно;
  • Сканирует контейнеры на наличие уязвимостей и выполняет непрерывный мониторинг контейнерных образов в течение всего их жизненного цикла;
  • Интегрируется с вашим инструментом CI/CD, чтобы вы могли изучать результаты сканирования и варианты устранения проблем, не покидая инструмент сборки.

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

Xray Jfrog

Xray Jfrog (сайт на английском языке) — это бинарная аналитическая платформа, защищающая приложение на протяжении всего CI/CD пайплайна, от IDE до готового продукта, включая непрерывный мониторинг на стадии постпроизводства.

Отличительной чертой JFrog является нативная интеграция с Artifactory, хранилищем результатов сборки приложения. В результате JFrog предоставляет подробную информацию о проблемах безопасности и совместимости. JFrog использует глубокое рекурсивное сканирование бинарных файлов, анализируя все слои приложения и зависимости, включая компоненты, упакованные в образы Docker или zip архивы. Кроме того, JFrog создает график приложения, на основании которого сканер получает полный обзор приложения и может определить критичность уязвимостей.

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

Что касается подписки, доступны следующие планы:

  1. Облако. JFrog контролирует инфраструктуру и обеспечивает автоматические обновления и гарантированный аптайм;
  2. Собственный сервер. Вы можете самостоятельно разместить инструмент на вашем аппаратном обеспечении или в облаке.

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

Вне зависимости от того, какой сканер вы выберите, преимущества такого ПО очевидны:

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

Повысьте безопасность вашего проекта с Liberica JDK и сканером

А теперь давайте посмотрим на работу сканера в реальных условиях. Для этого мы проанализируем простое Java приложение с несколькими зависимостями, используя Liberica JDK в качестве среды исполнения и Snyk в качестве сканера.

Скачайте и установите Liberica JDK 17, последнюю LTS версию. Liberica JDK — это современный TCK-верифицированный рантайм Java с широким диапазоном поддерживаемых конфигураций и экспертной техподдержкой. Можно выбрать любую версию, BellSoft поддерживает даже Java 6 и 7, но последние версии включают в себя новые функции, облегчающие процесс разработки.

Теперь нам понадобится простое приложение с зависимостями. Скачайте приложение-образец Spring Petclinic. Вам не нужно ничего добавлять вручную, так как проект Petclinic уже содержит набор необходимых зависимостей.

Самое время запустить сканер! Вы можете выбрать любой удобный способ интеграции Snyk в ваше приложение:

  1. Система управления версиями (GitHub, репозитории Azure и т.д.);
  2. Реестры контейнеров или Kubernetes;
  3. Инструменты непрерывной интеграции (CLI, Jenkins и т.д.);
  4. Плагины IDE (Eclipse, IntelliJ, Android Studio и т.д.);
  5. Репозитории пакетов или serverless (плагин Artifactory, AWS Lambda и т.д.)

Мы остановились на плагине для IntelliJ IDEA. Можете установить сканер непосредственно в IDE через Preferences -> Plugins.

После установки нажмите на иконку Snyk для запуска сканирования проекта.

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

alt_text

Отчет о сканировании. Уязвимость средней степени серьезности

alt_text

Отчет о сканировании. Уязвимость высокой степени серьезности

alt_text

Отчет о сканировании. Уязвимость критической степени серьезности

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

Заключение

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

Используя Liberica JDK и сканирование на уязвимости, вы можете быть уверены в максимальной безопасности ваших приложений в любой момент времени. И помните: приложение не бывает «слишком безопасным»!

Author image

Сергей Чернышев

Старший разработчик, Java Platform

ООО БЕЛЛСОФТ info@axiomjdk.ru ООО БЕЛЛСОФТ logo Axiom Committed to Freedom 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67 ООО БЕЛЛСОФТ 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67 ООО БЕЛЛСОФТ 111 North Market Street, Suite 300 CA 95113 San Jose US +1 702 213-59-59