Сегодня в мире информационных технологий существует множество различных практик и методологий. Одной из таких методологий является DevSecOps. В данной статье мы поговорим о том, что такое DevSecOps, как организованы ее процессы, какие инструменты используются при внедрении практик DevSecOps, а также почему и когда бизнесу необходимо внедрять и использовать DevSecOps.
DevSecOps (сокращение от трех слов — development (разработка), security (безопасность) и operations (эксплуатация или операции)) — методология, основанная на безопасной разработке приложений путем внедрения инструментов безопасности для защиты непрерывной интеграции, непрерывной доставки и непрерывного развертывания программного обеспечения, используя модель DevOps.
Ранее, до появления методологии DevSecOps, тестирование программного обеспечения на безопасность, как правило, происходило в самом конце процесса, уже после того, как продукт был выпущен. DevSecOps кардинально меняет данный подход путем внедрения практик безопасности на каждом этапе разработки, а не только на этапе, когда разрабатываемый продукт уже выпущен. Данный подход существенно повышает безопасность процесса разработки и позволяет обнаруживать большее число уязвимостей.
Методология DevSecOps не заменяет существующие модель и процессы DevOps, а лишь внедряет дополнительные инструменты в каждый этап. Так же, как и DevOps, модель DevSecOps опирается на высокую степень автоматизации.
Несмотря на то, что DevOps и DevSecOps максимально похожи (последняя даже использует ту же модель разработки, что и DevOps, и в целом полагается на сами процессы DevOps), между ними присутствует главное различие, которое заключается в том, что методология DevOps делает упор на выстраивание эффективных процессов между командами разработки, тестирования и эксплуатации для достижения непрекращающейся и стабильной доставки приложений, а DevSecOps занимается исключительно внедрением инструментов безопасности.
В то время как DevOps-практики сосредоточены на исправлении ошибок при разработке, регулярном выпуске обновлений и сокращении жизненного цикла разработки, DevSecOps обеспечивает информационную безопасность.
Так как DevSecOps полностью опирается на DevOps, то используются те же этапы, что и в модели DevOps. Различия заключается в предпринимаемых шагах в контексте безопасности и используемых инструментах. Каждый используемый инструмент внедряется и используется строго на своем этапе. Рассмотрим данные этапы и меры безопасности, используемые на каждом из них.
Любая разработка начинается с планирования будущего проекта, включая его архитектуру и функционал. Методология DevSecOps не является исключением. На этапе планирования происходит разработка требований в контексте безопасности будущего проекта. Сюда относят моделирование угроз, анализ и предварительную оценку степени безопасности, обсуждение используемых инструментов безопасности.
На этапе написания кода приложения происходит интеграция средств типа SAST.
SAST (Static Application Security Testing, статический анализ кода, также известный как тестирование «белого ящика») — процесс тестирования приложений на безопасность путем поиска уязвимостей и проблем безопасности в исходном коде. При этом само приложение не запускается; анализируется только его исходный код. Также SAST полагается на соответствие руководствам и стандартам по написанию кода.
Использование инструментов SAST помогает найти и существенно снизить возможные уязвимости на самом раннем этапе разработки.
На этом этапе происходит процесс сборки программы из исходного кода в исполняемый файл, и на выходе появляется артефакт, готовый к дальнейшему запуску. После того как программа была собрана, необходимо проверить ее внутренний функционал. Здесь на помощь приходят инструменты типа DAST.
DAST (Dynamic Application Security Testing, динамическое тестирование, также известное как тестирование методом «черного ящика») — процесс тестирования функциональности уже собранного и готового приложения путем имитации реальных атак на само приложение. Главное отличие от SAST заключается в том, что DAST не анализирует исходный код приложения (исходный код даже и не требуется), а сосредоточен исключительно на функциях готового приложения.
На этапе тестирования в методологии DevSecOps упор делается не только на стандартные тесты, к которым относят автоматические тесты, функциональные тесты и тесты конфигурации приложений, но также на тестирование в парадигме безопасности. Сюда относят:
тестирование на проникновение (он же «пентест»),
регрессионное тестирование,
сканирование на наличие уязвимостей.
Цель тестирования заключается в поиске как можно большего числа уязвимостей перед отправкой и развертыванием финальной версии продукта в production-среде.
После того как тестирование продукта было полностью завершено, готовится его релиз и выкатка на «боевые», т.е. production, серверы. На этом этапе роль безопасности заключается в подготовке учетных записей пользователей для доступа к серверам и необходимым компонентам (мониторинг, системы сбора логов, веб-интерфейсы сторонних систем), а также в назначении необходимых прав доступа, настройке firewall или других систем безопасности.
На этапе развертывания продолжается проверка безопасности, которая теперь уже затрагивает среды, на которых происходит выкатка и установка продукта. Дополнительно проверяется конфигурация и политики безопасности.
После того как релиз был успешно выпущен, начинается процесс отслеживания работоспособности выпущенного продукта. Также происходит мониторинг инфраструктуры, причем не только production-окружений, но и тестовых сред и сред разработки. Помимо отслеживания ошибок системы, процесс DevSecOps применяется для отслеживания возможных проблем безопасности при помощи таких программ и инструментов, как системы обнаружения вторжений, WAF (web application firewall, файрвол веб-приложений), межсетевые экраны. Для сбора инцидентов используются SIEM-системы.
В процессах DevSecOps используются разнообразные инструменты, которые значительно повышают уровень безопасности разрабатываемых приложений и используемой инфраструктуры. Внедряемые инструменты производят автоматические тестирования новых фрагментов кода, которые добавляются в систему. Помимо обширного использования коммерческих продуктов, также используются и open-source-решения, некоторые из которых поддерживают расширенный функционал.
Как правило, все используемые инструменты подразделяются на следующие категории.
Инструменты для статического анализа кода: SonarQube, Semgrep, Checkstyle, Solar appScreener. С более полным списком инструментов для статического анализа можно ознакомиться по ссылке.
Инструменты для динамического тестирования: Aikido Security, Intruder, Acunetix, Checkmarx DAST. С более полным списком инструментов для динамического тестирования можно ознакомиться по ссылке.
Инструменты для моделирования угроз: Irius Risk, Pirani, GRC Toolbox, MasterControl Quality Excellence. С более полным списком инструментов для моделирования угроз можно ознакомиться по ссылке.
Инструменты для выполнения анализа на этапе сборки: OWASP Dependency-Check SourceClear, Retire.js, Checkmarx.
Инструменты для сканирования образов Docker на наличие уязвимостей: Clair, Anchore, Trivy, Armo.
Инструменты для обеспечения безопасности сред развертывания: Osquery, Falco и Tripwire.
Перед использованием практик DevSecOps в вашей компании стоит отметить, что данный процесс не происходит одномоментно, а имеет достаточно длительный срок внедрения, который должен быть тщательно продуман и спланирован. Перед внедрением DevSecOps убедитесь, что ваша компания соответствует следующим критериям:
В штате присутствует многочисленная команда разработчиков.
Разработка ведется по модели DevOps.
Обширно используется автоматизация в процессах разработки.
Приложения разрабатываются по принципу микросервисной архитектуры.
Разработка ориентирована на быстрый выпуск продукта на рынок (Time To Market).
Процесс внедрения DevSecOps сводятся к следующим основным этапам.
На данном этапе производится уведомление участников проекта с целью рассказать и донести основные идеи использования методологии DevSecOps. Важно познакомить ваших сотрудников с новой практикой безопасности, рассказать об основных преимуществах модели DevSecOps и как она помогает решать проблемы безопасности. В качестве ознакомления можно провести семинары или воспользоваться специальными курсами.
На данном этапе необходимо убедиться, что в команде отлажены процессы DevOps и широко используется автоматизация. Также необходимо понимать текущие процессы разработки вашего продукта, выявить проблемы безопасности, при необходимости провести моделирование угроз и сделать оценку возможных потенциальных уязвимостей.
На данном этапе решаются вопросы, связанные с тем, какие инструменты будут использоваться, как будет выстроен процесс безопасности и как он будет интегрирован с существующим процессом разработки.
После того как этапы ознакомления и планирования были успешно пройдены, можно приступать к пилотному внедрению практик DevSecOps. Начинать внедрение стоит в небольших командах и в небольших проектах. Так вы сможете быстрее и эффективнее получить предварительную оценку для последующих внедрений в более объемные проекты и команды, постепенно увеличивая масштаб использования DevSecOps. Также необходимо постоянно проводить мониторинг процессов DevSecOps, выявлять проблемы и ошибки, которые возникают в процессе внедрения. Каждый член команды может предоставлять обратную связь и вносить свои предложения в развитие и улучшение использования практик DevSecOps.
Основное преимущество внедрения методологии DevSecOps для бизнеса заключается в экономии времени и средств, связанных с тестированием разрабатываемых приложений отделом информационной безопасности. Также DevSecOps гарантирует большую степень защиты от возникновения возможных проблем безопасности.
Помимо этого, при использовании DevSecOps выделяют следующие преимущества.
При использовании методологии DevSecOps инструменты безопасности внедряются на каждом этапе разработки, а не после фактического выпуска продукта. Благодаря этому возрастают шансы на обнаружение угроз безопасности на самых ранних этапах разработки.
Для того чтобы ускорить выпуск продукта по системе time to market, процессы DevSecOps можно автоматизировать. Благодаря этому не только уменьшается время выпуска нового продукта, но и сокращается количество человеческих ошибок.
Данное требование особо актуально при разработке банковских, финансовых и иных систем с чувствительной информацией, а также для компаний, работающих с большими данными. Также важно учитывать законодательную базу в отдельных странах, если продукт разрабатывается для страны, в которой существуют свои регламенты по обеспечению безопасности обработки и хранения пользовательских данных. Можно привести пример регламента GDPR (General Data Protection Regulation, общий регламент по защите данных), который используется в странах Европейского Союза.
Методология DevSecOps глубже знакомит команды разработки и эксплуатации с инструментами и методами по обеспечению безопасности, тем самым расширяя знания, навыки и экспертизу.
В качестве причин по использованию методологии DevSecOps для бизнеса выступают следующие аргументы.
Сюда относят уязвимости и проблемы безопасности, связанные непосредственно с исходным кодом для разрабатываемых приложений. Исходный код — это фундамент любой программы. В тысячах и десятках тысяч строк исходного кода могут содержаться различные уязвимости, которые должны быть найдены и устранены.
Одним из важнейших условий при использовании DevOps является использование конвейеров для сборки и тестирования разрабатываемых продуктов, а также для сборки готовых пакетов. Проблемы безопасности могут поджидать абсолютно на любом этапе конвейера.
Это проблемы, связанные с использованием сторонних компонентов (зависимостей) при разработке. Сюда включают библиотеки, программные компоненты, скрипты, образы контейнерных приложений.
Проблемы безопасности в системах и инфраструктуре доставки приложений. Сюда относят как и собственную инфраструктуру, так и облачные компоненты.
Методология DevSecOps существенно помогает повысить уровень безопасности в ваших процессах DevOps. Сама модель не изменяет уже существующую концепцию модели DevOps; вместо этого она дополняет ее практиками по обеспечению непрерывной безопасности. Также стоит отметить, что DevSecOps явно не указывает, какие инструменты стоит использовать, что полностью обеспечивает свободу при принятии решений.
Грамотно выстроенный процесс DevSecOps в вашей компании поможет существенно снизить риски безопасности, а также ускорить выпуск разрабатываемых продуктов на рынок.