DEV Community

Cover image for Software Engineering — это не «разработка ПО»: как Product Security становится Security Software Engineering
Ivan's Cybersecurity Notes
Ivan's Cybersecurity Notes

Posted on Edited on

Software Engineering — это не «разработка ПО»: как Product Security становится Security Software Engineering

О чем речь в статье?

Привет, парни! Ну, что долго я писал это статью, и наконе-то закончил! Это попытка объяснить базовые концепции за 20 минут чтения простым языком и глазами того кто этосам прошел. Кто в теме ProdSec, Погнали!

В русскоязычной IT-среде термин Software Engineering часто переводят так, что половина смысла теряется уже на входе.. да, да, как говорят "трудности перевода". В итоге термин «Разработка ПО» звучит слишком узко: будто речь только о написании кода и закрытии задач в трекере. «Инженерия программного обеспечения» звучит вообще академично: будто это глава из учебника, а не ежедневная практика команд, которые выпускают продукт, поддерживают его годами, переживают инциденты, миграции, рост нагрузки, смену архитектуры и смену людей.

В западном инженерном контексте, особенно в крупных продуктовых и инфраструктурных компаниях, Software Engineering — это не “умение программировать”. Это дисциплина построения программных систем, которые должны жить во времени, масштабироваться, изменяться, наблюдаться, восстанавливаться после отказов и оставаться экономически обслуживаемыми.

Из-за этой же языковой путаницы часто искажается понимание безопасности. Product Security (в СНГ) иногда сводят лишь к AppSec, DevSecOps, сканерам, threat modeling-сессиям или Secure SDLC-документам. Это ошибка. AppSec, DevSecOps, Cloud Security, Threat Modeling, Secure SDLC, Supply Chain Security, Vulnerability Management и Incident Response — это домены и практики. Product Security — это операционная модель, которая соединяет их вокруг безопасности конкретного продукта.

В этой статье я хочу разложить три вещи:

  • что такое Software Engineering в нормальном инженерном понимании;
  • что тогда означает Security Software Engineering / Software Security Engineering;
  • Software Engineering — это не «разработка ПО»: как Product Security становится Security Software Engineering


Сначала уточним терминологию

В англоязычной литературе чаще встречается формулировка Software Security Engineering — инженерия безопасности программного обеспечения. В названиях ролей и команд можно увидеть и Security Software Engineer, и Product Security Engineer, и Security Engineer, Software Engineering, и Application Security Engineer. Названия отличаются от компании к компании, но смысловой вектор один: безопасность перестаёт быть внешней проверкой и становится частью инженерного процесса.

Поэтому дальше я буду использовать несколько близких терминов, но с небольшим различием:

Термин Как я буду его понимать в статье
Software Engineering Инженерная дисциплина создания, изменения, эксплуатации и сопровождения программных систем во времени.
Software Security Engineering / Security Software Engineering Применение инженерных принципов к снижению security-риска в software-системах.
Product Security Практическая функция/operating model, которая отвечает за безопасность продукта как целостной системы.
AppSec Домен безопасности приложений: код, API, auth/authz, web/mobile/backend, бизнес-логика, зависимости.
DevSecOps Домен автоматизации и встраивания security-проверок в engineering pipeline и delivery flow.

Важный нюанс: Product Security не всегда является буквальным синонимом Software Security Engineering. В разных компаниях Product Security может быть названием команды, функции, программы или набора практик. Но по сути зрелый Product Security — это одна из самых практичных форм S*oftware Security Engineering*: не теория про безопасность кода вообще, а работа с реальным продуктом, его пользователями, архитектурой, инфраструктурой, релизами, инцидентами, поставщиками и рисками.

Почему «разработка ПО» — слабый\некачесвтенный перевод

Когда мы говорим «разработка ПО», у многих в голове возникает достаточно линейная картина:

  1. получили задачу;
  2. написали код;
  3. покрыли тестами, если успели;
  4. прошли code review;
  5. задеплоили;
  6. взяли следующую задачу.

Это реальная часть работы. Но это не вся инженерия.

В книге Software Engineering at Google есть фраза, которую часто цитируют: software engineering is programming integrated over time — программная инженерия как программирование, рассмотренное во времени. Там же подчёркивается, что к программированию добавляются изменение, сопровождение и масштаб. Это очень точная рамка: код сам по себе — моментальный снимок; инженерия — это фильм, который идёт годамиSoftware Engineering at Google: What Is Software Engineering?

Если совсем упростить:

Programming отвечает на вопрос: «Как написать код, который решает задачу сейчас?»Software Engineering отвечает на вопрос: «Как построить систему, которая будет решать задачу устойчиво, безопасно и экономически разумно весь свой жизненный цикл?»

Вот почему в зрелой инженерной культуре разработчик не думает только о функции. Он думает о последствиях:

  • кто будет поддерживать это решение через год;
  • насколько дорого будет изменить архитектуру;
  • как система поведёт себя при росте нагрузки;
  • что произойдёт при отказе внешней зависимости;
  • можно ли будет отследить проблему в production;
  • как быстро команда сможет откатиться;
  • какие данные попадут в логи;
  • где появится технический долг;
  • что будет, если автор решения уйдёт из команды.

