[О продукте] Что такое анализ компонентов программного обеспечения (SCA)?
[О продукте] Что такое анализ компонентов программного обеспечения (SCA)?

Предисловие

фон

В современных средах разработки программного обеспечения команды разработчиков часто полагаются на сторонние компоненты с открытым исходным кодом, чтобы сэкономить время и повысить эффективность. Сами эти компоненты разрабатываются участниками сообщества с открытым исходным кодом (Github, Gitee). Однако это также несет в себе некоторые потенциальные риски для безопасности, особенно когда речь идет о безопасности цепочки поставок (разработчики этих компонентов плохо разбираются в командах безопасности). , риск злонамеренного отравления цепочки поставок) и проблемы качества сторонних компонентов (плагиат, риск несоответствия лицензии с открытым исходным кодом).

Обзор SCA

SCA(Software Composition Analysis)переводится какпрограммное анализ компонентов программного обеспечения, популярное понимание — это анализ программного обеспечения. программное обеспечение содержит некоторую информацию и функции для реализации программного обеспечения. обеспечивающие технологии для идентификации, управления и отслеживания. Технология SCA может эффективно помочь пользователям открыть для себя Открытый исходный код Проблемы безопасности в компонентах。SCAСуществует три основных варианта использования:Управление уязвимостями открытого исходного кода, управление лицензиями на открытый исходный код и контрольный список SBOM

Функциональный состав

  • Контрольный список СБОМ:SCAинструмент Обычно начинается со сканирования,генерироватьпродукт Все в Открытый исходный Отчет об инвентаризации компонентов кода, включая все прямые и косвенные зависимости (Открытый, используемый в текущем проекте). исходный кодпрограммное обеспечениекомпонент)。Освойте все это Открытый исходный Подробный список компонентов кода для администратора Открытый исходный код Основы использования
  • Проблемы соответствия — управление лицензиями с открытым исходным кодом:Предупреждения о рисках, связанных с лицензией,В основном для извлечения протоколов высокого риска (таких как GPL и т. д.).

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

  • Выявление уязвимостей безопасности:Основная идентификация Открытый исходный кодпрограммное лазейки, масштаб воздействия, уровень риска и т. д., присутствующие в обеспечении, реагирование на лазейки, на основе выявленных Открытый исходный кодкомпонент,В случае одобрения лазейки,Быстрый ответ и ремонт лазейки

Принцип работы

Сбор уязвимостей: например, сканирование данных на 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

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

Зависимости сложны При передаче зависимостей задействуется несколько вариантов принятия решения. В транзитивных зависимостях идентифицируются компоненты с открытым исходным кодом, не используемые в текущем проекте.

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

  • Создавайте исходный код непосредственно на естественном языке.
  • Конструкция на основе токенов
  • Операторское строительство
  • Конструкция на основе AST
  • Сборка на основе CFG
  • Сборка на основе CPG
  • На основе программной нарезки и т.д.
Какие алгоритмы обнаружения существуют?

Алгоритм сопоставления хэшей: это один из самых простых алгоритмов, который обнаруживает ссылки на компоненты в приложении путем сравнения их хэш-значений. Если два компонента имеют одинаковое значение хеш-функции, вы можете определить, являются ли они одним и тем же компонентом и, следовательно, ссылается ли приложение на этот компонент. Алгоритм сопоставления строк: этот алгоритм сканирует исходный код или двоичные файлы приложения, ищет определенные строки или идентификаторы, чтобы определить, существует ли ссылка на определенный компонент. Например, вы можете искать имя компонента, номер версии или другой идентификатор. Алгоритм синтаксического анализа. Этот алгоритм выполняет синтаксический анализ исходного кода приложения и идентифицирует объявления зависимостей или операторы импорта, чтобы определить, ссылается ли приложение на определенный компонент. Этот подход часто используется для выявления зависимостей, специфичных для языка программирования. Алгоритм семантического анализа: аналогичен синтаксическому анализу, но кроме того, он учитывает не только синтаксическую структуру, но и семантическую информацию, такую ​​как отношения вызова функций, отношения наследования классов и т. д. Этот алгоритм позволяет более точно определять зависимости между компонентами. Алгоритмы машинного обучения. Некоторые продвинутые инструменты SCA могут использовать технологию машинного обучения для идентификации и прогнозирования ссылок на компоненты в приложениях путем анализа и обучения большого количества известных приложений. Этот метод позволяет повысить точность и эффективность обнаружения.

