SCA (анализ состава программного обеспечения)

Зачем использовать SCA?

Добрый день! Меня зовут Дмитрий Сигаев и в этом блоге я делюсь своим опытом в разработки высоконагруженных системах.
Хорошая высоконагруженная система должна быть безопастной и уствойчивой к атакам. Поэтому сегодня мы поговорим об SCA или Software Composition Analysis (анализ состава программного обеспечения).

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

Компании склонны использовать больше компонентов с открытым исходным кодом для ускорения процесса разработки. Однако это может привести к проблемам безопасности. Уязвимый компонент может стать потенциальной точкой входа для вредоносных атак.

Software Composition Analysis (анализ состава программного обеспечения).

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

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

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

Пример того, как работает SCA

Тестовый веб-проект использует RestSharp , клиент для REST API. Приложение получает данные в формате JSON, обработчик получает строку данных и анализирует ее с помощью метода расширения из RestSharp:

1
2
3
4
5
6
7
8
9
[HttpPost]
public IActionResult Index(string jsonDate)
{
DateTime dateTime = jsonDate.ParseJsonDate(CultureInfo.InvariantCulture);

// do something

return View();
}

Уязвимость заключается в функции ParseJsonDate , которая использует уязвимое регулярное выражение, если версия библиотеки RestSharp ниже 106.11.7. Это делает все приложение уязвимым для атак ReDoS . Подробнее этот пример можно рассмотреть в статье: Post not found: sva/risks Риски использования уязвимых зависимостей в вашем проекте и как SCA помогает ими управлять/

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

Решения SCA анализируют компоненты приложения и их внутренние зависимости. Эти инструменты опираются на открытые базы данных уязвимостей, такие как CVE, NVD и т. д. Вот почему инструменты SCA могут определить точную версию используемого компонента и любые связанные с ним уязвимости безопасности.

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

  1. Пользователь запускает анализ с помощью решения SCA. Например наш KuberSCA продукт.
  2. Решение SCA собирает информацию о зависимостях, компонентах и ​​транзитивных зависимостях. Инструмент составляет спецификацию материалов (BOM), список сторонних компонентов, которые используются в приложении.
  3. Он ищет совпадения во всей базе данных уязвимостей для всех компонентов BOM. Если инструмент SCA получает из базы данных всю необходимую информацию о недостатке в версии компонента, он формирует соответствующее сообщение. Таким же образом инструмент проверяет соответствие лицензионным условиям и ограничениям.
  4. Решение SCA информирует пользователей об обнаруженных уязвимостях, устаревших компонентах или проблемах с лицензированием. Оно может генерировать описание дефекта, затронутую версию компонента, идентификаторы CVE и CWE, уровни серьезности на основе CVSS. Решение SCA может предлагать исправления, такие как обновление уязвимого компонента.
    После обнаружения уязвимого компонента мы можем либо обновить его до безопасной версии, либо заменить другим компонентом, либо добавить необходимые проверки в код.
Поделиться