Software Engineering начинается там, где “работает у меня” перестаёт быть достаточным критерием качества.

Пять измерений Software Engineering

Чтобы не оставлять термин абстрактным, разложим его на практические измерения.

1. Время

Код стареет. Фреймворки устаревают. Зависимости получают CVE. Бизнес меняет требования. Команды реорганизуются. Документация расходится с реальностью. То, что сегодня выглядит элегантным shortcut, через год может стать дорогим архитектурным ограничением.

Инженерный вопрос звучит не «как быстро написать?», а «как это решение будет жить, меняться и удаляться?»

Простой пример: можно быстро добавить проверку роли прямо в обработчик API. Это будет работать. Но если таких проверок станет 200, они разъедутся по сервисам, появятся исключения, старые роли, временные флаги, админские обходы. Через год проблема будет уже не в одной уязвимости, а в отсутствии нормальной authorization model.

2. Масштаб

Масштаб — это не только миллионы пользователей. Есть масштаб кода, команд, релизов, интеграций, данных, регуляторных требований и последствий ошибки.

Внутренний сервис для пяти человек может жить на ручных договорённостях. Платформа для банковских операций, medical-device backend, cloud control plane, автомобильная OTA-система или identity provider уже не могут. Там одна ошибка может затронуть деньги, персональные данные, доступность, безопасность клиентов или физический мир.

Чем выше масштаб последствий, тем меньше права на “ну вроде нормально”.

3. Командность

Продукт почти никогда не создаётся одним человеком. Вокруг него есть backend, frontend, mobile, platform, SRE, QA, data, support, product management, legal, compliance, security, иногда hardware, firmware и suppliers.

Значит, инженерия — это не только код, но и способы передачи знания:

  • code review;
  • design docs;
  • ADR — architecture decision records;
  • ownership;
  • style guides;
  • тестовые стратегии;
  • runbooks;
  • postmortems;
  • внутренние платформенные компоненты;
  • документация, которую действительно используют.

В одиночном программировании можно держать систему в голове. В инженерной организации это опасная иллюзия. Знание должно быть распределено по коду, тестам, процессам, документации и культуре.

4. Trade-offs

Инженерия живёт не в мире идеальных решений, а в мире ограничений. Почти любое решение — компромисс между скоростью, стоимостью, безопасностью, надёжностью, UX, поддерживаемостью, совместимостью и политикой бизнеса.

Security здесь не исключение. Можно поставить очень жёсткий gate в CI/CD и заблокировать половину релизов. Можно вообще ничего не блокировать и получить красивую скорость до первого крупного инцидента. Зрелая инженерная позиция — не в крайностях, а в управляемом риске.

Хороший инженер не говорит “всегда делайте X”. Он говорит: “в этих условиях X даёт такой выигрыш, такую цену и такой остаточный риск”.

5. Эксплуатация и обратная связь

Современный продукт не заканчивается на merge в main. После релиза начинаются monitoring, observability, incidents, customer reports, abuse, fraud, support tickets, latency, patching, deprecation и migration.

Если команда не смотрит на production, она не до конца понимает собственный продукт. Если security-команда не смотрит на production, она не до конца понимает реальный риск.

Production всегда умнее диаграмм. Он показывает то, что не попало в design review: странные интеграции, неожиданные пользовательские сценарии, неочевидные abuse-paths и настоящую цену архитектурных решений.

Programming vs Software Engineering

Короткая таблица, чтобы зафиксировать разницу:

Вопрос Programming / Coding Software Engineering
Главный фокус Написать код для задачи. Построить систему, которая живёт во времени.
Критерий успеха Работает сейчас. Работает, меняется, наблюдается, поддерживается.
Масштаб мышления Функция, модуль, задача. Продукт, lifecycle, команда, стоимость владения.
Ошибки Баги в реализации. Баги, архитектурный долг, operational risk, organizational risk.
Документация Иногда комментарии. Design docs, ADR, runbooks, ownership, evidence.
Безопасность Проверили перед релизом. Встроили в requirements, design, build, release, operate, respond.
Вопрос к решению «Можно ли так сделать?» «Можно ли так жить несколько лет?»

И вот на этом месте становится понятно, почему Product Security нельзя честно объяснить как «AppSec плюс сканеры».

Programming vs Software Engineering


Что такое Security Software Engineering в адекватном понимании

Если Software Engineering — это инженерная дисциплина создания и сопровождения программных систем, то Security Software Engineering — это инженерная дисциплина снижения security-риска в этих системах.

Не просто «найти уязвимость». Не просто «написать отчёт». Не просто «включить SAST». Всё это может быть полезно, но не является системой.

Security Software Engineering отвечает на вопросы другого уровня:

  • какие активы продукта действительно критичны;
  • какие user journeys нельзя скомпрометировать;
  • где проходят trust boundaries;
  • какие threat actors реалистичны для этой модели бизнеса;
  • какие security requirements должны появиться до реализации;
  • какие controls должны быть встроены в архитектуру;
  • какие проверки можно автоматизировать;
  • где нужен ручной анализ;
  • какие findings должны блокировать релиз;
  • где достаточно warning;
  • кто принимает residual risk;
  • как security-сигналы возвращаются в engineering backlog;
  • как доказать, что риск реально снижается, а не просто растёт количество тикетов.

