﻿# SCA \(Software Composition Analysis\)

SCA \(Software Composition Analysis\) — это анализ компонентного состава приложения\. Такой анализ позволяет обнаруживать уязвимые компоненты, дефекты безопасности или проблемы с условиями лицензирования\.

## Зачем нужен SCA

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

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

Компонент может не содержать уязвимостей, но его зависимости могут\. Для предотвращения подобного сценария SCA инструменты также анализируют транзитивные зависимости \(к примеру, зависимости библиотек, использующихся в приложении\)\.

SCA\-решения могут выявить уязвимости на ранних стадиях процесса разработки и на более поздних, но чем раньше произойдет внедрение, тем меньше риск столкнуться с репутационными и финансовыми проблемами\. Для более эффективной борьбы с уязвимостями и дефектами безопасности некоторые инструменты предоставляют одновременно функциональность SCA и функциональность SAST\.

Подробнее тема раскрыта в 16\-ом вебинаре цикла про РБПО: [Использование инструментов композиционного анализа](https://pvs-studio.ru/ru/blog/video/11494/)\.

## Пример работы SCA

В тестовом веб\-проекте используется [RestSharp](https://restsharp.dev/) — клиент для работы с REST API\. Приложение принимает данные в JSON\-формате, обработчик получает строку даты и разбирает её при помощи метода расширения из RestSharp:

```cpp
[HttpPost]
public IActionResult Index(string jsonDate)
{
  DateTime dateTime = jsonDate.ParseJsonDate(CultureInfo.InvariantCulture);

  // do something

  return View();
}
```

Дефект заключается в использовании функции _ParseJsonDate_, которая использует уязвимое регулярное выражение, если версия библиотеки RestSharp меньше 106\.11\.7\. Из\-за этого всё приложение становится уязвимым к [ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS) атакам\. Более подробно данный пример разобран в статье "[Чем опасны уязвимые зависимости в проекте и как с этим помогает SCA?](https://pvs-studio.ru/ru/blog/posts/csharp/0987/)"\.

## Как работает SCA

SCA\-решения анализируют компонентный состав приложения и внутренние зависимости компонентов\. Эти инструменты основаны на базах известных уязвимостей, находящихся в открытом доступе: CVE, NVD и другие\. Поэтому они могут идентифицировать конкретную версию используемого компонента и дефекты безопасности, связанные с ней\. 

Это происходит в несколько этапов:

1. Пользователь запускает анализ приложения с помощью SCA\-решения\.
1. SCA\-решение собирает информацию о зависимостях, компонентах и транзитивных зависимостях\. Составляется Bill of Materials \(BOM\) – список используемых сторонних компонентов приложения\.
1. Для всех компонентов BOM производится поиск соответствий по базе уязвимостей\. При обнаружении в базе информации о дефекте в используемой версии компонента SCA получает всю необходимую информацию об уязвимости и генерирует соответствующее сообщение\. Аналогично производится проверка на соблюдение лицензий и ограничений\. 
1. SCA\-решение выводит информацию о найденных уязвимостях, устаревших компонентах или проблемах с лицензированием\. Может быть выдано описание дефекта, затронутая версия компонента, идентификаторы CVE и CWE, оценка и серьезность CVSS\. Также могут быть предложены способы исправления \(например, обновление уязвимого компонента\)\.


> После нахождения уязвимого компонента, его можно обновить до безопасной версии, заменить на другой или добавить в код необходимые проверки\\\. Подробнее эта тема разобрана в \[документации\]\(https://pvs\-studio\.ru/ru/docs/warnings/v5625/\) к правилу V5625, которое является реализацией функционала SCA в C\\\# анализаторе PVS\\\-Studio\\\.