﻿# Secure Software Development Lifecycle \(SSDLC\)

В классическом жизненном цикле программного обеспечения \([SDLC](https://pvs-studio.ru/ru/blog/terms/6732/)\) не предусмотрен анализ безопасности разрабатываемого продукта\. В результате о безопасности начинают задумываться только на этапе тестирования или уже после релиза\. Это значительно увеличивает стоимость обнаружения и устранения уязвимостей\. Для исправления данного упущения была разработана расширенная версия SDLC — SSDLC\.

## Этапы Secure SDLC

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

### Сбор и анализ требований

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

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

### Планирование и анализ рисков

В дополнение ко всему прочему, на данном этапе выполняется анализ рисков угроз безопасности и поверхности атак, составляется модель угроз на основе требований к безопасности, собранных на предыдущем этапе\.

### Дизайн/Проектирование

Проектирование системы выполняется с учётом модели угроз, составленной на предыдущем этапе\.

### Разработка

На этом этапе разработчики уделяют значительное внимание качеству кода с точки зрения безопасности\. Для этого они:

* руководствуются перечнями уязвимостей ПО, такими как [CWE](https://pvs-studio.ru/ru/blog/terms/6476/) и [OWASP Top 10](https://pvs-studio.ru/ru/blog/terms/6458/);
* используют решения для статического тестирования безопасности приложений \([SAST](https://pvs-studio.ru/ru/blog/terms/6631/)\);
* анализируют зависимости на наличие уязвимостей \([SCA](https://pvs-studio.ru/ru/blog/terms/6698/)\) с помощью инструментов анализа состава ПО;
* проводят дополнительные обзоры кода с целью обнаружения пропущенных дефектов безопасности и т\.д\. 

**Примечание**\. Статический анализатор кода PVS\-Studio способен находить в коде не только обычные ошибки, но и уязвимости безопасности, выполняя роль как [SCA\-решения](https://pvs-studio.ru/ru/pvs-studio/sca/), так и [SAST\-решения](https://pvs-studio.ru/ru/pvs-studio/sast/)\.

### Тестирование

На данном этапе внедряются дополнительные виды тестирования, такие как:

* тестирование на проникновение \(penetration testing\);
* тестирование путём имитации хакерских атак;
* тестирование отказоустойчивости \(fuzz testing — тестирование путём ввода случайных или заведомо неверных данных с целью вызвать сбой системы\)\.

Развёртывание 

Непосредственно перед развёртыванием выполняется оценка уровня безопасности и аудит безопасности ПО\.

### Поддержка

Даже если ответственно подходить к безопасности на предыдущих этапах, часть уязвимостей всё равно может ускользнуть от вашего внимания и попасть в релиз\. Кроме того, уже после выпуска ранее неизвестные уязвимости могут обнаружиться не только в вашем коде, но и в коде зависимостей вашего ПО\. Такие уязвимости называются "[уязвимостями нулевого дня](https://pvs-studio.ru/ru/blog/terms/6478/)"\. Поэтому необходимо продолжать отслеживать и оперативно устранять новые уязвимости на протяжении всего периода поддержки ПО\.