В слабой модели security engineer говорит: «У вас critical finding, срочно исправьте».В сильной модели он говорит: «Вот сценарий ущерба, affected flow, exploitability, exposure, минимальный фикс, долгосрочный architectural fix и способ автоматизировать проверку, чтобы класс проблемы не повторялся».

Разница принципиальная. Первая модель производит тревоги. Вторая — меняет инженерную систему.

Product Security — это !НЕ AppSec с новым названием

AppSec важен. Более того, без сильного AppSec почти невозможно построить зрелый Product Security. Но AppSec — это не вся картина.

Application Security обычно работает с безопасностью приложения: код, API, web/mobile/backend, auth/authz, input validation, session management, business logic, dependencies, secrets, иногда mobile hardening и manual code review.

Product Security смотрит на продукт как на систему:

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

Можно сказать так: AppSec смотрит на безопасность приложения. Product Security смотрит на безопасность продукта, в котором приложение — только один из слоёв.

Для SaaS-продукта этими слоями будут frontend, backend, API, cloud, data platform, CI/CD, customer support tooling, admin interfaces, integrations, analytics, billing, IAM, observability. Для автомобиля — mobile app, cloud backend, OTA pipeline, firmware, ECU, gateway, diagnostics, сервисные инструменты, suppliers и fleet telemetry. Для AI-продукта — data pipeline, model serving, prompt/tool boundaries, RAG, agent permissions, evaluation, abuse monitoring и governance.

Доменная карта: что куда относится

Ниже — не академическая классификация, а практичная карта. Она помогает объяснить, почему отдельные security-домены важны, но сами по себе не равны Product Security.

Домен Что он хорошо закрывает Где слепая зона без Product Security
AppSec Код, API, web/mobile/backend, auth/authz, business logic, dependencies. Не всегда видит полный product risk, release governance, cloud/hardware/supplier context.
DevSecOps Автоматизация проверок, CI/CD, security gates, policy-as-code, security-as-code. Может превратиться в фабрику alerts без архитектурного смысла.
Cloud Security IAM, network boundaries, secrets, logging, posture, workload isolation. Не объясняет, какие product flows критичны и какой customer impact у cloud-риска.
Threat Modeling Trust boundaries, attack paths, abuse cases, design flaws. Это метод анализа, а не операционная модель безопасности продукта.
Secure SDLC Встраивание security в lifecycle разработки. Может остаться PDF-чеклистом, если нет ownership, automation и feedback loop.
Supply Chain Security Dependencies, build systems, SBOM, signing, provenance, artifact integrity. Не закрывает design flaws, runtime abuse и product-level authorization problems.
Vulnerability Management Intake, triage, SLA, remediation tracking, risk acceptance. Не отвечает, почему классы дефектов системно появляются снова.
Incident Response Detection, containment, recovery, postmortems. Без связи с engineering backlog инциденты не улучшают продукт.
Security Governance Политики, exceptions, evidence, compliance, accountability. Без engineering implementation остаётся управленческой декларацией.
Abuse / Fraud Security Злоупотребления функциями продукта без классической CVE. Часто выпадает из AppSec, если команда смотрит только на технические уязвимости.

Product Security связывает всё это в один контур: что защищаем, от кого, каким способом, в какой точке lifecycle, кто владелец, как проверяем, как исправляем, как учимся.

Security должна быть не “снаружи”, а внутри engineering flow

Старый подход выглядел так:

  1. Product придумал фичу.
  2. Engineering реализовал.
  3. QA проверил функциональность.
  4. Security пришла в конце.
  5. Нашла проблемы.
  6. Релиз уже нужен вчера.
  7. Часть фиксов сделали, часть приняли как exception.
  8. Через квартал всё повторилось.

Так рождается взаимная усталость. Разработка видит в security блокирующую полицию. Security видит в разработке фабрику нарушений. Бизнес видит торможение. Пользователь получает продукт, где controls добавлены поздно и выглядят как заплатки.

Современный Product Security пытается перенести безопасность внутрь инженерной машины:

  • security requirements появляются до реализации;
  • threat modeling проводится для high-risk changes, а не для галочки;
  • разработчики получают secure-by-default libraries и templates;
  • CI/CD ловит типовые ошибки автоматически;
  • опасные изменения имеют понятный risk acceptance;
  • security findings связываются с product impact;
  • инциденты меняют архитектуру, тесты и paved roads;
  • security team строит guardrails, а не только checkpoints.

Это переход от security as audit к security as engineering.

Lifecycle-карта Product Security

Product Security удобнее всего понимать через жизненный цикл продукта. Не как “один этап проверки”, а как набор контуров, которые включаются в разные моменты.

