﻿# Static Application Security Testing \(SAST\)

## Определение

Статическое тестирование безопасности приложений \(SAST\) – это набор технологий, предназначенных для анализа исходного кода ПО в области безопасности\. Анализ заключается в поиске участков кода, содержащих потенциальные уязвимости\. 

Потенциальная уязвимость – ошибка, которая может быть использована для нарушения целостности системы или влияния на её логику работы\. Если злоумышленник нашёл эксплойт для дефекта безопасности, это уже реальная уязвимость\. Подробнее о потенциальных уязвимостях можно прочитать [здесь](https://pvs-studio.ru/ru/blog/terms/6441/)\.

SAST помогает находить потенциальные уязвимости на ранних этапах разработки ПО\. Именно поэтому он является частью цикла безопасной разработки \(Secure SDLC\) и DevSecOps\-пайплайна\.

Некоторые уязвимости, которые ищут SAST\-инструменты:

* код, напрямую использующий информацию, введенную пользователем \(например: XSS, SQLI, XXE, path traversal\);
* использование устаревших версий криптографических протоколов;
* хранение паролей в коде;

Наиболее распространённые и опасные дефекты безопасности можно найти в списке [OWASP Top 10](https://pvs-studio.ru/ru/blog/terms/6458/)\.

Для понимания принципов функционирования SAST рассмотрим пример обнаружения [SQL\-инъекции](https://pvs-studio.ru/ru/blog/terms/6507/):

```cpp
void ProcessRequest(HttpRequest request) 
{ 
  string name = request.Form["name"];

  string sql = $"SELECT * FROM Users WHERE name='{name}'";
  using (var command = new SqlCommand(sql,_connection))
  {
    ....
  }
  .... 
}
```

Здесь SQL\-запрос формируется из данных, введенных пользователем\. Подобный подход опасен, так как данные, полученные извне, могут быть скомпрометированы\. Это значит, что вместо ожидаемых данных \(в данном случае \- имени\) пользователь может передать SQL\-команду\. В таком случае выполнение SQL\-запроса будет небезопасным\. В зависимости от SQL\-команды это может привести к удалению таблиц или всей базы, извлечению из нее произвольного числа записей и т\.п\.

Найти дефект безопасности в этом коде можно с помощью [taint\-анализа](https://pvs-studio.ru/ru/blog/terms/6496/)\. SAST\-решение учитывает, что данные от пользователя могут быть скомпрометированы\. Анализатор отслеживает распространение зараженных данных и предупреждает о том, что они попадают в конструктор SQL\-команды\. Значит, такая команда может быть опасной для исполнения, а код содержит дефект безопасности\.

## Преимущества и недостатки SAST

**Преимущества**:

* указывает точное место возникновения потенциальной уязвимости и даже может предложить варианты исправления за счет работы с исходным кодом;
* не требует исполнения приложения;
* покрывает всю кодовую базу приложения;
* помогает реализовать shift\-left principle\.

**Недостатки**:

* выдает ложные срабатывания;
* не анализирует библиотеки и фреймворки, если не имеет доступа к их исходному коду;
* зависит от языка программирования\.

## Дополнительные ссылки

1. [Место SAST в Secure SDLC: 3 причины внедрения в DevSecOps\-пайплайн](https://pvs-studio.ru/ru/blog/posts/0937/)
1. [Виды Application Security Testing\. Как не запутаться среди SAST, DAST и IAST](https://pvs-studio.ru/ru/blog/posts/0972/)
1. [PVS\-Studio как SAST\-решение](https://pvs-studio.ru/ru/pvs-studio/sast/)