Можно ли доверять библиотекам, которые использует ваше приложение?
Если вы знакомы с современными техниками написания высококачественного кода, тогда, пожалуй, вам не стоит волноваться об уязвимостях кода, который вы написали. Однако, обычно приложения используют сторонние библиотеки (зависимости) - можно ли доверять им?
Пожалуй, нет. В мире насчитывается огромное количество разных библиотек и мы не можем быть уверены, что все они безопасны и что в них нет уязвимостей. Но возникает вопрос, как тогда удостовериться, что мы не добавим в наш проект уязвимостей вместе с добавлением новой библиотеки?
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 для автоматических и регулярных проверок, чтобы своевременно узнавать о том, что в какой-то библиотеке была обнаружена уязвимость и необходимо ее устранить.
Полезные ссылки
Главная страница OWASP Dependency Check
Документация Dependency Check Gradle плагина на Github