Snyk
Официальный сайт: snyk.io
Стоимость: есть бесплатная Open Source версия, а также несколько платных тарифов. Более подробно ознакомиться с тарифными планами можно по ссылке.
Поддерживаемые языки программирования и фреймворки: .NET, C/C++, GO, Java, Kotlin, JavaScript, PHP, Python, Ruby, Swift, Objective-C. Полный список есть на сайте.
Интеграция со сторонними сервисами: GitHub, GitLab, Bitbucket, Jira, Slack, Docker и некоторые другие.
Snyk представляет собой инструмент с открытым исходным кодом, который ищет в зависимостях возможные проблемы безопасности. Одна из главных особенностей Snyk — инструмент можно запускать тремя разными способами: в командной строке, Docker-контейнере и веб-интерфейсе.
Для поиска Snyk использует собственную базу данных. Помимо уязвимостей для многочисленных языков программирования, в базе также имеются уязвимости для Kubernetes, AWS, Google Cloud Platform, Microsoft Azure, Ubuntu, Alpine Linux, Oracle Linux.
В веб-интерфейсе Snyk можно подключать свои репозитории с исходным кодом.
![](https://vaiti.io/wp-content/uploads/2024/06/1-4-1024x458.png)
Snyk поддерживает репозитории с артефактами, например реестры Docker Hub, Artifactory, Harbor, Nexus.
![](https://vaiti.io/wp-content/uploads/2024/06/2-4-1024x635.png)
У Snyk есть свой плагин для различных IDE-систем: Visual Studio Code, Eclipse, Android Studio.
![](https://vaiti.io/wp-content/uploads/2024/06/3-4-1024x592.png)
Разберем функциональность поиска уязвимостей на примере подключенного GitHub-репозитория с проектом на языке Python. После добавления репозитория начнется процесс сканирования, а по завершении будет отображен отчет с найденными уязвимостями.
Snyk ищет уязвимости в сторонних компонентах, поэтому сканирует именно тот файл, в котором эти библиотеки перечислены. Для программ, написанных на языке программирования Python, сторонние уязвимости указываются в текстовом файле с именем requirements.txt.
![](https://vaiti.io/wp-content/uploads/2024/06/4-3-1024x231.png)
Все уязвимости в Snyk подразделяются на следующие степени критичности:
- критические (Critical) обозначаются бордовым цветом;
- высокие (High) — красным;
- средние (Medium) — оранжевым;
- низкие (Low) — серым.
Чем больше степень критичности у найденной уязвимости, тем большую угрозу безопасности она представляет и тем большее внимание необходимо на нее обратить в первую очередь.
Так выглядит отчет с найденными уязвимостями:
![](https://vaiti.io/wp-content/uploads/2024/06/5-3-1024x432.png)
Для каждой найденной уязвимости есть подробное описание.
![](https://vaiti.io/wp-content/uploads/2024/06/6-3-1024x517.png)
Для исправления конкретной уязвимости можно создать Pull Request, в котором автоматически будет сгенерирована вся необходимая информация.
OWASP Dependency-Check
Официальный сайт: OWASP Dependency-Check
Стоимость: бесплатная версия Open Source.
Поддерживаемые языки программирования и фреймворки: .NET, Java, JavaScript, Ruby, Python. С полным списком поддерживаемых языков программирования можно ознакомиться по ссылке.
Интеграция со сторонними сервисами: поддерживаются следующие интеграции при помощи плагина — Jenkins, Scala, SonarQube, Circle CI.
OWASP Dependency-Check представляет собой бесплатную утилиту с открытым исходным кодом для поиска и обнаружения уязвимостей в используемых библиотеках разрабатываемого приложения.
Проект разработан некоммерческой организацией OWASP (Open Web Application Security Project), которая публикует материалы об информационной безопасности и разрабатывает собственное программное обеспечение.
После завершения сканирования Dependency-Check генерирует отчет в формате HTML, в котором подробно описаны найденные уязвимости.
Установим утилиту и запустим сканирование тестового проекта, написанного на языке Java. Я использую дистрибутив Ubuntu версии 22.04 и выполняю все команды от имени root-пользователя.
1. Для начала необходимо установить Java 8-й версии, так как для запуска Dependency-Check необходима Java. Для установки Java необходимо выполнить команду:
apt -y install openjdk-8-jre-headless
2. После того как Java была успешно установлена, скачиваем последнюю актуальную версию программы (на момент написания статьи это 9.2.0) при помощи утилиты wget:
wget https://github.com/jeremylong/DependencyCheck/releases/download/v9.2.0/dependency-check-9.2.0-release.zip
3. Разархивируем скачанный архив, используя утилиту unzip. Если утилиты нет в системе, ее необходимо установить при помощи команды:
apt -y install zip
Далее разархивируем:
unzip dependency-check-9.2.0-release.zip
4. В созданной директории dependency-check/bin будет находиться файл dependency-check.sh. Создадим для этого файла символьную ссылку в директорию /usr/bin, чтобы запускать Dependency-Check из любого места в системе:
ln -s /root/dependency-check/bin/dependency-check.sh /usr/bin/dependency-check.sh
5. Проверяем, что программа была корректно установлена путем вывода версии:
dependency-check.sh --version
![](https://vaiti.io/wp-content/uploads/2024/06/7-1.png)
Если в выводе отобразилась используемая версия, то Dependency-Check успешно установлен.
Далее мы просканируем тестовый проект на Java. Для этого воспользуемся командой:
dependency-check.sh --scan basic-selenium-project/
Здесь basic-selenium-project — это имя директории с исходным кодом.
![](https://vaiti.io/wp-content/uploads/2024/06/8-1-1024x155.png)
Первое сканирование может занять длительное время, потому что программе необходимо обновить базу данных существующих уязвимостей.
После завершения сканирования программа сохранит отчет в ту директорию, из которой запускалась команда сканирования. Отчет всегда генерируется в формате HTML.
В отчете в первую очередь отображается вкладка Summary, в которой перечислены все зависимости с уязвимостями.
![](https://vaiti.io/wp-content/uploads/2024/06/9-1-1024x694.png)
Так же, как и в Snyk, все найденные уязвимости подразделяются на степени критичности — Critical, High, Medium, Low.
Если перейти по ссылке уязвимости, откроется ее более подробное описание.
![](https://vaiti.io/wp-content/uploads/2024/06/10-1-1024x382.png)
Dependency-Track
Официальный сайт: Dependency-Track
Стоимость: бесплатная версия Open Source.
Поддерживаемые языки программирования и фреймворки: Cargo (Rust), Composer (PHP), Gems (Ruby), Hex (Erlang/Elixir), Maven (Java), NPM (Javascript), NuGet (.NET), PyPI (Python).
Интеграция со сторонними сервисами: GitHub, Azure DevOps, MixewayHub. Список всех поддерживаемых сервисов по ссылке.
Dependency-Track — инструмент, который работает с форматом BOM (Bill-of-Materials). Это XML-файл, в котором хранятся описания используемых библиотек, включающий такую информацию, как названия библиотек, их версии, источники и так далее. Dependency-Track использует несколько баз данных уязвимостей — NVD, Sonatype OSS Index, NPM.
Программа работает через веб-интерфейс, в котором есть различные графики для наглядного контроля за найденными уязвимостями.
Dependency-Track устанавливается при помощи утилиты docker compose. Предварительно установите Docker и docker compose на вашем сервере. Для установки Dependency-Track выполняем следующие шаги:
1. Скачиваем официальный docker compose файл:
curl -LO https://dependencytrack.org/docker-compose.yml
2. В скачанном файле ищем строку API_BASE_URL и в ее значении меняем адрес с localhost на адрес или доменное имя сервера, на котором будет запускаться Dependency-Track:
![](https://vaiti.io/wp-content/uploads/2024/06/11.png)
3. Запускаем Dependency-Track при помощи команды:
docker compose up -d
![](https://vaiti.io/wp-content/uploads/2024/06/12-1024x522.png)
4. Веб-интерфейс программы находится на порту 8080. При первом входе необходимо ввести стандартные данные:
логин: admin
пароль: admin
![](https://vaiti.io/wp-content/uploads/2024/06/13-1024x579.png)
5. Далее программа попросит ввести еще раз стандартный логин и пароль и задать новый пароль для учетной записи admin:
![](https://vaiti.io/wp-content/uploads/2024/06/14-1024x742.png)
6. Для того чтобы запустить сканирование, надо создать новый проект. В главном меню слева выбираем вкладку Projects («Проекты») и нажимаем на Create Project («Создать новый проект»):
![](https://vaiti.io/wp-content/uploads/2024/06/15.png)
7. Далее задаем любое имя для проекта (Project name) и выбираем тип проекта из выпадающего списка (Classifier). Нажимаем на кнопку Create.
![](https://vaiti.io/wp-content/uploads/2024/06/16-905x1024.png)
8. Когда проект создан, переходим в раздел Components и нажимаем на кнопку Upload BOM:
![](https://vaiti.io/wp-content/uploads/2024/06/17.png)
Как я уже упомянул ранее, Dependency-Check работает только с файлами типа BOM. Для примера возьмем один из таких файлов, использовавшийся в проекте для JavaScript. Выбираем файл при помощи кнопки Browse:
![](https://vaiti.io/wp-content/uploads/2024/06/18-1024x281.png)
Когда файл будет просканирован, в отчете отобразятся все используемые библиотеки и найденные уязвимости.
![](https://vaiti.io/wp-content/uploads/2024/06/19-1024x429.png)
Чтобы увидеть более подробную информацию, нужно открыть необходимый компонент.
![](https://vaiti.io/wp-content/uploads/2024/06/20-1024x429.png)
Для каждого проекта отображается общая картина по найденным уязвимостям.
![](https://vaiti.io/wp-content/uploads/2024/06/21-1024x338.png)
Заключение
Большинство библиотек, которые используются при разработке приложений, имеют открытый исходный код. Именно поэтому важно отслеживать, насколько они безопасны для вас, нет ли в них «дыр». В этой статье мы рассмотрели топ-3 популярных сканера для поиска уязвимостей в сторонних компонентах и подключенных библиотеках.