Этап Главный вопрос Что делает Product Security Пример артефакта
Idea / Discovery Не создаём ли мы опасную возможность? Анализ abuse cases, data sensitivity, regulatory impact. Security notes к PRD.
Requirements Какие security-требования должны быть в продукте? Формулирует security requirements и acceptance criteria. Security requirements checklist.
Design Где trust boundaries и attack paths? Threat modeling, architecture review, control design. Threat model / design review.
Build Как помочь разработчикам сделать правильно? Secure libraries, templates, code review, SAST/SCA/secrets checks. Secure paved road.
Verify Какие риски остались перед релизом? DAST, manual review, abuse testing, pentest, regression tests. Release security assessment.
Release Можно ли выпускать и на каких условиях? Risk-based gates, exceptions, signing, provenance, rollout controls. Risk acceptance / release note.
Operate Видим ли мы атаки и сбои controls? Logging, detection, telemetry, vulnerability intake, bug bounty. Security monitoring playbook.
Respond Как быстро ограничить ущерб и улучшить систему? Incident response, containment, postmortem, backlog feedback. Postmortem + control improvements.
Deprecate Как безопасно выключить старое? Key/token revocation, migration, customer comms, data retention. Deprecation security plan.

Эта таблица важнее, чем кажется. Она показывает, что Product Security — не “проверка перед релизом”. Это сквозная инженерная функция, которая меняет решения на каждом этапе.

Product Security — это не AppSec с новым названием

Secure SDLC — это не чеклист в Confluence

Secure SDLC часто рисуют как аккуратную последовательность фаз: requirements, design, implementation, verification, release, operations, response. Схема полезная, но реальная компания редко живёт по такой линейке.

Где-то agile и weekly releases. Где-то monorepo. Где-то platform teams. Где-то legacy. Где-то regulated embedded-разработка. Где-то vendor delivery. Где-то hotfix в production под давлением клиента.

Поэтому зрелый Secure SDLC — не документ, который “у нас есть”. Это способность адаптировать security-контроли к реальному engineering flow.

Например:

  • новая high-risk admin feature требует abuse review до реализации;
  • типовой backend-сервис может идти через secure template + automated checks + lightweight review;
  • изменение authorization model требует design review и security regression tests;
  • dependency update требует SCA, compatibility testing и awareness о reachability;
  • firmware/OTA требует signing, provenance, staged rollout и rollback;
  • production incident требует postmortem, который меняет controls, а не просто закрывает ticket.

NIST SSDF описывает высокоуровневые secure development practices, которые можно интегрировать в разные SDLC-модели; OWASP SAMM помогает строить и оценивать стратегию software assurance под риск конкретной организации. Это полезные рамки, но их ценность появляется только тогда, когда они переводятся в инженерные действия. NIST SP 800-218 SSDFOWASP SAMM

DevSecOps: полезный рычаг, но не вся безопасность

DevSecOps часто продают как универсальный ответ: добавим security в pipeline, и продукт станет безопасным. На практике pipeline — это сильный, но ограниченный механизм.

CI/CD хорошо ловит:

  • известные vulnerable dependencies;
  • случайно закоммиченные secrets;
  • небезопасные container images;
  • часть IaC misconfigurations;
  • очевидные code patterns;
  • отсутствие подписи артефакта;
  • нарушение policy-as-code;
  • отклонения от baseline-конфигураций.

Но pipeline плохо понимает:

  • неправильную бизнес-логику;
  • слабую authorization model;
  • опасное product decision;
  • abuse через legitimate features;
  • связку mobile app + cloud + device;
  • поддержку legacy-клиентов;
  • supplier risk;
  • отсутствие recovery strategy;
  • реальный customer impact.

Поэтому DevSecOps без Product Security легко превращается в красивую фабрику alerts. Product Security отвечает на вопросы, которые pipeline сам не задаст:

  • что должно блокировать релиз;
  • что можно выпускать под exception;
  • где warning достаточно;
  • какой risk owner принимает решение;
  • какие alerts являются шумом;
  • какой класс проблем надо устранять архитектурно;
  • какая проверка должна стать reusable guardrail.

Автоматизация полезна только тогда, когда она встроена в модель риска. Иначе она просто ускоряет производство шума.


Anti-patterns: как Product Security превращается в театр

Почти любую хорошую идею можно испортить. Product Security — не исключение.

Anti-pattern 1. “У нас есть сканеры, значит у нас есть безопасность”

Сканеры нужны. Но сканер не знает контекста продукта, business impact, компенсирующих controls, exposure и exploitability. Он даёт сигнал, а не решение.

Если команда меряет зрелость количеством найденных vulnerabilities, она может случайно начать оптимизироваться под шум. Настоящий вопрос другой: какие риски снижены, какие классы дефектов исчезли, насколько быстрее и безопаснее команда исправляет проблемы.

Anti-pattern 2. “Security придёт в конце и всё проверит”

Поздняя проверка почти всегда дороже. На этапе кода можно исправить input validation. На этапе архитектуры можно исправить trust boundary. После релиза можно получить миграцию, breaking changes, customer comms и риск инцидента.

Чем раньше найден design flaw, тем дешевле он стоит.

Anti-pattern 3. “Threat modeling ради галочки”

