DevSecOps: Обеспечение безопасности в конвейерах CD

Узнайте, как подход DevSecOps влияет на конвейер CD и состояние безопасности agile-команд разработчиков.

Juni Mukherjee Juni Mukherjee

Что такое DevSecOps?

Термином DevSecOps обозначается цикл разработки программного обеспечения (SDLC) с непрерывной поставкой, в котором особое внимание уделяется безопасности. DevSecOps опирается на наработки и рекомендации общего подхода DevOps. Применение ценностей DevOps при обеспечении безопасности ПО означает, что проверка безопасности становится активной, неотъемлемой частью процесса разработки. Традиционно безопасность рассматривалась как вторичная характеристика, что нередко приводило к плачевным последствиям. Специалисты по информационной безопасности часто подключаются к командам разработки ближе к завершению цикла SDLC. При всем благородстве их намерений обнаружить уязвимости в защите в самом конце цикла SDLC может быть очень неприятно.

Концепция DevSecOps предусматривает внедрение традиционных мер обеспечения безопасности как активной части рабочих процессов SDLC. Общая концепция DevOps дала нам такие процессы, как непрерывная интеграция (CI) и непрерывная поставка (CD). Эти процессы обеспечивают активное тестирование и проверку правильности кода в ходе agile-разработки. Аналогичным образом концепция DevSecOps предусматривает активный аудит безопасности и тестирование на проникновение в процессе aglie-разработки. Согласно концепции DevSecOps, безопасность необходимо встраивать в продукт еще в процессе разработки, а не внедрять на этапе готового продукта.

Ключ в замке | Atlassian CI/CD

Зачем использовать DevSecOps?

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

Принципы DevSecOps поощряют совместную работу и требуют передавать работу специалистам по безопасности как можно раньше. Ценность этого подхода становится очевидной при анализе времени цикла до и после его внедрения. До внедрения DevSecOps продукт может быть признан небезопасным в последнюю минуту, что приводит к множеству дорогостоящих итераций. После внедрения DevSecOps в продукт изначально встраиваются лучшие стандарты безопасности. Возможность обнаружить неожиданные проблемы в последнюю минуту сохраняется, однако вероятность такого исхода становится гораздо ниже.

Поэтому вопрос не столько в том, зачем применять DevSecOps, сколько в том, как успешно вести работу в эпоху DevSecOps. Для тех, кто скован по рукам и ногам традиционными мерами обеспечения безопасности, DevSecOps — это глоток свежего воздуха. Набор конкретных решений зависит от используемого технического стека и архитектуры. Универсального решения, разработанного авторитетной организацией, здесь не существует.

Продуманный подход к обеспечению безопасности повышает авторитет компании на рынке и вызывает доверие клиентов. Отсюда мы плавно переходим к тому, каким образом концепция DevSecOps связана с парадигмой непрерывности во всем.

DevSecOps и непрерывность во всем

Уязвимости безопасности могут существовать в библиотеках ПО с открытым исходным кодом (OSS), которые мы импортируем, равно как и в коде, который мы пишем сами. Тысячи разработчиков программируют каждый день, а ручные проверки кода не масштабируются. Вот на этом этапе и требуется истинная мощь DevSecOps.

DevSecOps и непрерывность во всем — две стороны одной медали. В сочетании с парадигмой непрерывности во всем DevSecOps способствует непрерывному обеспечению безопасности программных продуктов.

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

Модульное тестирование и статический анализ кода выполняются предельно близко к исходному коду, при этом проверки проводятся без исполнения самого кода. Помните: в тестовой среде стоимость исправления дефектов остается минимальной, в промежуточной среде становится средней, а в рабочей — максимальной. Поэтому не жалейте средств на модульное тестирование и статический анализ безопасности. Такие проверки обходятся дешево, выполняются быстро и позволяют избежать проблем на следующих этапах конвейера.

Внедрение непрерывной безопасности: модульное тестирование

Первый этап реализации непрерывной безопасности — это внедрение модульных тестов безопасности.

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

SAST

Статические анализаторы кода обнаруживают не только отклонения от рекомендаций в области программирования, но и уязвимости безопасности в коде, а также в потенциально небезопасных импортируемых библиотеках. Такой подход называется тестированием безопасности со статическим анализом (SAST). С помощью современных инструментов его можно эффективно интегрировать в конвейер непрерывной поставки. Всегда используйте сканер SAST, совместимый с выбранным языком программирования.

Обратите внимание: SAST часто выдает ложноположительные результаты, поэтому необходимо спланировать уровень постоянного хранения таким образом, чтобы конвейер мог их «запоминать». Ложноположительные результаты могут привести к тому, что разработчики вообще перестанут реагировать на уведомления об ошибках в конвейере, а это опасно. Если вы после проверки определили некую ошибку как ложноположительную, не позволяйте конвейеру выдавать эту ошибку повторно. Иначе это может привести к тому, что команда отключит SAST или будет игнорировать все ошибки SAST на конвейере.

DAST

Слабосвязанные компоненты составляют подсистему. Подсистемы могут развертываться и тестироваться на наличие уязвимостей безопасности с помощью подхода DAST (тестирование безопасности с динамическим анализом). В отличие от SAST, средства DAST анализируют приложение извне в его рабочем состоянии, подобно настоящему злоумышленнику. Сканеры DAST могут не зависеть от конкретных языков, поскольку они взаимодействуют с приложением извне.

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

DevSecOps — будущее безопасности

Сегодня обеспечение безопасности (как и качества) — обязанность каждого. Не позволяйте доморощенным экспертам ввести вас в заблуждение. Корпорации и руководители, которые позволили себя убедить и продолжили практиковать реактивные подходы, столкнулись с неприятными последствиями и были вынуждены тратить средства на обновление стратегии безопасности.

Традиционно специалисты по безопасности работают в отдельных подразделениях, возможности которых ограничены количеством их сотрудников. Внедрите вместо этого децентрализованный agile-подход DevSecOps и научите команды самостоятельно управлять своей судьбой. Кроме того, наделите команды разработчиков продукта ответственностью, чтобы между ними и отделом информационной безопасности не возникало путаницы.

Сообщество DevSecOps активно развивается, и в этих условиях обеспечение безопасности — не только приоритетная задача бизнеса, но и самая актуальная и ценная задача для внедрения в контейнер непрерывной поставки. Эффективное сочетание непрерывности и безопасности обещает нам прекрасное будущее в сфере поставки программного обеспечения.