Информационная безопасность

Secure SDLC

2021 год. Log4Shell. Уязвимость которую можно было найти SAST инструментом в 2013. 8 лет в production. 3 миллиарда затронутых устройств. Цена: сотни миллионов долларов на патчинг по всей индустрии. Один SAST scan с правилом на JNDI lookup мог предотвратить одну из крупнейших уязвимостей в истории.

  • **Google**: Application Security Reviews обязательны перед GA для любого продукта работающего с user data
  • **Microsoft**: SDL (Security Development Lifecycle) - методология созданная после безопасного расчета Windows XP и внедренная начиная с Vista/Server 2003
  • **GitHub Advanced Security**: CodeQL + secret scanning + Dependabot alerts встроены в workflow для всех GitHub repos

SAST: статический анализ безопасности

2021 год. Log4Shell - уязвимость в Apache Log4j. Затронуто более 3 миллиардов устройств. Уязвимость существовала в коде с 2013 года - 8 лет. SAST инструмент проверяющий паттерн ${} в JNDI lookup обнаружил бы ее при первом commit'е в 2013.

SAST (Static Application Security Testing) - анализ исходного кода без запуска. Ищет известные паттерны уязвимостей: SQL injection (конкатенация строк в SQL), XSS (неэкранированный вывод), hardcoded secrets (API ключи в коде), небезопасные crypto алгоритмы (MD5 для паролей), path traversal. Работает на любом этапе: в IDE (real-time), в pre-commit hook, в CI pipeline.

Semgrep - open-source SAST с синтаксисом правил близким к самому коду. Правило для обнаружения SQL injection в Python: `pattern: '$X.execute($QUERY + ...)`. Правила пишутся командой, не vendors - это позволяет добавлять кастомные паттерны под конкретный стек. GitHub Advanced Security использует CodeQL - query-based подход, где уязвимости описываются как запросы к графу кода.

SAST нашел 500 потенциальных уязвимостей в legacy проекте, 70% из которых - false positives. Как правильно интегрировать SAST в CI?

DAST: динамическое тестирование безопасности

SAST видит код, но не видит runtime поведение. DAST видит runtime, но не видит код. Они дополняют друг друга. DAST (Dynamic Application Security Testing) - атака на работающее приложение через HTTP: отправка вредоносных payload в параметры, формы, заголовки. Находит то что нельзя найти статически: бизнес-логика уязвимости, rate limiting отсутствие, неправильные HTTP headers.

OWASP ZAP (Zed Attack Proxy) - стандарт для automated DAST. Два режима: passive scan (анализ трафика без атак - безопасно в prod) и active scan (отправка атакующих payload - только в staging). DAST интегрируется в CI через CLI: `zap-baseline.py -t https://staging.example.com`. Результаты - SARIF формат совместимый с GitHub Security.

Pentesting vs DAST: автоматизированный DAST находит известные уязвимости по паттернам - быстро, воспроизводимо, дешево. Ручной pentesting находит логические уязвимости, бизнес-контекстные проблемы, нестандартные комбинации - медленно, дорого, экспертно. Зрелая программа безопасности использует оба: DAST в каждом CI прогоне, pentesting 1-2 раза в год или перед major релизом.

DAST active scan случайно удалил тестовые данные в staging окружении. Что пошло не так?

DevSecOps: безопасность как часть pipeline

DevSecOps - не инструмент и не роль. Это принцип: security checks автоматизированы и встроены в workflow разработчика. Разработчик получает feedback о security issues так же быстро как о lint ошибках. Cost of fixing a vulnerability: USD 80 в design phase, USD 960 в coding, USD 7600 в testing, USD 14500 в maintenance. Смещение влево (shift left) окупается экономически.

Зрелый DevSecOps pipeline включает несколько слоев: pre-commit (secrets scan, basic lint), PR (SAST, dependency check), staging (DAST, IAST), pre-release (pentesting), production (RASP, monitoring). Ключевой принцип: каждый слой должен давать actionable feedback разработчику, не просто список CVE номеров без контекста.