Если threat model не меняет требования, архитектуру, тесты или backlog — это не threat modeling, а ритуал. Хорошая сессия должна заканчиваться инженерными решениями: добавить control, изменить flow, убрать опасную возможность, усилить logging, написать regression test, ограничить роль, добавить rate limit, изменить rollout strategy.

Anti-pattern 4. “CVSS = приоритет”

CVSS полезен, но это не вся приоритизация. Для продукта важны exposure, exploitability, reachability, affected asset, user impact, tenant boundary, наличие exploit in the wild, compensating controls, blast radius и business context.

Уязвимость CVSS 9.8 в неиспользуемой библиотеке может быть менее срочной, чем CVSS 6.5 в публичном endpoint, который позволяет обойти authorization для критичной операции.

Anti-pattern 5. “Security team всё согласует вручную”

Если каждая команда обязана ждать security approval по любому изменению, security становится bottleneck. Зрелая модель строит paved roads: безопасные шаблоны, библиотеки, default controls и автоматические проверки, чтобы большинство команд могли двигаться быстро без ручного согласования.

Что такое secure paved road

Термин paved road часто используют для обозначения “проторённого пути”: стандартного, поддерживаемого, удобного способа сделать правильно. В Product Security это один из главных инструментов масштабирования.

Плохая модель говорит разработчику: «Не ошибайся в security».Хорошая модель говорит: «Вот готовый безопасный путь, который проще использовать, чем обходить».

Примеры secure paved roads:

  • стандартный service template с authentication, authorization middleware, logging и health checks;
  • централизованная библиотека для проверки прав;
  • approved crypto wrapper вместо ручного выбора алгоритмов;
  • secrets management pattern вместо .env и ручных токенов;
  • hardened base images;
  • CI/CD templates с SAST/SCA/secrets/IaC checks;
  • безопасный Terraform module для типовых cloud resources;
  • reference architecture для multi-tenant service;
  • reusable audit logging component;
  • standard rollback and feature flag pattern;
  • threat modeling questionnaire для high-risk changes.

Paved road снижает зависимость от героизма. Команда не должна каждый раз заново изобретать авторизацию, secrets, logging, rate limiting и encryption. Безопасность должна быть встроена в инструменты, которыми инженер и так пользуется.

Что такое secure paved road

Automotive example: Product Security для software-defined vehicle

Теперь возьмём пример автомобиля. Не обязательно полностью автономного. Современный автомобиль уже является software-heavy продуктом: firmware, ECU, gateway, CAN/Ethernet-сети, телематика, mobile app, backend, OTA, сервисные инструменты, диагностика, supplier-компоненты, production pipeline, fleet telemetry.

Если смотреть на такой продукт только как на веб-приложение, мы увидим знакомые элементы:

  • mobile app;
  • cloud backend;
  • API;
  • user accounts;
  • admin panel;
  • CI/CD;
  • dependencies;
  • secrets;
  • logging;
  • monitoring.

Это правда, но не вся правда. В автомобиле software связан с физическим объектом. Ошибка в authorization может быть не просто доступом к чужому профилю. Она может затронуть remote vehicle commands. Проблема в OTA-процессе может быть не просто failed deployment, а риск распространения ошибочного, неподписанного или плохо контролируемого firmware. Утечка signing key может быть не просто credential incident, а кризис доверия ко всей update chain.


Пример feature: удалённая команда на автомобиль

Допустим, команда добавляет возможность из мобильного приложения отправлять автомобилю remote command: открыть/закрыть дверь, включить климат, показать location, запустить сервисную диагностику или обновить настройку.

*AppSec увидит:
*

  • mobile storage;
  • token handling;
  • API authorization;
  • rate limiting;
  • replay attacks;
  • insecure direct object references;
  • session management;
  • logging of sensitive data.

DevSecOps увидит:

  • secrets в репозитории;
  • vulnerable dependencies;
  • container images;
  • IaC misconfigurations;
  • build pipeline;
  • artifact signing;
  • policy gates.

Cloud Security увидит:

  • IAM;
  • service-to-service permissions;
  • network segmentation;
  • KMS;
  • audit logs;
  • workload identity;
  • production access.

Embedded / Vehicle Security увидит:

  • command validation на стороне vehicle gateway;
  • separation между external interfaces и critical in-vehicle networks;
  • secure boot;
  • firmware integrity;
  • debug interfaces;
  • diagnostics access;
  • safety interlocks.

Automotive example: Product Security для software-defined vehicle

Product Security должен соединить это в один вопрос:

Что должно быть правдой во всей цепочке mobile app → identity → cloud API → command service → telemetry → vehicle gateway → ECU, чтобы удалённая команда была безопасной, наблюдаемой, отзывной и управляемой при инциденте?

Вот пример такой карты:

