Что такое DevSecOps?
Что означает DevSecOps?¶
DevSecOps означает разработку (Dev), информационную безопасность (Sec) и операционную деятельность (Ops). Это расширенная практика DevOps. Каждый термин определяет разные роли и обязанности команд разработчиков программного обеспечения при создании программных приложений. То есть в рамках этой модели работает Shift Left парадигма: проверки защищенности продуктов перемещаются как можно ближе к началу разработки, и безопасность становится неотъемлемой частью этого процесса.
Разработка¶
Разработка — это процесс планирования, кодирования, создания и тестирования приложения.
Безопасность¶
Безопасность означает внедрение системы безопасности на более ранних этапах цикла разработки программного обеспечения. Например, программисты следят за тем, чтобы код не содержал уязвимостей безопасности, а специалисты по безопасности тестируют программное обеспечение еще до того, как компания выпустит его.
Эксплуатация¶
Операционная группа выпускает, отслеживает и устраняет любые проблемы, возникающие в программном обеспечении.
Главный девиз DevSecOps:
Разработка ПО. Безопаснее. Быстрее
Почему настолько важна практика DevSecOps?¶
Цель DevSecOps – помочь командам разработчиков эффективно решать проблемы безопасности. Это альтернатива старым методам обеспечения безопасности программного обеспечения, при использовании которых было сложно уложиться в сжатые сроки и не отставать от частых обновлений программного обеспечения. Чтобы понять важность DevSecOps, мы кратко рассмотрим процесс разработки программного обеспечения.
Жизненный цикл разработки программного обеспечения¶
Жизненный цикл разработки программного обеспечения (SDLC) — это структурированный процесс, который помогает командам разработчиков программного обеспечения создавать высококачественные приложения. Команды разработчиков программного обеспечения используют SDLC для снижения затрат, минимизации ошибок и обеспечения постоянного соответствия программного обеспечения целям проекта. В жизненном цикле разработки программного обеспечения команды разработчиков программного обеспечения проходят следующие этапы:
- Анализ требований
- Планирование
- Архитектурное проектирование
- Разработка программного обеспечения
- Тестирование
- Развертывание
DevSecOps в SDLC¶
В традиционных методах разработки программного обеспечения тестирование безопасности было отдельным процессом от SDLC. Команда безопасности обнаружила недостатки безопасности только после сборки программного обеспечения. Платформа DevSecOps улучшает SDLC, обнаруживая уязвимости в процессе разработки и доставки программного обеспечения.
В чем преимущества DevSecOps?¶
Практика DevSecOps дает несколько преимуществ.
Раннее обнаружение уязвимостей в программном обеспечении¶
Команды разработчиков программного обеспечения сосредоточены на контроле безопасности на протяжении всего процесса разработки. Они не дожидаются, когда будет создано все приложение, а проводят проверки на каждом этапе его создания. Команды разработчиков программного обеспечения могут выявлять проблемы безопасности на ранних этапах и сокращать затраты и время на устранение уязвимостей. В результате после создания приложения пользователи наблюдают минимальные сбои и повышенную безопасность.
Сокращение времени выхода на рынок¶
С помощью DevSecOps команды разработчиков программного обеспечения могут автоматизировать тестирование безопасности и сократить количество человеческих ошибок. Благодаря этому оценка безопасности не становится узким местом в процессе разработки.
Соответствуйте нормативным требованиям¶
Команды разработчиков программного обеспечения используют DevSecOps для соблюдения нормативных требований, внедряя профессиональные методы и технологии безопасности. Они определяют требования к защите данных и безопасности в системе. Например, команды разработчиков программного обеспечения используют AWS Security Hub для автоматизации проверок безопасности на соответствие отраслевым стандартам.
Создайте культуру безопасности¶
Команды разработчиков программного обеспечения глубже знакомятся с рекомендациями по безопасности при разработке приложения. Они более активно выявляют потенциальные проблемы безопасности в коде, модулях ли других технологиях, используемых для создания приложения.
Безопасная разработка новых функций¶
DevSecOps поощряет гибкое сотрудничество между командами разработчиков, эксплуатации и подразделениями обеспечения безопасности. Они разделяют единое понимание безопасности программного обеспечения и используют общие инструменты для автоматизации оценки и отчетности. Все сосредоточены на том, чтобы повысить ценность для клиентов без нанесения ущерба безопасности.
Как работает DevSecOps?¶
Чтобы внедрить DevSecOps, команды разработчиков программного обеспечения должны сначала внедрить DevOps и непрерывную интеграцию.
DevOps¶
Культура DevOps – это практика разработки программного обеспечения, объединяющая команды разработки и эксплуатации. Она использует инструменты и автоматизацию для обеспечения более тесного сотрудничества, коммуникации и прозрачности между двумя командами. В результате компании сокращают время разработки программного обеспечения, сохраняя при этом гибкость для реагирования на изменения.
Непрерывная интеграция¶
Непрерывная интеграция и непрерывная доставка (CI/CD) – это современная практика разработки программного обеспечения, которая использует автоматизированные этапы сборки и тестирования для надежного и эффективного внесения небольших изменений в приложение. Разработчики используют инструменты CI/CD для выпуска новых версий приложения и быстрого реагирования на проблемы после того, как приложение становится доступным для пользователей. Например, AWS CodePipeline – это инструмент, который можно использовать для развертывания приложений и управления ими.
DevSecOps¶
DevSecOps включает в практику DevOps безопасность, интегрируя ее оценку во все этапы процесса CI/CD. Это делает безопасность обязательной для всех членов команды, участвующих в создании программного обеспечения. Команда разработчиков начинает совместную работу с подразделением по обеспечению безопасности до начала написания кода. Аналогичным образом, группы специалистов по эксплуатации продолжают отслеживать программное обеспечение на предмет уязвимостей безопасности после его развертывания. В результате компании быстрее поставляют защищенное программное обеспечение, обеспечивая соответствие требованиям.
Сравнение DevSecOps и DevOps¶
Основная задача DevOps – как можно быстрее вывести приложение на рынок. В DevOps тестирование безопасности – это отдельный процесс, который проводится на последнем этапе разработки приложения, непосредственно перед его развертыванием. Обычно тестированием и обеспечением безопасности программного обеспечения занимается отдельная команда. Например, подразделения по обеспечению безопасности настроили брандмауэр для тестирования вторжения в приложение после его сборки.
В свою очередь, в DevSecOps тестирование безопасности входит в процесс разработки приложений. Подразделения по обеспечению безопасности и разработчики совместно защищают пользователей от уязвимостей в программном обеспечении. Например, подразделения по обеспечению безопасности устанавливают брандмауэры, программисты разрабатывают код для предотвращения уязвимостей, а тестировщики тестируют все изменения, чтобы предотвратить несанкционированный доступ третьих лиц.
Из каких компонентов состоит DevSecOps?¶
Успешная реализация практики DevSecOps подразумевает следующие компоненты.
Анализ кода¶
Анализ кода – это процесс исследования исходного кода приложения на предмет уязвимостей и обеспечение его соответствия передовым практикам безопасности.
Управление изменениями¶
Команды разработчиков программного обеспечения используют инструменты управления изменениями для отслеживания изменений, связанных с программным обеспечением или требованиями, управления ими и создания соответствующей отчетности. Благодаря этому предотвращается возникновение непреднамеренных уязвимостей безопасности из-за изменений в программном обеспечении.
Управление соответствием¶
Команды разработчиков программного обеспечения обеспечивают соответствие программного обеспечения нормативным требованиям. Например, разработчики могут использовать AWS CloudHSM для демонстрации соответствия требованиям к безопасности, конфиденциальности и защите от несанкционированного доступа, таким как HIPAA, FedRAMP и PCI.
Моделирование угроз¶
Команды DevSecOps изучают проблемы безопасности, которые могут возникнуть до и после развертывания приложения. Они устраняют все известные проблемы и выпускают обновленную версию приложения.
Обучение безопасности¶
Обучение безопасности означает обучение разработчиков программного обеспечения и операционных групп новейшим рекомендациям по безопасности. Таким образом, команды разработки и эксплуатации могут принимать независимые решения по безопасности при создании и развертывании приложения.
Что такое культура DevSecOps?¶
Культура DevSecOps сочетает в себе взаимодействие, людей, технологии и процессы.
Связь¶
Компании внедряют DevSecOps, вводя культурные изменения, которые начинаются с верхнего уровня. Руководители высшего звена объясняют команде DevOps важность и преимущества внедрения методов обеспечения безопасности. Для внедрения практик DevSecOps Разработчикам программного обеспечения и операционным командам требуются соответствующие инструменты, системы и поддержка.
Сотрудники¶
DevSecOps приводит к культурной трансформации, в которой участвуют команды разработчиков программного обеспечения. Разработчики программного обеспечения больше не выполняют обычных функций по созданию, тестированию и развертыванию кода. Когда используется подход DevSecOps, разработчики программного обеспечения и специалисты по эксплуатации тесно сотрудничают с экспертами по безопасности, повышая безопасность каждого этапа процесса разработки.
Эффективное взаимодействие между ними, управление и продуктивное функционирование процесса обеспечивает целая команда специалистов. Все ее участники важны и ценны, каждый из них имеет собственную роль.
Вот так выглядит идеальная команда DevSecOps
Менеджмент
Это то самое подразделение, с которого начинается проект. Оно планирует и организовывает всю работу, соблюдая при этом баланс между внешними и внутренними потребностями компании. Команда менеджмента разрабатывает стратегию и тактику проекта, распределяет бюджет, связывает отделы между собой, обеспечивает им условия для продуктивной совместной работы и техническую поддержку, контролирует бизнес-процессы, ищет возможности для масштабирования.
В команду менеджмента могут входить руководители трех основных направлений, которые реализуют проект по DevSecOps. За подразделение ИТ отвечает директор по информационным технологиям (CIO). Он организовывает рабочие процессы, планирует бюджет, управляет персоналом, оценивает эффективность команды. Его роль состоит в том, чтобы разрабатывать технологические стратегии проектов и реализовывать их.
Технической частью в компании руководит технический директор (CTO). Он управляет всем, что связано с разработкой, софтом, серверами, отвечает за общий вектор развития проектов организации. Его задача — совершенствовать технологии, повышать их эффективность и за счет этого увеличивать прибыль компании.
Направлением ИБ руководит директор по информационной безопасности (CISO). В рамках подразделения он организует бизнес-процессы и управляет ими, разрабатывает политику и стратегию компании, планирует бюджет и мероприятия по обеспечению безопасности, формирует рабочие процессы и контролирует их продуктивность.
Product Owner
Чем занимается? Это драйвер проекта от бизнеса, который берет на себя роль заказчика. Он управляет бэклогом и дорожной картой продукта, определяет основные направления развития концепции, защищает ее перед высшим руководством, назначает верхнеуровневые приоритеты для всех этапов. От него зависит, в какой последовательности будут выполняться задачи. Также Product Owner формирует требования к функциональности. Именно он создает в организации команду безопасности программного обеспечения, известную как Software Security Group (SSG), привлекает ресурсы и обеспечивает эффективное взаимодействие подразделений на разных уровнях внутри компании.
Руководитель проекта
Чем занимается? Руководитель проекта отвечает за коммуникацию между подразделениями, подрядчиками, владельцем продукта (Product Owner) и другими заинтересованными людьми. Он ставит цели для спринтов, руководит процессами и людьми в команде, следит за соблюдением сроков и задач. Знает все неподвластные другим должностям нюансы открытия и закрытия проектов, владеет магией поддержания участников процесса в тонусе.
Разработка
Эта команда занимается непосредственно разработкой продуктов. Внутри нее есть разные позиции, которые отвечают за создание и развитие ПО на различных этапах его жизненного цикла.
Team Lead
Чем занимается? По факту это руководитель команды разработчиков. Он отвечает за реализацию функционала, приоритезацию и распределение задач между разработчиками. Просто помимо обычных задач программиста, у него еще достаточно много менеджерской работы. Поэтому несмотря на то, что Team Lead также является одним из ведущих разработчиков, собственно на кодинг у него остается не более 20-30% времени. Он должен знать специфику команды, бизнеса и создаваемых продуктов, а такжы быть погруженным в процессы. Важно, чтобы кандидат обладал управленческими способностями, коммуникативными навыками и умением наладить контакт с коллегами из разработки и из других отделов.
Разработчик
Чем занимается? Разрабатывает систему, пишет код, работает по проанализированным задачам от аналитика (в идеале). Приоритет его задач определяется тимлидом.
Тестировщик
Чем занимается? QA инженер, или тестировщик, выполняет функциональное тестирование продукта. Он почти никогда не проверяет продукт на безопасность. Есть отличие в том, что тестировщики занимаются тестированием готового продукта, а QA-инженеры следят за качеством продукта на этапах разработки, чтобы не было ошибок и багов, тем самым повышая качество продукта. Как QA инженер, так и тестировщик должен изучать требования к программе у заказчика и следить за их выполнением, проводить тестирование на наличие недочетов, составлять отчеты, следить за исправлением багов.
DevOps-инженер
Чем занимается? Помогает команде разработки выстраивать и автоматизировать процессы тестирования, сборки и деплоя приложения в нескольких средах (dev / UAT / test / preprod/ prod). Снимает с разработчиков лишнюю ручную работу.
Администратор
Чем занимается? Сопровождает и поддерживает работоспособность всех прикладных систем, компьютеров, приложений и так далее. Отвечает за инфраструктуру и сетевые взаимодействия. Может помогать DevOps-инженерам с развертыванием.
Команда безопасности ПО (SSG)
Эта группа специалистов отвечает за обеспечение безопасности ПО. Она повышает уровень защищенности программных продуктов (приложений, цифровых сервисов и других разработок), наращивает экспертизу в рамках заданного технологического стека, организует DevSecOps-фабрики по производству ПО, управляет знаниями в командах разработки.
AppSec-аналитик
Чем занимается? Выполняет моделирование угроз, анализирует внешние и внутренние требования ИБ и формирует критерии для разрабатываемого ПО. Проводит ревью конечного технического задания на соответствие ранее определенным параметрам, отвечает за поддержание безопасности ПО на рекомендуемом уровне, помогает команде с формированием и разбором дефектов и, конечно, консультирует коллег из ИТ-департамента в процессе разработки.
AppSec-инженер
Чем занимается? Настраивает инструменты в конвейере DevSecOps, осуществляет триаж дефектов, определяет параметры автоматических проверок качества продукта для каждого этапа разработки. Также в его ведении находятся разбор бэклога дефектов и помощь команде в работе с ними.
Он регулярно консультирует коллег из ИТ-департамента в процессе разработки и участвует в анализе метрик конвейера для оценки эффективности практик, принимает решения о внедрении новых инструментов.
ИБ-евангелист
Чем занимается? Конечно, ИБ-евангелист — это не должность, а особая роль. Она заключается в создании сильной культуры безопасности и ее развитии. На позицию ИБ-евангелиста подойдет сотрудник, который глубоко заинтересован сферой безопасности, обладает широкими техническими знаниями, лидерскими качествами и навыками проведения презентаций. Это технический, идеологический и методологический эксперт в области безопасности ПО, который работает со всеми заинтересованными сторонами, включая руководство компании, SSG, команды разработки и клиентов.
Каждый участник в команде для внедрения DevSecOps — отдельная деталь, которая выполняет собственную роль, важную для всего процесса. Если кого-то исключить, «конструктор» поломается, а значит будет работать не так эффективно, как нужно.
Технологии¶
Команды разработчиков программного обеспечения используют технологии для автоматического тестирования безопасности во время разработки. Команды DevOps используют его для проверки приложения на наличие недостатков безопасности без продления сроков доставки.
Обработка¶
DevSecOps меняет традиционный процесс создания программного обеспечения. С помощью DevSecOps команды разработчиков программного обеспечения проводят тестирование и оценку безопасности на каждом этапе разработки. Разработчики программного обеспечения проверяют приложения на наличие уязвимостей безопасности при написании кода. Затем подразделение по обеспечению безопасности тестирует предварительную версию приложения на наличие уязвимостей безопасности. Например, может проводиться проверка следующих аспектов.
- Авторизация, чтобы пользователи получали доступ только к тому, что им необходимо.
- Проверка ввода, чтобы программное обеспечение работало корректно при получении аномальных данных.
Затем команды разработчиков программного обеспечения исправляют любые недостатки, прежде чем выпускать окончательное приложение для конечных пользователей.
Тестирование безопасности не заканчивается после запуска приложения. Операционная группа продолжает отслеживать потенциальные проблемы, вносить поправки и работать над выпуском обновленных версий приложения с подразделением по обеспечению безопасности и c командой разработчиков. Например, они могут использовать Amazon CodeGuru Reviewer для обнаружения уязвимостей безопасности, раскрытых секретных ключей, утечек ресурсов, проблем параллелизма, неправильной проверки ввода и отклонений от рекомендаций по использованию API и SDK AWS.
Каковы передовые практики DevSecOps?¶
Компании используют следующие подходы для поддержки цифровой трансформации с помощью DevSecOps.
Сдвиг влево¶
Сдвиг влево – это процесс проверки уязвимостей на ранних этапах разработки программного обеспечения. Следуя этому процессу, команды разработчиков программного обеспечения могут еще при создании приложения предотвратить проблемы безопасности, которые не были обнаружены. Например, в процессе DevSecOps разработчики создают безопасный код.
Сдвиг вправо¶
Сдвиг вправо указывает на важность сосредоточения внимания на безопасности после развертывания приложения. Некоторые уязвимости могут остаться незамеченными при предыдущих проверках безопасности и стать очевидными только тогда, когда клиенты уже используют программное обеспечение.
Используйте автоматизированные инструменты безопасности¶
Командам DevSecOps может потребоваться вносить несколько изменений в день. Для этого им необходимо интегрировать инструменты сканирования безопасности в процесс CI/CD. Это предотвращает замедление разработки при оценке безопасности.
Повышайте осведомленность о безопасности¶
Компании вводят осведомленность о безопасности в число своих основных ценностей при создании программного обеспечения. Каждый член команды, участвующий в разработке приложений, должен нести ответственность за защиту пользователей программного обеспечения от угроз безопасности.
Какие инструменты DevSecOps наиболее распространены?¶
Команды разработчиков программного обеспечения используют следующие инструменты DevSecOps для оценки недочетов в безопасности во время разработки программного обеспечения, их обнаружения и оповещения о них.
Статическое тестирование безопасности приложений (SAST)¶
Инструменты статического тестирования безопасности приложений (SAST) анализируют и находят уязвимости в проприетарном исходном коде.
Анализ состава программного обеспечения¶
Анализ состава программного обеспечения (SCA) – это процесс, который автоматизирует обеспечение видимости использования программного обеспечения с открытым исходным кодом (OSS) с целью управления рисками, обеспечения безопасности и соответствия лицензиям.
Интерактивное тестирование безопасности приложений¶
Команды DevSecOps используют интерактивные инструменты тестирования безопасности приложений (IAST) для оценки потенциальных уязвимостей приложения в рабочей среде. IAST состоит из специальных мониторов безопасности, которые запускаются из приложения.
Динамическое тестирование безопасности приложений (DAST)¶
Инструменты динамического тестирования безопасности приложений (DAST) имитируют хакеров, тестируя безопасность приложения извне сети.
Что такое DevSecOps при гибкой разработке?¶
Agile
– это образ мышления, который помогает командам разработчиков программного обеспечения эффективнее создавать приложения и реагировать на изменения. Раньше команды разработчиков программного обеспечения создавали систему целиком в несколько этапов, которые не отличались гибкостью. В гибкой инфраструктуре команды разработчиков программного обеспечения работают в непрерывном циклическом рабочем процессе. Они используют гибкие процессы для постоянного сбора обратной связи и улучшения приложений в течение коротких итеративных циклов разработки.
Сравнение DevSecOps с гибкой разработкой¶
DevSecOps и гибкая разработка не исключают друг друга. Гибкая разработка позволяет команде разработчиков программного обеспечения быстро реагировать на запросы на изменение. В то же время DevSecOps внедряет методы безопасности в каждый итеративный цикл гибкой разработки. С помощью DevSecOps команда разработчиков программного обеспечения может создавать более безопасный код, используя гибкие методы разработки.
Какие сложности возникают при внедрении DevSecOps?¶
При внедрении DevSecOps в свои команды разработчиков программного обеспечения компании могут столкнуться со следующими проблемами.
Сопротивление изменениям в культурной парадигме¶
Команды разработчиков программного обеспечения и подразделения по обеспечению безопасности уже много лет следуют традиционным методам создания программного обеспечения. Быстрое внедрение образа мышления DevSecOps может оказаться очень трудным для компаний. Команды разработчиков программного обеспечения сосредоточены на создании, тестировании и развертывании приложений. Тем временем подразделения по обеспечению безопасности сосредоточены на обеспечении безопасности приложения. Поэтому руководству высшего звена необходимо, чтобы обе команды были одинаково осведомлены о важности методов обеспечения безопасности программного обеспечения и своевременной доставки.
Интеграция сложных инструментов¶
Команды разработчиков программного обеспечения используют различные типы инструментов для создания приложений и тестирования их безопасности. Интеграция инструментов разных поставщиков в процесс непрерывной поставки – сложная задача. Традиционные сканеры безопасности могут не поддерживать современные методы разработки.
Подводя итог¶
Сдвиг безопасности влево предполагает, что вопросы безопасности рассматриваются всей командой на каждой стадии цикла разработки. При использовании практик DevOps итерации жизненного цикла происходят часто, а значит вам и вашей команде будет регулярно поступать информация о поведении вашего ПО и о том, как его используют в реальном мире. Внедрение аспектов безопасности в ваш CI/CD-пайплайн подразумевает, что вы регулярно получаете обратную связь по безопасности вашего приложения и можете вводить необходимые улучшения точно так же, как вводите другую функциональность.
Выявляя известные уязвимости и обеспечивая защиту от них, вы по крайней мере не будете отставать от злоумышленников. Относясь к каждой найденной уязвимости как к обычной ошибке, которую нужно отследить, исправить и протестировать, вы со временем сделаете ваше ПО более устойчивым.
В конце концов, DevOps (а значит и DevSecOps) — это не только инструменты и процессы, позволяющие осуществлять быструю и частую доставку ПО, но и особая культура. Все это возможно только благодаря людям. Если вы хотите включить вопросы безопасности в цикл разработки ПО, важно создать культуру разделения ответственности и никогда не обвинять конкретных людей. У каждого должна быть возможность поднять вопрос безопасности и быть услышанным — будь то во время планирования спринта, код-ревью, ручного тестирования или уже после запуска системы в продакшне. И каждый может сыграть свою роль в оценке важности безопасности и в ее реализации.