Статическое тестирование безопасности приложений (SAST) – это набор технологий, предназначенных для анализа исходного кода ПО в области безопасности. Анализ заключается в поиске участков кода, содержащих потенциальные уязвимости.
Потенциальная уязвимость – ошибка, которая может быть использована для нарушения целостности системы или влияния на её логику работы. Если злоумышленник нашёл эксплойт для дефекта безопасности, это уже реальная уязвимость. Подробнее о потенциальных уязвимостях можно прочитать здесь.
SAST помогает находить потенциальные уязвимости на ранних этапах разработки ПО. Именно поэтому он является частью цикла безопасной разработки (Secure SDLC) и DevSecOps-пайплайна.
Некоторые уязвимости, которые ищут SAST-инструменты:
Наиболее распространённые и опасные дефекты безопасности можно найти в списке OWASP Top 10.
Для понимания принципов функционирования SAST рассмотрим пример обнаружения SQL-инъекции:
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-анализа. SAST-решение учитывает, что данные от пользователя могут быть скомпрометированы. Анализатор отслеживает распространение зараженных данных и предупреждает о том, что они попадают в конструктор SQL-команды. Значит, такая команда может быть опасной для исполнения, а код содержит дефект безопасности.
Преимущества:
Недостатки:
0