Слой Security-вопрос Возможный control
Mobile app Можно ли украсть или переиспользовать токен? Secure storage, device binding, risk-based reauth, certificate pinning там, где оправдано.
Identity Точно ли пользователь имеет право управлять этим vehicle? Strong auth, authorization checks, ownership model, delegated access controls.
API Можно ли отправить команду к чужому vehicle_id? Object-level authorization, tenant isolation, anti-replay, rate limits.
Command backend Кто может создавать опасные команды? Service identity, least privilege, audit trail, policy engine.
Messaging / Telemetry Можно ли подменить, повторить или скрыть команду? Signing/MAC, freshness, sequence checks, monitoring, anomaly detection.
Vehicle gateway Какие команды пропускаются во внутренние сети? Enforcement point, allowlist, state-aware validation, segmentation.
ECU / firmware Можно ли выполнить неподписанный код или изменить critical logic? Secure boot, code signing, debug lock, firmware hardening.
OTA Можно ли протащить вредный или ошибочный update? Provenance, signing, staged rollout, rollback, key protection.
Operations Что делать при компрометации токена, ключа или backend-сервиса? Revocation, kill switch для функций, incident runbook, emergency update path.

В этой таблице нет “одного главного инструмента”. Здесь Product Security проявляется как системная функция: design review, AppSec, cloud, DevSecOps, embedded security, supply chain, runtime detection и incident response должны работать вместе.

Cybersecurity и functional safety — не одно и то же

В automotive важно не смешивать термины. Functional safety отвечает за риски отказов и опасного поведения системы из-за неисправностей. Cybersecurity отвечает за риски злонамеренного воздействия, компрометации, подмены, обхода controls и abuse. Но в software-defined vehicle они пересекаются: cyber-атака может создать safety impact, а safety constraints могут ограничивать security-дизайн.

Поэтому Product Security не заменяет safety engineering, но должен уметь говорить с ним на одном языке: severity, controllability, operational state, fail-safe behavior, update strategy, diagnostics, emergency response.

Для автомобильной отрасли существуют отдельные рамки: ISO/SAE 21434 описывает engineering requirements для cybersecurity risk management дорожных транспортных средств на протяжении жизненного цикла, а UN Regulation No. 155 требует cybersecurity management system в контексте vehicle type approval. Эти документы не “делают продукт безопасным” сами по себе, но задают язык процессов, evidence и ответственности. ISO/SAE 21434UN Regulation No. 155

Supply chain: почему зависимость — это часть продукта

Ещё один хороший пример Product Security-мышления — software supply chain. В старой модели dependency — это “библиотека, которую подтянули”. В инженерной модели dependency — это часть продукта, потому что она попадает в build, влияет на runtime, имеет свой release cycle, maintainer risk, license risk, vulnerability history и transitive dependencies.

Product Security должен задавать вопросы:

  • откуда приходит код;
  • кто может изменить build pipeline;
  • кто может подписать artifact;
  • какие зависимости реально reachable;
  • есть ли SBOM;
  • есть ли provenance;
  • можно ли воспроизвести build;
  • как быстро мы узнаем о vulnerable dependency;
  • кто владелец remediation;
  • как не сломать customer environment при emergency update.

Для этого используются SCA, SBOM, signing, provenance, dependency policies, hardened runners, isolated build environments, artifact registries, secrets management и frameworks вроде SLSA. Но опять же: сами инструменты не заменяют operating model. SLSA описывает подход к повышению целостности supply chain и защите artifacts/infrastructure от tampering, но внедрение всё равно требует ownership, engineering integration и поддержки команд. SLSA


Какие артефакты должны появляться у зрелого Product Security

Если Product Security существует только в головах отдельных специалистов, он не масштабируется. Нужны артефакты — не ради бюрократии, а ради передачи знания и повторяемости.

Практический набор:

Артефакт Для чего нужен
Product risk register Видеть ключевые риски продукта, owners, статус и residual risk.
Security requirements library Не писать требования каждый раз с нуля.
Threat models для high-risk flows Фиксировать trust boundaries, threats, controls и open questions.
Reference architectures Давать командам проверенные паттерны.
Secure coding / design guidelines Убирать повторяющиеся ошибки в реализации и дизайне.
CI/CD security baseline Делать базовые проверки стандартными для всех сервисов.
Exception process Принимать риск прозрачно, с owner и сроком жизни.
Security regression tests Не возвращать старые классы проблем.
Incident playbooks Быстро реагировать на типовые сценарии.
Postmortem action tracker Превращать инциденты в улучшения controls.
Metrics dashboard Смотреть не на активность security-команды, а на изменение риска.

Главный принцип: артефакт должен помогать принять решение или изменить поведение системы. Если документ никто не открывает и он ни на что не влияет, это не evidence, а архивная пыль.

Метрики: что измерять вместо “мы нашли 300 уязвимостей”

Количество findings — слабая метрика. Она показывает активность инструмента или команды, но не обязательно снижение риска. Иногда рост findings означает улучшение видимости. Иногда — рост шума. Иногда — деградацию качества. Без контекста цифра почти ничего не говорит.

Более полезные метрики:

Метрика Почему полезна
Time to remediate by risk tier Показывает, как быстро команда закрывает действительно важные риски.
Aging critical/high vulnerabilities with exposure Видно, какие опасные проблемы стареют в production-контуре.
% high-risk changes with completed threat model Показывает, попадает ли security в design до реализации.
Paved road adoption rate Видно, пользуются ли команды безопасными стандартными путями.
Scanner noise ratio / false positive rate Помогает не убить доверие разработчиков к security-сигналам.
% services with baseline CI/CD security controls Показывает покрытие базовой automation.
Secrets exposure time Важна не только утечка, но и скорость обнаружения/rotation.
SBOM / provenance coverage for critical products Даёт видимость supply chain и release integrity.
Risk exceptions with owner and expiry Показывает, управляются ли принятые риски.
Repeat finding rate by class Показывает, устраняет ли команда системные причины.
Security incidents producing engineering changes Проверяет, превращаются ли уроки в controls, tests и architecture fixes.

Хорошая метрика должна менять поведение. Если показатель не помогает принять инженерное или управленческое решение, он может быть красивым, но бесполезным.

Что делает Security Software Engineer на практике

Security Software Engineer — это не обязательно человек, который каждый день пишет production feature code. Но он должен понимать software engineering достаточно глубоко, чтобы влиять на него инженерными способами.

В зрелой модели такой специалист:

  • читает design docs и видит trust boundaries;
  • превращает угрозы в engineering requirements;
  • пишет или ревьюит security-sensitive код;
  • создаёт reusable controls;
  • проектирует secure libraries и templates;
  • понимает CI/CD, cloud, containers, IAM, observability;
  • отличает реальный риск от scanner noise;
  • умеет спорить о trade-offs без религиозной войны;
  • помогает командам выпускать безопаснее, а не просто медленнее;
  • переводит инциденты и findings в изменения engineering system.

Пример разницы:

Слабая реакция:«SAST нашёл SQL injection. Исправьте до пятницы».

Сильная реакция:«У нас найден класс SQL injection в сервисах, которые используют ручную сборку запросов. Критичный exposure — два публичных endpoint. Short-term: фиксим конкретные места и добавляем regression tests. Long-term: переводим этот класс запросов на approved data access layer, добавляем Semgrep-rule в CI и обновляем service template. Owner — команда X, security помогает с rule и review».

Во втором случае security не просто “нашла баг”. Она уменьшила вероятность повторения класса проблем.


Практический минимум навыков

Если собирать базовый набор для человека, который хочет расти в Product Security / Security Software Engineering, я бы выделил четыре слоя.

Engineering foundation

  • архитектура приложений и распределённых систем;
  • API design;
  • authentication and authorization models;
  • cloud basics;
  • CI/CD;
  • containers and Kubernetes;
  • observability;
  • incident management;
  • release engineering;
  • dependency management;
  • code review culture.

Security foundation

  • AppSec;
  • threat modeling;
  • secure architecture;
  • cloud security;
  • supply chain security;
  • secrets management;
  • vulnerability management;
  • secure SDLC;
  • abuse cases;
  • incident response;
  • security metrics.

Product thinking

  • critical user journeys;
  • customer impact;
  • roadmap awareness;
  • risk-based prioritization;
  • UX/security trade-offs;
  • communication with product and engineering leaders;
  • умение превращать security-проблему в инженерную задачу.

Leadership layer

  • operating model;
  • governance;
  • hiring and enablement;
  • security champions;
  • budget justification;
  • stakeholder management;
  • culture building;
  • metrics and board-level storytelling.

Это не значит, что один человек обязан быть экспертом во всём. Но Product Security-лидер должен понимать, как эти элементы соединяются, где нужны глубокие специалисты, а где достаточно правильного процесса и платформенных guardrails.


First 30 days: что можно сделать в реальной компании?

Чтобы статья не осталась только рассуждением о терминах, вот практический план начального аудита Product Security-модели. Он подходит для нового лидера, консультанта или senior security engineer, который приходит в продуктовую организацию.

Неделя 1. Понять продукт и риск

  • составить карту основных user journeys;
  • выделить high-risk flows: auth, payments, admin actions, data export, remote commands, tenant boundaries;
  • понять, какие данные и операции критичны;
  • собрать список production services и owners;
  • найти текущие sources of truth: diagrams, runbooks, dashboards, incident history.

Результат: черновой product risk map.

Неделя 2. Проверить engineering flow

  • посмотреть, как создаются requirements;
  • где происходит design review;
  • как устроены code review и CI/CD;
  • какие security checks уже есть;
  • какие findings игнорируются и почему;
  • как принимаются exceptions;
  • как устроен release и rollback.

Результат: карта security touchpoints в SDLC.

Неделя 3. Найти системные провалы

  • сравнить scanner findings с реальным exposure;
  • проверить authorization patterns;
  • посмотреть secrets handling;
  • проверить dependency and artifact flow;
  • найти сервисы без ownership;
  • разобрать 2–3 последних инцидента или крупных бага;
  • выделить повторяющиеся классы проблем.

Результат: top risks + systemic root causes.

Неделя 4. Собрать operating model v1

  • определить, какие изменения должны проходить threat modeling;
  • выбрать baseline CI/CD controls;
  • предложить 2–3 secure paved roads;
  • определить risk acceptance process;
  • согласовать первые метрики;
  • завести backlog security improvements;
  • назначить owners и сроки.