SBOM (Software Bill of Materials) - список всех компонентов ПО с версиями. Аналог ingredient list на продуктах питания. С 2021 года исполнительный приказ Biden обязал US federal контракторов предоставлять SBOM. Форматы: SPDX (Linux Foundation), CycloneDX (OWASP). При появлении новой CVE (как Log4Shell) компания с SBOM за 10 минут знает какие продукты затронуты. Без SBOM - дни ручного поиска.

Команда внедрила SAST, DAST и dependency scanning. Security team сообщает что 90% разработчиков игнорируют security alerts. В чем проблема?

Threat Modeling: проектирование безопасности

Инструменты хорошо находят известные паттерны. Но бизнес-логику уязвимости - 'пользователь может купить товар за 0 рублей через race condition в оплате' - не найдет никакой SAST. Threat Modeling - структурированный процесс поиска таких уязвимостей на этапе проектирования.

STRIDE - Microsoft методология threat modeling: Spoofing (подделка идентификации), Tampering (изменение данных), Repudiation (отрицание действий), Information Disclosure (утечка данных), Denial of Service (отказ в обслуживании), Elevation of Privilege (повышение привилегий). Для каждого компонента системы (из DFD - Data Flow Diagram) перебираются угрозы STRIDE и определяются контрмеры.

Threat modeling нужен не только для new features. Security review перед релизом - стандартная практика в Google, Microsoft, Amazon. Google проводит Application Security Reviews (ASR) для любого проекта обрабатывающего user data. Процесс: команда заполняет security questionnaire, security team проводит review, выдает список must-fix до GA (General Availability) и should-fix после.

SAST + DAST = полная безопасность; отдельный threat modeling не нужен

SAST/DAST находят известные паттерны; business logic vulnerabilities и архитектурные проблемы требуют threat modeling

Race condition в payment flow, IDOR через predictable IDs, privilege escalation через бизнес-логику - эти уязвимости не имеют сигнатуры для SAST и не воспроизводятся автоматически в DAST. Threat modeling - единственный способ найти их до production

На каком этапе SDLC наиболее эффективно проводить threat modeling для новой фичи?

Связанные темы

Secure SDLC объединяет security practices на всех уровнях разработки:

  • OWASP и Web Security — OWASP Top 10 - основной список угроз для SAST/DAST правил
  • API Security — DAST тестирует API endpoints - часть OWASP API Security Top 10
  • DDoS митигация — Rate limiting и DoS protection - часть threat modeling для публичных сервисов

Ключевые идеи

  • **SAST**: статический анализ в IDE/CI; Semgrep для кастомных правил; baseline чтобы не блокировать legacy код
  • **DAST**: атака работающего staging; OWASP ZAP в CI; только passive scan в production, active - только в изолированном staging
  • **DevSecOps**: shift left снижает cost of fix в 180x; actionable alerts в PR важнее объема alerts
  • **Threat Modeling**: STRIDE на этапе design находит business logic уязвимости которые SAST/DAST пропускают

Вопросы для размышления

  • Log4Shell существовал 8 лет. Какие процессы из Secure SDLC могли обнаружить его раньше? Почему они не были внедрены?
  • Как приоритизировать security работу в стартапе с командой 5 человек? Какие минимальные практики дают максимальный эффект?
  • SBOM становится обязательным в regulated industries. Какие операционные изменения требует внедрение SBOM в существующий DevOps процесс?

Связанные уроки

  • sec-15 — DDoS mitigation - пример архитектурной защиты, которую закладывает Secure SDLC
  • sec-04 — OWASP Top 10 - список уязвимостей которые ищет SAST/DAST
  • sec-11 — API security checks входят в DAST pipeline
  • se-10 — CI/CD pipeline - инфраструктура в которую встраивается DevSecOps
  • se-11 — Code review процесс расширяется security review в Secure SDLC
  • os-11-security
Secure SDLC

0

1

Войти