Введение
В настоящей статье рассматривается подход к построению кибербезопасной архитектуры веб-приложения. Статья прежде всего будет полезна руководителям ИТ, внедряющих веб-приложения, а также широкому кругу читателей, интересующихся вопросами кибербезопасности веб-приложений. Вначале будут рассмотрены компоненты, необходимые для построения современного высоконагруженного веб-приложения, а затем основные угрозы. Также будут разобраны проактивные аспекты безопасности и требования кибербезопасности на основе проектов OWASP. За рамками статьи остаются организационные вопросы, связанные с защитой DNS-записей и защитой доступа к облачной инфраструктуре, на которой, возможно, будет разворачиваться веб‑приложение. Некоторые основные компоненты мы рассмотрим обзорно только для понимания архитектуры веб-приложения, рекомендации по их защите расположены в других разделах Резбеза.
Кибербезопасная архитектура — это подход к проектированию информационных систем, который обеспечивает их защиту от угроз кибербезопасности.
Исходя из определения, перед нами стоят две основные задачи, которые необходимо решить:
- правильно спроектировать веб-приложение;
- определить требования кибербезопасности к разработке веб‑приложения.
Обзор архитектуры типового веб-приложения
Типовая архитектура веб-приложения включает множество компонентов, таких как серверы приложений, веб-серверы, балансировщики нагрузки, сети доставки контента (CDN), механизмы кэширования и базы данных (см. рис. 1).
Рисунок 1. Архитектура веб-приложения
Рассмотрим компоненты веб-приложения.
Компоненты серверной части:
- Веб-серверы. Веб-серверы обрабатывают первоначальный запрос от клиента и отвечают файлами в формате HTML, CSS, JavaScript или другими статическими файлами. Популярными веб‑серверами являются Apache HTTP Server и nginx.
- Серверы приложений. Серверы приложений обрабатывают генерацию динамического контента и определяют логику работы с данными веб-приложений. Они выполняют код, написанный на таких языках, как Python, Ruby, Java или PHP. Примерами таких серверов являются Apache Tomcat, Gunicorn и Unicorn.
- Балансировщики нагрузки. Балансировщики нагрузки распределяют входящий сетевой трафик между несколькими веб-серверами или серверами приложений для обеспечения эффективного использования ресурсов, повышения производительности и высокой доступности. Они могут быть программными (например, nginx) или аппаратными (например, F5 Big-IP).
- Механизмы кэширования. Механизмы кэширования, такие как Redis, memcached или Varnish, помогают хранить часто используемые данные в памяти. Они сокращают время отклика, уменьшают нагрузку на базу данных и повышают общую производительность системы.
- Базы данных. Базы данных хранят и извлекают структурированные данные. Распространенными типами являются реляционные базы данных, такие как MySQL, PostgreSQL или Oracle, и базы данных NoSQL, такие как MongoDB или Cassandra. Они обеспечивают постоянное хранилище данных веб-приложений.
- API. Серверы API используются для предоставления данных другим информационным системам и мобильным приложениям.
Компоненты клиентской части:
- Браузер. Современные браузеры представляют собой удобный инструмент для использования веб‑приложения. Браузеры имеют богатый набор функций, в том числе собственное хранилище. Функции современных браузеров могут быть расширены при установке плагинов.
- Сети доставки контента (CDN от англ. content delivery network). CDN — это территориально распределенная сетевая инфраструктура, обеспечивающая быструю доставку контента пользователям веб-сервисов. CDN хранят кэшированные копии статического контента (изображения, CSS, JavaScript) в различных территориально распределенных центрах обработки данных. Они помогают сократить задержку и использование полосы пропускания, доставляя контент из места, расположенного ближе к пользователю. Примерами популярных CDN являются Cloudflare, Akamai, Amazon CloudFront и Yandex Cloud CDN.
- Внешние информационные системы. Внешние информационные системы получают доступ к веб-приложению, используя встроенные функции API, либо, в случае его отсутствия, пытаются собрать информацию с веб-приложения напрямую, применяя различные технологии веб-скрапинга.
- Мобильное приложение. Для пользователей может быть разработано мобильное приложение, которое будет получать данные через специальный API.
Приведенная архитектура обеспечивает масштабируемость, отказоустойчивость и эффективную обработку веб-трафика за счет балансировки нагрузки и возможности добавления различных компонентов инфраструктуры веб‑сервера (горизонтальное масштабирование).
Архитектура включает разделение серверов приложений на серверы бэкенда, отвечающие за обработку данных, и серверы фронтенда, отвечающие за отображение пользовательского интерфейса. Серверы приложения могут также быть разделены на множество микросервисов, взаимодействующих между собой (микросервисная архитектура).
Далее мы рассмотрим архитектурную безопасность для балансировщика нагрузки, веб‑сервера и сервера приложений (будем называть их основными компонентами веб‑приложения).
Основные угрозы и уязвимости компонентов веб‑приложения
В исследовании Positive Technologies «Уязвимости и угрозы веб-приложений в 2020–2021 гг.» было установлено, что в абсолютном большинстве веб-приложений (98%) злоумышленники имеют возможность проводить атаки на пользователей; утечки важных данных имели место в 91% веб-приложений; возможность несанкционированного доступа была отмечена в 84% веб-приложений, участвовавших в исследовании. Наиболее опасными уязвимостями стали недостатки механизмов авторизации и аутентификации пользователей.
В исследовании Kaspersky Security Services «Топ-10 уязвимостей в веб-приложениях в 2021–2023 годах» основными категориями уязвимостей стали недостатки контроля доступа (70% всех проанализированных приложений), раскрытие чувствительной информации (без указания процентов), подделка межсерверных запросов (SSRF) (57% содержали уязвимость, которая позволяла злоумышленнику взаимодействовать с внутренними сервисами в обход логики приложения).
Современной тенденцией также является увеличение числа атак со стороны ботов. По данным исследования «Imperva Bad Bot Report», почти половина интернет-трафика приходится на ботов, большинство из которых (30,2% против 17,3%) являются «плохими» (то есть цель данного ПО — запуск автоматических задач со злым умыслом).
OWASP Top 10 — общепризнанный источник информации об основных рисках (категориях уязвимостей) для веб-приложений. В табл. 1 показаны категории OWASP Top 10–2021 и их описание (перевод категорий и описание сделаны автором и не являются частью OWASP Top 10–2021).
Таблица 1. Категории OWASP Top 10
OWASP Top 10 является группировкой уязвимостей (CWE и CVE) по категориям. Категория «A04:2021-Небезопасный дизайн» впервые появилась в последней редакции, что говорит о важности принятия правильных архитектурных решений в части обеспечения кибербезопасности. Такие решения должны приниматься как можно раньше в цикле разработки веб-приложения.
Проактивные аспекты и требования кибербезопасной архитектуры при разработке веб-приложения
С точки зрения построения кибербезопасной архитектуры веб-приложения разберем два проекта OWASP — это OWASP Proactive Controls (OWASP PC) и OWASP Application Security Verification Standard (OWASP ASVS). Рекомендации «Проактивная защита: Топ‑10 требований OWASP» (из документа OWASP Proactive Controls), на которые разработчики должны обращать внимание при создании веб-приложения, приведены в таблице ниже.
Таблица 2. Краткое описание проактивных аспектов безопасности OWASP PC
В первом же аспекте «С1: Определение требований к безопасности» OWASP PC ссылается на OWASP ASVS, который представляет собой каталог доступных требований и параметров проверки. Требования безопасности объединены в категории на основе общих функций безопасности высшего порядка. Каждая категория содержит перечень требований, представляющих собой рекомендации для этой категории в виде списка проверяемых параметров.
OWASP ASVS регулярно обновляется (идет разработка 5-й версии). Текущая стабильная версия — 4.0.3, в дальнейшем анализе мы будем использовать ее. Стандарт верификации требований к безопасности приложений определяет три уровня соответствия, каждый из которых усиливает требования предыдущего:
- Первый уровень OWASP ASVS соответствует низкому уровню безопасности и полностью поддается тестированию на проникновение.
- Второй уровень OWASP ASVS предназначен для приложений, содержащих конфиденциальную информацию, и является рекомендуемым для большинства приложений.
- Третий уровень OWASP ASVS предназначен для критически важных приложений, выполняющих финансовые транзакции, содержащих медицинские данные, и других приложений, требующих высочайшего уровня доверия.
Рисунок 2. Диаграмма Эйлера-Венна распределения требований между уровнями OWASP ASVS
Для низкого (базового уровня) достаточно исполнения 128 требований, чтобы обеспечить второй уровень защиты необходимо дополнительно исполнить 130 требований (см. рис. 2). Переход на третий уровень добавляет 20 требований, а также ужесточает некоторые требования: добавление аппаратного модуля безопасности (Hardware Security Module (HSM)), меньшее время жизни сессий.
На рис. 3 показаны основные главы OWASP ASVS (всего их 14), внутри которых выделены разделы (секции), содержащие требования (размер зависит от количества требований в секции).
Рисунок 3. Главы ASVS
Больше всего требований в главах «Аутентификация» и «Архитектура, проектирование и моделирование угроз» (см. рис. 3). Если к ним прибавить требования глав «ФЛК, нейтрализация и кодировка» (ФЛК — форматно‑логический контроль) и «Конфигурация», то можно охватить более 50% требований OWASP ASVS.
Факторы, влияющие на кибербезопасную архитектуру веб‑приложения
Разработка кибербезопасной архитектуры веб-приложения включает в себя несколько ключевых факторов. Некоторые аспекты, которые следует учитывать:
- Моделирование угроз. Начните с выявления потенциальных угроз и уязвимостей, характерных для вашего веб-приложения. Проведите тщательную оценку архитектуры веб-приложения, чтобы понять потенциальное воздействие различных угроз.
- Практика безопасного кодирования. Внедряйте методы безопасного кодирования на протяжении всего процесса разработки. Сюда входит проверка входных данных, кодирование выходных данных, контроль доступа и соблюдение правил безопасного кодирования.
- Аутентификация и авторизация. Внедрите надежные методы аутентификации. Выбор метода аутентификации зависит от специфики работы и степени важности веб-приложения или отдельных его частей. Для привилегированных и административных учетных записей необходимо использовать многофакторную аутентификацию. Кроме того, внедрите механизмы авторизации для ограничения доступа к ресурсам веб-приложения на основе ролей или привилегий пользователей.
- Шифрование. Используйте надежные протоколы шифрования, такие как HTTPS/TLS, для защиты данных при передаче. Зашифруйте хранящиеся конфиденциальные данные, используя соответствующие механизмы шифрования, основанные на лучших отраслевых практиках.
- Межсетевой экран прикладного уровня (WAF). Разверните WAF для фильтрации и мониторинга входящего веб-трафика, предотвращения таких атак, как внедрение SQL-кода, межсайтовое выполнение сценариев (XSS) и других распространенных уязвимостей.
- Управление сессиями. Обеспечьте безопасное управление сессиями, используя сессионные ключи или токены доступа. Устанавливайте тайм-ауты сессий и ограниченное время жизни токенов.
- Проверка входных данных и кодирование выходных данных. Внедрите строгую проверку входных данных, чтобы предотвратить распространенные атаки, такие как SQL-инъекция, межсайтовый скриптинг и внедрение команд. Кроме того, примените кодирование вывода для защиты от атак с использованием межсайтовых сценариев.
- Мониторинг безопасности и реагирование на инциденты. Внедрите надежные механизмы регистрации и мониторинга для оперативного обнаружения инцидентов безопасности и реагирования на них. Настройте оповещения о подозрительных действиях и разработайте план реагирования на инциденты.
- Безопасное развертывание и управление исправлениями. Следуйте правилам безопасного развертывания, включая безопасную настройку веб‑серверов, инфраструктур приложений и компонентов инфраструктуры. Регулярно применяйте исправления и обновления безопасности, чтобы обеспечить безопасность приложения и базовых компонентов.
- Регулярные проверки безопасности и тестирование на проникновение. Проводите регулярные проверки безопасности и тестирование на проникновение для выявления уязвимостей и слабых мест в вашем веб-приложении. Своевременно устраняйте выявленные проблемы. Помните, что безопасность — это непрерывный процесс, и крайне важно быть в курсе развивающихся угроз и новых технологий. Регулярно переоценивайте и совершенствуйте свою архитектуру информационной безопасности, чтобы решать новые проблемы и эффективно защищать свое веб‑приложение.
Харденинг компонентов веб-приложения
Веб-сервер, серверы приложений, сервер базы данных, сервер кэширования, серверы для хранения файлов статики (CDN), API, нуждаются в харденинге. Подробнее о процессе харденинга написано в статье Выстраивание процесса харденинга в организации (rezbez.ru)Выстраивание процесса харденинга в организации (rezbez.ru)Выстраивание процесса харденинга в организации (rezbez.ru)
Построение кибербезопасной архитектуры
Построение кибербезопасной архитектуры веб-приложения может быть выполнено с использованием подходов, изложенных ранее, для защиты инфраструктуры организации. Основной задачей является усложнение цепочки атаки злоумышленника таким образом, чтобы злоумышленник не смог реализовать недопустимые события при кибератаке. В рамках решения этой задачи должны быть выявлены критически значимые бизнес‑процессыкритически значимые бизнес‑процессыкритически значимые бизнес‑процессы, реализуемые веб-приложением. На них следует сосредоточить защиту.
На рис. 4 показан пример кибербезопасной архитектуры веб-приложения со средствами защиты. Основные средства защиты, которые должны быть развернуты в рамках обеспечения кибербезопасности, показаны в табл. 3.
Рисунок 4. Пример кибербезопасной архитектуры веб-приложения
Также следует уделить серьезное внимание сегментации сети и ограничению взаимодействия компонентов веб-приложения. Взаимодействие должно происходить только по разрешенным протоколам и портам. Так, на рис. 4 показаны группы безопасности сети, в которых должны находиться компоненты веб-приложения. На границах групп безопасности сети необходимо реализовать контроли безопасности, обеспечивающие защиту этих групп, на случай атаки злоумышленника, использующего скомпрометированные ресурсы из других групп безопасности. Следует отметить, что на рис. 4 показан только один балансировщик нагрузки, но на самом деле перед всеми компонентами (серверами) могут быть установлены балансировщики нагрузки для обеспечения высокой доступности веб-приложения. Для серверов системы управления базами данных и серверов кэширования могут применяться различные технологии повышения доступности, например кластеризация. На рис. 4 они не изображены, чтобы не нагружать схему.
Таблица 3. Основные компоненты защиты веб-приложения
Среды разработки и тестирования веб-приложения
В целях создания (разработки) и тестирования веб-приложения архитектура должна предусматривать среды разработки, тестирования, подготовки и продуктивную среду. Таким образом, продуктивная среда должна быть продублирована в меньшем масштабе (например, вместо ста серверов приложения для тестирования используются десять). В зрелых решениях выделяют следующие среды, показанные на рис. 5.
Рисунок 5. Среды разработки, тестирования, подготовки и продуктивная среда
Данные, обрабатываемые в веб-приложении (например, данные клиентов банка), должны содержаться только в продуктивной среде (см. рис. 5). Среды должны быть разделены между собой, чтобы исключить доступ разработчиков и тестировщиков в продуктивную среду и их влияние друг на друга.
Процесс перехода между средами обычно обеспечивается через использование Secure Software Development Life Cycle (SSDLC) и Continuous Integration and Continuous Deployment (CI/CD). Оба подхода направлены на автоматизацию разработки и развертывания программного обеспечения. Однако, они имеют разные акценты и принципы:
- SSDLC фокусируется на обеспечении безопасности на протяжении всего жизненного цикла разработки, в том числе на этапах анализа, проектирования, реализации, тестирования и поддержки.
- CI/CD фокусируется на автоматизации разработки и развертывания, включая интеграцию изменений, тестирование и развертывание новых версий программного обеспечения.
Оба подхода можно использовать совместно, чтобы обеспечить максимальную безопасность и эффективность разработки и развертывания программного обеспечения. Например, автоматизированные процессы CI/CD могут быть использованы для автоматического выполнения тестов безопасности на каждом этапе разработки, а SSDLC — для учета требований безопасности в процессе разработки программного обеспечения, а также для обеспечения необходимых проверок безопасности.
Объем тестирования приложений может существенно отличаться в зависимости от автоматизируемых бизнес-процессов. Если бизнес-процесс является критически значимым, то объем тестирования должен быть максимальным и может включать следующие методы тестирования:
- Статическое тестирование безопасности приложений (Static Application Security Testing (SAST)) — тестирование приложения на наличие ошибок и уязвимостей в исходном коде с применением статического анализа. Применяется к исходному коду веб-приложения для выявления уязвимостей.
- Динамическое тестирование безопасности приложений (Dynamic Application Security Testing (DAST)) — тестирование, при котором приложение оценивается с использованием определенных методов. Конечный результат тестирования охватывает слабые места безопасности и уязвимости, присутствующие в приложении. Реализуется как программа, которая взаимодействует с веб-приложением через веб-интерфейс с целью выявления потенциальных уязвимостей безопасности и недостатков архитектуры.
- Интерактивное тестирование безопасности приложений (Interactive Application Security Testing (IAST)) — тестирование приложений, которое направлено на обнаружение проблем безопасности в программном коде приложений путем взаимодействия с программой в сочетании с наблюдением. Применяется к исходному коду веб‑приложения для выявления уязвимостей.
- Фаззинг (Fuzzing) — тестирование программного обеспечения, заключающееся в передаче приложению на вход неправильных, неожиданных или случайных данных.
Целевая архитектура приложения должна предусматривать использование инструментов для тестирования безопасности.
Заключение
Современные веб-приложения являются сложными системами, состоящими из множества компонентов. Для обеспечения безопасности и надежности веб‑приложения необходимо учитывать актуальные угрозы и реализовывать соответствующие меры защиты на всех этапах жизненного цикла веб-приложения. В рамках построения архитектуры веб‑приложения нужно концентрировать свои усилия на защите критически значимых бизнес-процессов, выделяя для них отдельные компоненты веб-приложения и максимально усложняя доступ злоумышленников к данным компонентам. В целях создания требований кибербезопасности можно использовать стандарт OWASP ASVS, причем для разных компонентов, реализующих бизнес-процессы различной значимости, требования будут отличаться.