В современных средах разработки программного обеспечения команды разработчиков часто полагаются на сторонние компоненты с открытым исходным кодом, чтобы сэкономить время и повысить эффективность. Сами эти компоненты разрабатываются участниками сообщества с открытым исходным кодом (Github, Gitee). Однако это также несет в себе некоторые потенциальные риски для безопасности, особенно когда речь идет о безопасности цепочки поставок (разработчики этих компонентов плохо разбираются в командах безопасности). , риск злонамеренного отравления цепочки поставок) и проблемы качества сторонних компонентов (плагиат, риск несоответствия лицензии с открытым исходным кодом).
SCA(Software Composition Analysis)переводится какпрограммное анализ компонентов программного обеспечения, популярное понимание — это анализ программного обеспечения. программное обеспечение содержит некоторую информацию и функции для реализации программного обеспечения. обеспечивающие технологии для идентификации, управления и отслеживания. Технология SCA может эффективно помочь пользователям открыть для себя Открытый исходный код Проблемы безопасности в компонентах。SCAСуществует три основных варианта использования:Управление уязвимостями открытого исходного кода, управление лицензиями на открытый исходный код и контрольный список SBOM。
Разработчики часто вводят в программное обеспечение фрагменты, функции, методы и операционный код с открытым исходным кодом. Поэтому программный код часто содержит различные подкомпоненты, требующие разных лицензий. Риски несоответствия лицензии могут возникнуть, если условия лицензии этих подкомпонентов противоречат условиям общей основной лицензии для проекта. Обнаружение кода того же происхождения в основном используется для выявления проблем с соблюдением требований, вызванных плагиатом кода.
Сбор уязвимостей: например, сканирование данных на NVD, CVE и других платформах обнаружения дефектов и объединение их в вашу собственную базу данных уязвимостей. Запрос уязвимостей: на основе информации SBOM, созданной программным обеспечением пользователя, запросите данные об уязвимостях в базе данных уязвимостей, обобщите их в отчет о дефектах и предоставьте его пользователю. Недостатки: Большинство частей проверки уязвимостей еще не имеют анализа достижимости на основе уязвимостей, что приводит к множеству ложных срабатываний в связанных отчетах.
Принцип работы инструмента SCA заключается в сканировании всех компонентов компонентов, ссылочных зависимостях, версиях и другой информации в целевой системе и сопоставлении ее с многочисленными базами данных уязвимостей, включая Национальную платформу обмена информацией об уязвимостях информационной безопасности (CNVD) и Национальную платформу информационной безопасности по уязвимостям. База данных (CNNVD), Национальная Vulnerability База данных (ПНВ) и т. д.,Достижение соответствия и идентификациилазейки、Последствия рисков, таких как соблюдение лицензий。ВлияниеSCAФакторы, определяющие точность анализа кода, в основном делятся на три аспекта::Первый — это количество компонентов и алгоритмов обнаружения, поддерживаемых инструментами SCA, второй — то, как приложения ссылаются на компоненты с открытым исходным кодом, а третий — широта и степень детализации базовой библиотеки уязвимостей.
SCA сопоставляет характеристики тестируемой программы на основе характеристик образцов компонентов, чтобы определить, ссылается ли приложение на компонент. Таким образом, чем больше количество поддерживаемых компонентов, тем выше уровень обнаружения. больший риск упущения; кроме того, разумность алгоритма обнаружения и конструкции функций также напрямую влияет на точность и эффективность анализа. Для этого разные производители инструментов SCA имеют разные решения.
Большинство инструментов SCA основаны на технологиях, связанных с менеджером пакетов, для получения соответствующих зависимостей с открытым исходным кодом. И большинство текущих языков имеют функции управления и настройки сторонних библиотек.
Java:maven、gradle、ant、bazel Js/Ts:npm、yarn Go:mod Rust:cargo Python:pip PHP:Composer Ruby:Gem、Bundler
С помощью этих менеджеров пакетов можно легко получить информацию о сторонних зависимостях. Кроме того, можно получить информацию о транзитивных зависимостях. Таким образом, этот метод представляет собой технологию, которая в настоящее время широко используется. Конечно, у этого метода также есть много проблем, и в некоторых случаях он может привести к неточному получению данных:
Зависимости сложны При передаче зависимостей задействуется несколько вариантов принятия решения. В транзитивных зависимостях идентифицируются компоненты с открытым исходным кодом, не используемые в текущем проекте.
Конечно, это потребности в том, чтобы сделать получаемые компоненты с открытым исходным кодом более точными, и это стратегии оптимизации помимо выполнения базовых функций. На основе сопоставления сходства исходного кода наиболее важным является создание отпечатков пальцев для кодов известных сторонних библиотек для облегчения последующих операций сравнения. В настоящее время теоретически основными способами установления отпечатков кода являются:
Алгоритм сопоставления хэшей: это один из самых простых алгоритмов, который обнаруживает ссылки на компоненты в приложении путем сравнения их хэш-значений. Если два компонента имеют одинаковое значение хеш-функции, вы можете определить, являются ли они одним и тем же компонентом и, следовательно, ссылается ли приложение на этот компонент. Алгоритм сопоставления строк: этот алгоритм сканирует исходный код или двоичные файлы приложения, ищет определенные строки или идентификаторы, чтобы определить, существует ли ссылка на определенный компонент. Например, вы можете искать имя компонента, номер версии или другой идентификатор. Алгоритм синтаксического анализа. Этот алгоритм выполняет синтаксический анализ исходного кода приложения и идентифицирует объявления зависимостей или операторы импорта, чтобы определить, ссылается ли приложение на определенный компонент. Этот подход часто используется для выявления зависимостей, специфичных для языка программирования. Алгоритм семантического анализа: аналогичен синтаксическому анализу, но кроме того, он учитывает не только синтаксическую структуру, но и семантическую информацию, такую как отношения вызова функций, отношения наследования классов и т. д. Этот алгоритм позволяет более точно определять зависимости между компонентами. Алгоритмы машинного обучения. Некоторые продвинутые инструменты SCA могут использовать технологию машинного обучения для идентификации и прогнозирования ссылок на компоненты в приложениях путем анализа и обучения большого количества известных приложений. Этот метод позволяет повысить точность и эффективность обнаружения.
Когда приложения ссылаются на программное обеспечение с открытым исходным кодом, разные приложения ссылаются на разные функции, даже если они ссылаются на один и тот же компонент, и количество ссылочных функций также различно. В результате количество функций компонента, включенного в приложение, также различается. размер разный, функции с большим количеством ссылок обычно содержат больше функций, а функции с меньшим количеством ссылок обычно содержат меньше функций. Количество функций компонента, содержащихся в приложении, напрямую влияет на точность обнаружения инструмента SCA. Чем меньше функций компонента, тем сложнее его обнаружить инструментам SCA. Поэтому, даже если два разных приложения ссылаются на один и тот же компонент, одно приложение может это сделать. чтобы обнаружить его. Кроме того, приложение не может обнаружить этот компонент. Этот сценарий особенно очевиден для инструментов SCA, обнаруживающих двоичные файлы.
Dependency-Check — это практичная программа с открытым исходным кодом от OWASP (Open Web Application Security Project) для определения зависимостей проекта и проверки любых известных, публично раскрытых уязвимостей. В настоящее время он поддерживает программы, написанные на Java, .NET, Ruby, Node.js, Python и других языках, а также обеспечивает ограниченную поддержку системы сборки C/C++ (autoconf и cmake). Этот инструмент входит в десятку лучших решений OWASP. Dependency-Check имеет интерфейс командной строки, плагин Maven, задачу Ant и плагин Jenkins. Основной механизм содержит ряд анализаторов, которые проверяют зависимости проекта и собирают информацию о зависимостях (в инструменте это называется доказательствами). Затем доказательства используются для определения перечисления общей платформы (CPE) для данной зависимости. Если CPE идентифицирован, в отчет включается список связанных с ним записей о распространенных уязвимостях и рисках (CVE). Для конкретных технологий используются другие сторонние службы и источники данных, такие как NPM Audit API, OSS Index, RetireJS и Bundler Audit.
Dependency-Check работает путем сбора информации о сканируемых файлах (с помощью анализатора). Собранная информация называется свидетельством, и собираются три типа свидетельств: поставщик, продукт и версия. Например, JarAnalyzer будет собирать информацию из манифестов, pom.xml и имен пакетов в отсканированных файлах JAR, а также имеет эвристику для размещения информации из различных источников в одну или несколько корзин доказательств.
Dependency-Check содержит несколько файлов типа Анализатор и используется для извлечения идентификационной информации из анализируемых файлов.
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>9.1.0</version>
</dependency>
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>7.0.4</version>
<configuration>
<autoUpdate>true</autoUpdate>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
Dependencies Scanned: 160 (128 unique) Vulnerable Dependencies: 47 Vulnerabilities Found: 143
Преимущества: в результатах анализа больше уязвимостей и выше точность. Недостатки: Нет поддержки обнаружения лицензий с открытым исходным кодом.
dependency-check --project test -s "/xxx/tianxuan-secflatform.jar" -o /xxx/test
Преимущества: напрямую используйте пакеты Jar для обнаружения безопасности кода без исходного кода. Недостаток: для одного и того же проекта выводится меньше результатов уязвимостей по сравнению с плагином Maven.
Dependencies Scanned: 151 (126 unique) Vulnerable Dependencies: 34 Vulnerabilities Found: 109
Плагин имеет функциональные возможности для выполнения анализа зависимостей и просмотра результатов проверки после сборки.
Плагин Maven не очень удобен для поддержки многомодульных проектов. Это может быть проблема с конфигурацией с моей стороны.
Snyk — это набор облачных инструментов, ориентированных на разработчиков, созданных для DevSecOps и облачных центров разработки. Он известен своими возможностями сканирования безопасности SCA и контейнеров, способными сканировать файлы зависимостей приложения, включая библиотеки и платформы с открытым исходным кодом, для обнаружения в них известных уязвимостей. Он использует несколько баз данных уязвимостей, включая NVD (Национальную базу данных уязвимостей) и собственную базу данных уязвимостей, чтобы сопоставить корреляцию между версиями компонентов и известными уязвимостями. Он также обеспечивает интеграцию с распространенными интегрированными средами разработки (IDE), такими как IntelliJ IDEA, VS Code и Eclipse. С помощью этих плагинов разработчики могут мгновенно получать информацию об уязвимостях компонентов в процессе кодирования, тем самым улучшая интеграцию безопасности и своевременно исправляя ошибки. . Он также предоставляет инструменты командной строки, которые можно легко интегрировать в процесс CI/CD для автоматического сканирования уязвимостей и создания отчетов.
Анализ зависимостей: Snyk сканирует зависимости в вашем проекте, чтобы определить все библиотеки и модули, используемые в проекте. Сюда входят как прямые зависимости, так и косвенные зависимости (то есть библиотеки, от которых зависят эти библиотеки). Сравнение с базой данных уязвимостей: Snyk сравнивает результаты сканирования с базой данных уязвимостей, которую он поддерживает. Эта база данных содержит общедоступные уязвимости безопасности, а также информацию, классифицированную в соответствии с уровнем их угрозы. Выявляйте уязвимости и сообщайте об них. Если в зависимости обнаруживается уязвимость, Snyk создает отчет с указанием проблемы и серьезности уязвимости. Этот отчет поможет разработчикам выявить и оценить риски безопасности в своих проектах. Предоставляйте предложения по исправлению: Сник не только указывает на уязвимости, но и предлагает обходные пути. Это может включать обновление до более новой версии библиотеки, применение исправления или переход на другую библиотеку, не имеющую уязвимости. Интеграция и автоматизация: Snyk может интегрироваться с цепочками инструментов разработки и процессами непрерывной интеграции/непрерывного развертывания (CI/CD), чтобы обеспечить автоматическое сканирование безопасности во время разработки и развертывания. Таким образом, уязвимости можно обнаружить и устранить вовремя, а риски безопасности проекта могут быть снижены. Мониторинг и постоянная защита. Помимо первоначального сканирования, Snyk постоянно контролирует проекты, чтобы гарантировать, что разработчики своевременно уведомляются о вновь обнаруженных уязвимостях и предпринимаются необходимые действия.
Open Source - 69 unique vulnerabilities: 7 critical, 27 high, 28 medium, 7 low
Преимущества: поддерживает обнаружение образов контейнеров. Недостатки: пользователям приходится вручную изменять зависимости по одной версии при их обновлении, что делает ремонт затруднительным.
Tested 132 dependencies for known issues, found 69 issues, 69 vulnerable paths.
snyk test --json >> snyk_report.json
Преимущества: 1. Быстрое обнаружение. 2. После завершения сканирования будет отправлено напоминание по электронной почте. Недостатки: 1. Недостаточно обнаруженных уязвимостей. 2. Не поддерживается экспорт в формате HTML. 3. Пользователям приходится вручную изменять зависимости по одной версии, и ремонт является трудоемким.
Преимущества: 1. Простота в эксплуатации. 2. Поскольку обнаруживаются только устаревшие версии зависимостей, анализ выполняется быстро. Недостатки: 1. Это просто предложение обновиться до финальной версии без учета проблемы совместимости версий зависимостей (последняя версия может быть не стабильной). 2. Пользователям необходимо вручную изменять зависимости по одной версии. времени, а ремонт относительно трудоемкий.