Проект

Общее

Профиль

Безопасная разработка » История » Версия 3

С. Антошкин, 03.06.2026 09:35

1 1 С. Антошкин
{{>TOC}}
2
3
h1. Безопасность в разработке программного обеспечения
4
5
h2. Введение
6
7
По данным исследований, более 70% успешных кибератак эксплуатируют уязвимости в программном коде, а не в сетевой инфраструктуре. При этом устранение уязвимости на этапе проектирования обходится в 30--100 раз дешевле, чем после выпуска продукта.
8
9
Традиционный подход «сначала разработаем, потом проверим безопасность» перестал работать. Он порождает два хронических сбоя: безопасность приходит слишком поздно, когда архитектурные решения уже закреплены, и работает в режиме блокировщика, тормозя выпуск. Оба сбоя ведут к одному результату—безопасность игнорируется под давлением сроков.
10
11
bq. Безопасность в разработке (Secure Software Development)—это подход, при котором требования, практики и инструменты ИБ(Информационная безопасность) интегрируются в каждый этап жизненного цикла создания программного обеспечения, а не добавляются к уже готовому продукту.
12
13
Этот подход известен под несколькими названиями: Secure SDLC(Software Development Life Cycle), DevSecOps, «сдвиг влево» (Shift Left Security). По сути, все они описывают одно: безопасность должна присутствовать с первого дня разработки.
14
15
---
16
17
h2. Жизненный цикл разработки и меры безопасности
18
19
Жизненный цикл разработки ПО(Программное обеспечение) (SDLC) состоит из нескольких фаз. Ключевой принцип безопасного SDLC—на каждой фазе существуют специфические меры безопасности, которые дешевле и эффективнее применять именно здесь, а не переносить на более поздние этапы.
20
21
!clipboard-202606031233-fpe1i.png!
22
23
h3. Фаза 1. Требования
24
25
На этапе сбора требований к системе формулируются *требования безопасности*—наравне с функциональными и нефункциональными:
26
* какие данные обрабатывает система и какая классификация им присвоена
27
* каким регуляторным требованиям должна соответствовать система (152-ФЗ(Федеральный закон), ФЗ-187 о КИИ(Критическая информационная инфраструктура), ГОСТ(Государственный стандарт) серии 15408)
28
* каков требуемый уровень доверия к безопасности продукта (в частности, нужна ли сертификация по ОУД(Оценочный уровень доверия))
29
* применяется ли принцип Privacy by Design—конфиденциальность данных закладывается в архитектуру, а не добавляется потом
30
31
Отсутствие требований безопасности на этом этапе означает, что разработчики принимают решения о безопасности неявно, руководствуясь привычками, а не политикой.
32
33
h3. Фаза 2. Проектирование
34
35
На этапе архитектурного проектирования применяется *моделирование угроз* (Threat Modeling)—систематический процесс выявления потенциальных угроз для проектируемой системы.
36
37
Наиболее распространённые методологии:
38
* *STRIDE*—классификация угроз по шести категориям: Spoofing (подмена), Tampering (изменение), Repudiation (отказ от действий), Information Disclosure (утечка), Denial of Service (отказ в обслуживании), Elevation of Privilege (повышение привилегий)
39
* *PASTA(Process for Attack Simulation and Threat Analysis)*—ориентированный на бизнес-риски подход с семью этапами, включая имитацию атак
40
* *DREAD(Damage, Reproducibility, Exploitability, Affected Users, Discoverability)*—методика количественной оценки угроз
41
42
По результатам моделирования угроз формируется архитектура безопасности системы: определяются границы доверия, точки входа/выхода, хранилища данных и потоки их передачи. Закладываются принципы *наименьших привилегий* и *эшелонированной защиты* (Defense in Depth).
43
44
h3. Фаза 3. Реализация (кодирование)
45
46
На этапе написания кода применяются:
47
48
*Стандарты безопасного кодирования*—задокументированные правила для разработчиков: как обрабатывать ввод пользователя, как работать с криптографией, как избегать конкретных классов уязвимостей. Примеры: CERT Coding Standards, OWASP Cheat Sheet Series.
49
50
*Code Review с фокусом на безопасность*—ручная проверка кода коллегами с анализом уязвимостей. Особенно эффективна для логических ошибок, которые не обнаруживают автоматические инструменты.
51
52
*SAST(Static Application Security Testing)*—статическое тестирование безопасности приложений. Инструменты анализируют исходный код без его выполнения, выявляя потенциальные уязвимости: SQL-инъекции, XSS(Cross-Site Scripting), небезопасное использование криптографии. Примеры инструментов: SonarQube, Checkmarx, Semgrep.
53
54
*SCA(Software Composition Analysis)*—анализ состава ПО. Выявляет уязвимые сторонние компоненты и библиотеки. Результатом является *SBOM(Software Bill of Materials)*—реестр всех компонентов продукта с версиями.
55
56
h3. Фаза 4. Тестирование
57
58
*DAST(Dynamic Application Security Testing)*—динамическое тестирование. Инструменты взаимодействуют с работающим приложением, имитируя действия злоумышленника: отправляют вредоносные запросы, проверяют реакцию системы. Находят уязвимости, незаметные при статическом анализе: проблемы конфигурации, логические ошибки в бизнес-процессах.
59
60
*Penetration Testing (пентест)*—ручная имитация атаки профессиональными специалистами. Наиболее глубокий вид тестирования, выявляет цепочки уязвимостей и бизнес-логические проблемы. Проводится перед значимыми релизами и не реже раза в год.
61
62
*Fuzzing*—автоматизированная подача случайных и некорректных данных на вход системы для обнаружения сбоев и уязвимостей. Эффективен для API(Application Programming Interface) и парсеров.
63
64
Именно на этом этапе наиболее значимы требования стандарта ОУД 4, о котором подробно говорится ниже.
65
66
h3. Фаза 5. Выпуск и деплой
67
68
*Security Gates в CI/CD(Continuous Integration / Continuous Delivery)*—автоматические проверки, останавливающие выпуск, если найдены уязвимости выше заданного порога серьёзности. Это операциональное воплощение принципа «безопасность как код».
69
70
*Подпись артефактов*—криптографическая подпись собранных пакетов и образов контейнеров гарантирует целостность цепочки поставок (Supply Chain Security). Фреймворк SLSA(Supply-chain Levels for Software Artifacts) определяет четыре уровня зрелости этих практик.
71
72
*Hardened Configuration*—минимизация поверхности атаки: отключение неиспользуемых сервисов, применение принципа наименьших привилегий для сервисных учётных записей, шифрование данных в покое.
73
74
*Secrets Management*—секреты (пароли, токены, ключи API) не хранятся в коде или переменных среды, а управляются специализированными инструментами (HashiCorp Vault, AWS Secrets Manager).
75
76
h3. Фаза 6. Эксплуатация
77
78
*Patch Management*—систематический процесс отслеживания и своевременного применения обновлений безопасности для всех компонентов системы.
79
80
*WAF(Web Application Firewall) / RASP(Runtime Application Self-Protection)*—средства защиты работающего приложения от атак в режиме реального времени.
81
82
*Мониторинг безопасности приложения*—интеграция с SIEM(Security Information and Event Management), отслеживание аномалий, журналирование критических операций.
83
84
*VDP(Vulnerability Disclosure Policy) / Bug Bounty*—политика раскрытия уязвимостей и программы вознаграждения за найденные баги: организованные механизмы приёма сообщений от независимых исследователей.
85
86
---
87
88
h2. OWASP Top 10: наиболее критичные уязвимости веб-приложений
89
90
OWASP(Open Web Application Security Project)—некоммерческий фонд, публикующий открытые материалы по безопасности веб-приложений. Его наиболее известный документ—*OWASP Top 10*—список десяти наиболее критичных классов уязвимостей, обновляемый каждые 3--4 года.
91
92
Текущая версия OWASP Top 10 (2021):
93
94
|_.Код|_.Категория|_.Типичный пример|
95
|A01|Broken Access Control (нарушение контроля доступа)|Пользователь изменяет ID в URL и получает чужие данные|
96
|A02|Cryptographic Failures (криптографические сбои)|Пароли хранятся в открытом виде или с MD5|
97
|A03|Injection (инъекции)|SQL-инъекция через поле поиска|
98
|A04|Insecure Design (небезопасный дизайн)|Отсутствие ограничений на число попыток входа|
99
|A05|Security Misconfiguration (небезопасная конфигурация)|Открытый порт отладчика в продакшне|
100
|A06|Vulnerable Components (уязвимые компоненты)|Использование библиотеки с известной CVE(Common Vulnerabilities and Exposures)|
101
|A07|Authentication Failures (сбои аутентификации)|Сессионные токены не инвалидируются при выходе|
102
|A08|Software Integrity Failures (нарушение целостности ПО)|Загрузка обновлений без проверки подписи|
103
|A09|Logging Failures (проблемы с логированием)|Неудачные попытки входа не фиксируются|
104
|A10|SSRF(Server-Side Request Forgery)|Сервер делает запросы к внутренним ресурсам по URL из запроса|
105
106
OWASP также публикует специализированные Top 10 для API, мобильных приложений, LLM(Large Language Model)-приложений и других областей.
107
108
---
109
110
h2. ОУД 4 и Common Criteria
111
112
h3. Что такое Common Criteria
113
114
*Common Criteria* (CC, Общие критерии)—международный стандарт ISO/IEC 15408 для оценки безопасности информационных технологий. В России действует как ГОСТ Р ИСО/МЭК 15408. Стандарт определяет методологию оценки того, насколько продукт соответствует заявленным требованиям безопасности.
115
116
Common Criteria используются при сертификации средств защиты информации: межсетевых экранов, операционных систем, криптографических модулей, СУБД(Система управления базами данных) и других продуктов.
117
118
Оценка по Common Criteria состоит из двух ключевых документов:
119
* *Профиль защиты* (Protection Profile, PP)—типовые требования безопасности для класса продуктов, разрабатываемые независимо от конкретного изделия
120
* *Задание по безопасности* (Security Target, ST)—документ производителя, описывающий заявленные функции и механизмы безопасности конкретного продукта
121
122
h3. Оценочные уровни доверия (ОУД)
123
124
*Оценочный уровень доверия* (ОУД, Evaluation Assurance Level, EAL(Evaluation Assurance Level))—количественная оценка глубины проверки, проведённой в ходе сертификации. Чем выше уровень, тем тщательнее и дороже оценка.
125
126 2 С. Антошкин
!clipboard-202606031234-qvhrt.png!
127 1 С. Антошкин
128
Семь уровней ОУД:
129
130
|_.Уровень|_.Название|_.Суть проверки|_.Применение|
131
|*ОУД 1*|Функционально протестированный|Базовое тестирование функций безопасности|Минимальная уверенность|
132
|*ОУД 2*|Структурно протестированный|Тестирование + базовый анализ проекта|Коммерческие продукты без исходного кода|
133
|*ОУД 3*|Методично протестированный и проверенный|Тестирование + анализ проекта + поиск уязвимостей|Широко применяемые коммерческие продукты|
134
|*ОУД 4*|Методично спроектированный, протестированный и проверенный|Полный анализ проекта, независимое тестирование, поиск уязвимостей|*Максимальный коммерчески оправданный уровень*|
135
|*ОУД 5*|Полуформально спроектированный и протестированный|Полуформальные методы описания проекта|Высокозащищённые системы|
136
|*ОУД 6*|Полуформально верифицированный проект и протестированный|Полуформальная верификация всего проекта|Системы обработки государственной тайны|
137
|*ОУД 7*|Формально верифицированный проект и протестированный|Полная математическая формальная верификация|Военные и разведывательные системы|
138
139
h3. Почему ОУД 4 является практическим максимумом
140
141
ОУД 4 часто называют «практическим максимумом для коммерческих продуктов»—и это не условность, а следствие экономики оценки.
142
143
Начиная с ОУД 5, стандарт требует *полуформальных методов* описания проекта и верификации. Это означает применение специальных математических нотаций для описания архитектуры, что кратно увеличивает стоимость и сроки оценки—до нескольких лет для крупного продукта. Поддерживать такой продукт в актуальном состоянии при быстром темпе разработки практически невозможно.
144
145
ОУД 4 при этом требует:
146
* полной спецификации функций безопасности на уровне проекта
147
* независимого тестирования разработчика оценщиком
148
* анализа уязвимостей (vulnerability analysis) с поиском очевидных уязвимостей
149
* анализа исходного кода критических функций безопасности
150
* тестирования глубины покрытия (coverage testing)
151
152
Это достаточно строгие требования, которые реально улучшают качество продукта. Именно поэтому большинство коммерческих средств защиты информации, проходящих сертификацию по ФСТЭК(Федеральная служба по техническому и экспортному контролю) России или в рамках Common Criteria, получают сертификат ОУД 4.
153
154
bq. Для понимания: сертификация по ОУД 4 не означает, что продукт «абсолютно безопасен». Она означает, что процесс его разработки и тестирования соответствует строгим требованиям стандарта, а заявленные функции безопасности независимо проверены.
155
156
---
157
158
h2. OWASP Software Security Framework (SSF)
159
160
*OWASP Software Security Framework* (SSF(Software Security Framework))—это структурированный набор практик безопасной разработки, разработанный OWASP как практическое руководство для DevSecOps-организаций, стремящихся систематизировать свои усилия по безопасности ПО.
161
162 3 С. Антошкин
!clipboard-202606031235-nqfup.png!
163 1 С. Антошкин
164
SSF организован вокруг трёх направлений:
165
166
h3. Secure Supply Chain (безопасность цепочки поставок)
167
168
Современное ПО в значительной мере состоит из сторонних компонентов: в среднем более 70--80% кода в коммерческих приложениях—это open-source библиотеки. Атаки на цепочку поставок (Supply Chain Attacks) нацелены именно на этот вектор.
169
170
Ключевые практики:
171
* *SCA (Software Composition Analysis)*—автоматическое сканирование зависимостей на известные уязвимости (CVE)
172
* *SBOM (Software Bill of Materials)*—документированный реестр всех компонентов продукта с версиями и лицензиями; позволяет быстро оценить влияние новой уязвимости на продукт
173
* *SLSA (Supply-chain Levels for Software Artifacts)*—фреймворк Google для обеспечения целостности артефактов сборки; определяет уровни от 1 до 4
174
* Политика использования только доверенных реестров пакетов
175
* Мониторинг CVE-баз для используемых компонентов в режиме реального времени
176
177
h3. Secure Development (безопасная разработка)
178
179
Это практики, которые разработчики применяют непосредственно в процессе написания кода:
180
* Моделирование угроз (Threat Modeling) для каждого значимого функционального изменения
181
* Стандарты безопасного кодирования, закреплённые в документах и в правилах линтеров
182
* SAST-анализ, интегрированный в IDE(Integrated Development Environment) и CI-конвейер
183
* Security-ориентированный Code Review—разработчики обучены искать конкретные классы уязвимостей
184
* Security unit tests—автоматические тесты, проверяющие, что конкретные механизмы безопасности работают корректно
185
* Программы обучения разработчиков (Secure Coding Training): знание OWASP Top 10, типовых ошибок, специфичных для используемого стека технологий
186
187
h3. Secure Deployment (безопасный деплой)
188
189
Практики на этапе выпуска и эксплуатации:
190
* DAST и пентест как обязательные условия выпуска значимых версий
191
* Управление секретами (Secrets Management): никаких паролей и ключей в коде или переменных среды
192
* Infrastructure as Code (IaC) Security—сканирование конфигураций Terraform, Helm-чартов на ошибки безопасности
193
* Security Gates—автоматические условия блокировки релиза при обнаружении уязвимостей выше порога
194
* Runtime Protection: WAF, RASP, защита контейнерных окружений
195
* Политика ответственного раскрытия уязвимостей (VDP)—организованный канал для приёма сообщений от внешних исследователей
196
197
h3. Связь SSF с другими стандартами и фреймворками
198
199
SSF хорошо сочетается с другими стандартами безопасной разработки:
200
201
* *OWASP SAMM* (Software Assurance Maturity Model)—модель зрелости практик безопасности ПО; позволяет оценить текущий уровень и выстроить дорожную карту улучшений
202
* *BSIMM* (Building Security In Maturity Model)—эмпирическая модель, основанная на данных реальных организаций
203
* *NIST SSDF* (Secure Software Development Framework, SP 800-218)—руководство NIST(National Institute of Standards and Technology) по практикам безопасной разработки
204
* Требования ОУД 4 в части анализа уязвимостей и тестового покрытия прямо соответствуют практикам SSF в направлении Secure Development
205
206
---
207
208
h2. DevSecOps: операционализация безопасной разработки
209
210
*DevSecOps*—это культура и практика интеграции безопасности в DevOps-процессы, при которой каждый член команды разработки несёт ответственность за безопасность, а проверки автоматизированы и встроены в конвейер доставки.
211
212
Ключевые принципы:
213
214
*Shift Left* («сдвиг влево»)—выявлять и устранять проблемы безопасности как можно раньше в цикле разработки. Чем позже обнаружена уязвимость, тем дороже её исправление.
215
216
*Security as Code*—политики безопасности выражаются в форме кода: правила SAST, конфигурации WAF, пороги Security Gates. Это обеспечивает воспроизводимость, версионирование и автоматизацию.
217
218
*Security Champion*—разработчик внутри команды, проходящий углублённое обучение по безопасности и помогающий коллегам применять практики безопасного кодирования в ежедневной работе.
219
220
*Metrics-Driven Security*—измеримые показатели: MTTR(Mean Time to Remediate) уязвимостей (среднее время устранения), плотность уязвимостей на 1000 строк кода, процент покрытия тестами безопасности.
221
222
---
223
224
h2. Типичные ошибки при внедрении безопасной разработки
225
226
# *Безопасность как финальный шлюз.* Тестирование безопасности только перед релизом превращает его в блокировщик и создаёт давление на «закрытие» уязвимостей любой ценой.
227
228
# *Только автоматизация без экспертизы.* SAST и DAST генерируют много ложных срабатываний. Без аналитика, разбирающегося в приоритетах, команды начинают игнорировать весь поток предупреждений.
229
230
# *Игнорирование сторонних компонентов.* Команды тщательно тестируют собственный код, но не отслеживают CVE в зависимостях. Log4Shell (CVE-2021-44228) затронула тысячи продуктов именно по этой причине.
231
232
# *Отсутствие обучения разработчиков.* Инструменты без знаний бесполезны. Разработчик, не понимающий, что такое SQL-инъекция, не исправит её, даже когда SAST об этом сообщит.
233
234
# *«Сертификат ОУД 4 = продукт безопасен».* Сертификация фиксирует состояние продукта на момент оценки. Новые уязвимости появляются постоянно. Сертификат—это оценка процесса, а не гарантия отсутствия уязвимостей навсегда.
235
236
# *Модель угроз делается один раз.* Threat Modeling должен пересматриваться при каждом значимом изменении архитектуры или бизнес-логики.
237
238
239
---
240
241
h2. Список литературы и стандартов
242
243
* ISO/IEC 15408-1:2022 (ГОСТ Р ИСО/МЭК 15408)—Общие критерии оценки безопасности информационных технологий
244
* "OWASP Top 10 2021":https://owasp.org/Top10/
245
* "OWASP Software Security Framework":https://owasp.org/www-project-software-security-framework/
246
* "OWASP SAMM v2":https://owaspsamm.org/—Software Assurance Maturity Model
247
* NIST SP 800-218—Secure Software Development Framework (SSDF)
248
* "SLSA Framework":https://slsa.dev/—Supply-chain Levels for Software Artifacts
249
* McGraw G.—Software Security: Building Security In. Addison-Wesley, 2006
250
* Kim G., Humble J., Debois P.—The DevOps Handbook. IT Revolution Press, 2016
251
* Руководящий документ ФСТЭК России—Методология оценки безопасности ИТ (в части требований к ОУД)