Безопасная разработка » История » Версия 4
С. Антошкин, 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 | 4 | С. Антошкин | !clipboard-202606031235-9yttc.png! |
| 22 | 1 | С. Антошкин | |
| 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 | * Руководящий документ ФСТЭК России—Методология оценки безопасности ИТ (в части требований к ОУД) |