Как цитировать программное обеспечение с открытым исходным кодом

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

Накопление и детализация библиотек уязвимостей
  • Сбор и интеграция данных: Мы не должны полагаться только на официальные лазейки государственных каналов,Есть и другие способы,Например, группа по исследованию безопасности, платформа отчетов о лазейках, отчеты об исследованиях поставщиков безопасности и т. д.,Соберите больше информации о лазейках. в то же время,Вы также можете использовать автоматизированные инструменты, такие как инструмент сканирования лазейки и разведывательные службы лазейки, для увеличения источников данных.
  • Расширенная информация описания: В описании лазейки должна быть указана сфера лазейки. влияния、сценарий атаки、利用难度ждать信息,Чтобы помочь пользователям лучше понять серьезность и влияние лазейки.
  • Для проектов, включающих несколько компонентов или зависимостей:,Необходимо четко определить ключевые влияющие компоненты.,Чтобы пользователи могли более точно оценить риск и приоритетность лазейки.
  • анализ воздействия лазейки: поставлятьлазейки的Влияние分析报告,В том числе конкретный вред, который могут нанести лазейки, возможные сценарии атак и способы использования и т. д.,Чтобы помочь пользователям более полно понять риски лазейки.
  • Предлагаемые исправления: Для известных лазейки,Предоставьте соответствующие предложения или решения по ремонту.,Включая исправления безопасности, временные решения, изменения конфигурации и т. д.,Чтобы помочь пользователям быстрее решать проблемы.
  • лазейки Категориии Теги: Используйте стандартныйлазейки Система классификациии Этикетка,Помогите пользователям легче классифицировать, фильтровать и искать лазейки.,Повысьте удобство и простоту использования библиотеки лазейки.

Продукты SCA

  • Black Duck by Synopsys (теперь известный как «Черный Duck Binary Analysis”): Известная реклама Продукты SCA, может сканировать программное обеспечение обеспечениеиспользован в проекте Открытый исходный код Компонент,Определите свою лицензию и потенциальную безопасность лазейки,И предоставить соответствующие предложения и решения.
  • Nexus Lifecycle by Sonatype: Часто используемый рекламный ролик. SCA, которая предоставляет комплексный Открытый исходный код Компонентуправлятьрешение,включатьлазейкиуправлять、Соответствие лицензии、Обзор безопасности и другие функции.
  • WhiteSource Bolt: Бесплатный инструмент SCA, подходящий для разработчиков, который можно интегрировать в общие интегрированные среды разработки (IDE), чтобы помочь разработчикам вовремя находить и решать проблемы. обеспечениев проекте Открытый исходный Проблемы безопасности кодкомпонента.
  • Проверка зависимостей в открытом исходном программном коде компонент программного обеспечения, инструмент сканирования лазейки, используемый для проверки того, содержат ли зависимости приложения (такие как библиотеки, платформы и т. д.) известные лазейки безопасности.
  • Snyk: Один интегрированный Открытый исходный код Компонент安全сканированиеи Платформа для рабочего процесса разработчиков,поставлять了лазейкисканирование、анализ зависимостей、Соответствие лицензииждать功能。
  • Мерфи Охрана, Открытый исходный код Интернет-безопасности、Моан Технология、Подвеска зеркала безопасности、Чжункэ Тяньци、synopsys

Depency-Check

Основное введение

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 содержит несколько файлов типа Анализатор и используется для извлечения идентификационной информации из анализируемых файлов.

Опыт использования инструмента
Интеграция плагина Maven: Dependency-check-maven
Язык кода:javascript
копировать
                <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

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

Метод CLI-обнаружение персонала службы безопасности
Язык кода:javascript
копировать
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

Плагин CI Integration-Jenkins: проверка зависимостей

