Если вы знакомы с современными техниками написания высококачественного кода, тогда, пожалуй, вам не стоит волноваться об уязвимостях кода, который вы написали. Однако, обычно приложения используют сторонние библиотеки (зависимости) - можно ли доверять им?

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

OWASP Dependency-Check на выручку

Существует очень легкий и удобный способ убедиться, что новая библиотека не добавит уязвимостей в ваш проект - OWASP Dependency-Check. Это инструмент анализа состава программного обеспечения (SCA), который занимается обнаружением публично раскрытых уязвимостей, содержащихся в зависимостях проекта.

Шаг 1 - Добавьте dependency check gradle плагин

Добавьте зависимость в ваш корневой build.gradle файл:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.owasp:dependency-check-gradle:7.2.0'
    }
}

Затем добавьте dependency check gradle плагин в app/build.gradle:

apply plugin: 'org.owasp.dependencycheck'

Шаг 2 - Запустите gradle-команду для проверки зависимостей

Начните проверку библиотек, используя следующую gradle команду:

./gradlew dependencyCheckAnalyze

При первом запуске потребуется некоторое время для загрузки файлов и выполнения проверки зависимостей. В результате проверки будет сгенерирован html-отчет:

При обнаружении уязвимостей, первым делом попробуйте проверить последнюю версию библиотеки - уязвимость может быть уже исправлена. Например, последние версии библиотеки Gson не содержат уязвимостей:

Таким образом, просто обновите версию библиотеки до последней и проблема будет устранена.

Шаг 3 - Настройте CI для автоматической проверки

Очень удобно настроить CI автоматически запускать проверку зависимостей и завершать сборку приложения с ошибкой, если уязвимости были обнаружены. Если вы используете Github Actions, добавьте следующий шаг для проверки зависимостей:

- name: Run dependency check
  run: ./gradlew dependencyCheckAnalyze

А чтобы завершить сборку приложения с ошибкой при обнаружении библиотек с уязвимостями, добавьте следующую инструкцию в app/build.gradle:

dependencyCheck {
    failBuildOnCVSS = 0
}

Выводы

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

Полезные ссылки

Комментарии (0)