Результат: Product Security operating model v1, который можно обсуждать с Engineering, Product, SRE и leadership.

Главная идея: не пытаться “защитить всё” за месяц. Нужно быстро понять, где продукт реально может получить ущерб, где security-сигналы шумят, где controls отсутствуют, и какие 20% изменений дадут 80% снижения риска.


Как объяснить Product Security бизнесу и разработке

Иногда проблема не в знаниях, а в языке. Разным аудиториям нужно объяснять одно и то же по-разному.

Для разработчиков:

Product Security — это не команда, которая приходит запретить релиз. Это команда, которая помогает убрать повторяющиеся security-ошибки из engineering flow и даёт безопасные стандартные решения.

Для product managers:

Product Security помогает понять, какие фичи создают риск для пользователей, данных, доверия и регуляторных обязательств, и как встроить controls без убийства UX и скорости roadmap.

Для CTO / VP Engineering:

Product Security снижает стоимость будущих инцидентов и security debt, превращая безопасность из ручного review bottleneck в инженерную систему: requirements, architecture, automation, paved roads, metrics and feedback.

Для CISO:

Product Security соединяет corporate security strategy с реальным продуктовым engineering: ownership, risk acceptance, secure SDLC, vulnerability management, evidence, response и continuous improvement.

Для клиента или аудитора:

Product Security показывает, что безопасность продукта управляется не обещаниями, а процессами, controls, evidence, remediation и accountability.


Несколько рабочих формулировок

Формулировки важны, потому что они меняют ожидания. Пригодится тебе на интервью и самопрезентации :)

Плохо:«Мы отвечаем за AppSec и DevSecOps».
Лучше:«Мы отвечаем за то, чтобы security-риск продукта управлялся на всех этапах: design, build, release, operate, respond».

Плохо:«Мы запускаем сканеры и отправляем findings».
Лучше:«Мы строим систему сигналов, guardrails и engineering practices, которые помогают командам выпускать продукт безопаснее без лишнего трения».

Плохо:«Security должна всё проверить перед релизом».
Лучше:«Security должна быть встроена в engineering flow так, чтобы типовые ошибки предотвращались до ручной проверки».

Плохо:«Product Security — это AppSec, только шире».
Лучше:«Product Security — это security engineering operating model для продукта, где AppSec является одним из ключевых доменов».

Где проходит граница ответственности

Ещё одна частая ошибка — ожидать, что Product Security “отвечает за всё плохое, что может случиться с продуктом”. Это нереалистично.

И, да, Product Security не заменяет Engineering, SRE, Compliance, Legal, Privacy, Fraud, Safety, IT Security или Corporate Security. Он должен соединять эти функции вокруг product risk, но ownership должен оставаться понятным.

Пример:

  • Engineering владеет кодом, архитектурой и исправлениями;
  • SRE/Platform владеют reliability, observability, production operations;

  • Product владеет roadmap и product decisions;

  • Legal/Privacy владеют юридическими и privacy obligations;

  • Compliance помогает с frameworks, audits, evidence;

  • Corporate Security защищает enterprise environment;

  • Product Security помогает определить product security risk, controls, engineering guardrails, assurance и response в продуктовой плоскости.

Зрелая модель — это не когда security owns everything. Зрелая модель — когда у каждого риска есть реальный owner, а Product Security помогает этому owner принять правильное инженерное решение.


!!! Главный тезис !!!

Если убрать все модные слова, останется простая мысль.

Software Engineering — это не “писать код”. Это строить и сопровождать программные системы во времени, под нагрузкой, в команде, с ограничениями и последствиями.

Security Software Engineering — это строить и сопровождать эти системы так, чтобы безопасность была не внешней проверкой, а внутренним свойством engineering flow.

Product Security — это практическая operating model этой идеи на уровне продукта: от требований и архитектуры до релиза, production, инцидентов, suppliers, evidence и постоянного улучшения.

Поэтому Product Security нельзя честно свести к AppSec, DevSecOps, Cloud Security, Threat Modeling или Secure SDLC. Это всё важные части. Но Product Security отвечает за связность: что защищаем, от кого, почему, где в архитектуре, какими controls, кто владелец, как проверяем, как исправляем и как не повторяем один и тот же класс ошибок.

В западном инженерном понимании сильный Product Security — это не “служба запрета релизов”. Это инженерная функция внутри Software Engineering, которая помогает продукту расти быстрее, но без накопления невидимого риска, который однажды может стать слишком дорогим.


P.S. Memento mori

Memento mori — латинское выражение, но напоминание универсальное: завтра действительно никому не гарантировано. Пока мы спорим о терминах, строим системы, закрываем уязвимости и улучшаем процессы, важно не потерять себя, близких и жизнь за пределами backlog. Хороший день — это не только день, где стало меньше technical debt, но и день, который был прожит осознанно. Будь собой, цени своих близких, проводи время с семьей и близкими!

Будь собой, цени своих близких, проводи время с семьей и близкими!

Источники и полезные материалы

Top comments (0)