Плагин имеет функциональные возможности для выполнения анализа зависимостей и просмотра результатов проверки после сборки.

некоторые вопросы

Плагин Maven не очень удобен для поддержки многомодульных проектов. Это может быть проблема с конфигурацией с моей стороны.

snyk

Основное введение

Snyk — это набор облачных инструментов, ориентированных на разработчиков, созданных для DevSecOps и облачных центров разработки. Он известен своими возможностями сканирования безопасности SCA и контейнеров, способными сканировать файлы зависимостей приложения, включая библиотеки и платформы с открытым исходным кодом, для обнаружения в них известных уязвимостей. Он использует несколько баз данных уязвимостей, включая NVD (Национальную базу данных уязвимостей) и собственную базу данных уязвимостей, чтобы сопоставить корреляцию между версиями компонентов и известными уязвимостями. Он также обеспечивает интеграцию с распространенными интегрированными средами разработки (IDE), такими как IntelliJ IDEA, VS Code и Eclipse. С помощью этих плагинов разработчики могут мгновенно получать информацию об уязвимостях компонентов в процессе кодирования, тем самым улучшая интеграцию безопасности и своевременно исправляя ошибки. . Он также предоставляет инструменты командной строки, которые можно легко интегрировать в процесс CI/CD для автоматического сканирования уязвимостей и создания отчетов.

Принцип работы

Анализ зависимостей: Snyk сканирует зависимости в вашем проекте, чтобы определить все библиотеки и модули, используемые в проекте. Сюда входят как прямые зависимости, так и косвенные зависимости (то есть библиотеки, от которых зависят эти библиотеки). Сравнение с базой данных уязвимостей: Snyk сравнивает результаты сканирования с базой данных уязвимостей, которую он поддерживает. Эта база данных содержит общедоступные уязвимости безопасности, а также информацию, классифицированную в соответствии с уровнем их угрозы. Выявляйте уязвимости и сообщайте об них. Если в зависимости обнаруживается уязвимость, Snyk создает отчет с указанием проблемы и серьезности уязвимости. Этот отчет поможет разработчикам выявить и оценить риски безопасности в своих проектах. Предоставляйте предложения по исправлению: Сник не только указывает на уязвимости, но и предлагает обходные пути. Это может включать обновление до более новой версии библиотеки, применение исправления или переход на другую библиотеку, не имеющую уязвимости. Интеграция и автоматизация: Snyk может интегрироваться с цепочками инструментов разработки и процессами непрерывной интеграции/непрерывного развертывания (CI/CD), чтобы обеспечить автоматическое сканирование безопасности во время разработки и развертывания. Таким образом, уязвимости можно обнаружить и устранить вовремя, а риски безопасности проекта могут быть снижены. Мониторинг и постоянная защита. Помимо первоначального сканирования, Snyk постоянно контролирует проекты, чтобы гарантировать, что разработчики своевременно уведомляются о вновь обнаруженных уязвимостях и предпринимаются необходимые действия.

Опыт использования инструмента
Интеграция плагина Maven: Snyk Security

Open Source - 69 unique vulnerabilities: 7 critical, 27 high, 28 medium, 7 low

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

Метод CLI: тест Snyk

Tested 132 dependencies for known issues, found 69 issues, 69 vulnerable paths.

Язык кода:javascript
копировать
snyk test --json >> snyk_report.json

Преимущества: 1. Быстрое обнаружение. 2. После завершения сканирования будет отправлено напоминание по электронной почте. Недостатки: 1. Недостаточно обнаруженных уязвимостей. 2. Не поддерживается экспорт в формате HTML. 3. Пользователям приходится вручную изменять зависимости по одной версии, и ремонт является трудоемким.

Maven Dependency Checker

Преимущества: 1. Простота в эксплуатации. 2. Поскольку обнаруживаются только устаревшие версии зависимостей, анализ выполняется быстро. Недостатки: 1. Это просто предложение обновиться до финальной версии без учета проблемы совместимости версий зависимостей (последняя версия может быть не стабильной). 2. Пользователям необходимо вручную изменять зависимости по одной версии. времени, а ремонт относительно трудоемкий.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose