Вопрос или проблема
Сценарий:
Веб-сервер с веб-приложением для удаленного персонала. Веб-сервер находится за обратным прокси (traefik). Веб-сервер имеет настроенный на основе хоста брандмауэр, который позволяет соединения только от прокси на определенном порту. Эти соединения используют TLS. Единственные другие открытые порты – это ssh, zabbix agent и ntp из 10.0.0.0/8 (ssh и zabbix с конкретных IP-адресов).
Прокси-сервер слушает на 80 и 443 портах и перенаправляет 80 на 443 (и устанавливает заголовки HSTS). Прокси-сервер требует mTLS для домена, на котором размещено веб-приложение, но также проксирует другие веб-серверы, которые используют только обычный TLS. Прокси-сервер имеет настроенный на основе хоста брандмауэр, который позволяет входящие соединения на 80/443 из любой точки и ssh и zabbix agent с частных IP-адресов. Прокси-сервер в настоящее время работает с минимальной установкой Oracle Linux 8 с SELinux в режиме принудительного контроля.
Прокси находится за сетевым брандмауэром, который выполняет NAT публичного IP-адреса на частный и позволяет трафик только на 80/443.
Сертификаты клиентов генерируются с использованием частного CA (внутренняя сеть, не подключенная к Интернету), и затем сертификаты устанавливаются в хранилище сертификатов пользователей, чтобы они могли получить доступ к URL веб-приложения из своих браузеров.
Вопрос:
Предполагая для ограничения объема этого вопроса, что a) сертификаты остаются неповрежденными и b) нет инсайдерских угроз, какие уязвимости остались для веб-сервера? Другими словами, какие векторные атаки имеются у злоумышленника, который находится вне сети и не имеет доступа к действительному сертификату?
Все угрозы остаются, кроме небольшого количества, которые вы либо действительно смягчили (например, атаки типа “человек посередине”), либо исключили по предположению.
Например, вы не упомянули никаких мер против подделки межсайтовых запросов (CSRF). Если CSRF возможна, то вся разница между “инсайдером” и “внешним” исчезает, и злоумышленник может попробовать весь каталог классических атак: SQL-инъекции, межсайтовый скриптинг, эксплуатацию нарушенного контроля доступа и т. д. Кликджекинг может быть еще одним методом, позволяющим законному пользователю невольно выполнять действия от имени злоумышленника.
В целом опасно полагаться только на безопасность на периметре. Помимо CSRF и кликджекинга, инсайдерские угрозы действительно существуют, и приватные ключи могут быть скомпрометированы (особенно когда пользователи хранят их в виде файлов без должной защиты). Поэтому веб-приложение должно быть способно противостоять всем возможным атакам самостоятельно, независимо от того, сколько прокси, брандмауэров и т. д. вы установили перед ним. Не предполагайте, что ему придется иметь дело только с “безобидными” запросами, отправленными законными пользователями.
Вы на самом деле не остановили атаки через веб… сервер все еще доступен через общедоступный интернет на портах 80 и 443. В любое количество атак на веб-серверы все еще доступны потенциальным хакерам.
Поскольку это не веб-приложение, к которому вы хотите предоставить доступ широкой публике, вы должны поместить все это за частным VPN (например, wireguard и т. д.) и разрешить подключение только авторизованным пользователям.
Вы упомянули, что тот же прокси обслуживает ряд различных доменов, и некоторые из этих доменов не требуют клиентских сертификатов, поэтому в дополнение к атакам, упомянутым в других местах, вы должны убедиться, что вы не уязвимы для фронтирования доменов. Если кто-то устанавливает TLS-соединение для одного из доменов без клиентского сертификата, но после подключения делает запрос с заголовком “Host”, который принадлежит домену, требующему клиентский сертификат, успешен ли этот запрос?
Ответ или решение
Вопрос о внешних уязвимостях веб-сервера, защищенного mTLS, представляет собой важный аспект кибербезопасности. Несмотря на использование многоуровневых мер защиты, включая mTLS, брандмауэры и прокси-серверы, существует ряд возможных векторов атак, которые могут представлять угрозу для вашего приложения. Давайте рассмотрим основные уязвимости, которые остаются в случае, если предполагается, что сертификаты остаются некомпрометированными, и отсутствуют внутренние угрозы.
1. Уязвимости веб-приложения
Помимо обеспечения безопасности соединения, веб-приложения должны учитывать потенциальные уязвимости, такие как:
-
SQL-инъекции: Если веб-приложение обрабатывает пользовательский ввод, несоответствующие проверки могут позволить злоумышленнику выполнить произвольные SQL-запросы к базе данных, что может привести к утечке данных или повреждению базы данных.
-
Межсайтовый скриптинг (XSS): Если не реализована должная экранирование или очистка пользовательских данных, злоумышленники могут внедрить вредоносные скрипты, которые исполняются в браузерах других пользователей, приводя к компрометации их данных.
-
Нарушение контроля доступа: Если механизм авторизации или аутентификации реализован с ошибками, злоумышленник может получить доступ к данным или функциям, для которых у него нет разрешений.
2. Уязвимости протоколов и сетевые угрозы
Несмотря на настройку прокси-сервера с mTLS, существуют соображения по network security:
-
CSRF (Межсайтовая подделка запроса): Даже если доступ к приложению ограничен, злоумышленник может попытаться выполнить несанкционированные действия от имени владельца с использованием активной сессии.
-
Clickjacking: Этот метод может использоваться для обмана пользователя с целью выполнения нежелательных действий.
3. Пассивные угрозы
Учитывая, что сервер доступен с внешней сети на портах 80 и 443, потенциальные злоумышленники могут осуществлять:
- Сканирование и анализ уязвимостей: Открытые порты и публичный доступ могут быть использованы для поиска уязвимостей в серверном ПО и приложениях.
4. Частные и внутренние угрозы
Хотя в предположении указано отсутствие внутренних угроз, всегда следует помнить о следующих аспектах:
-
Ошибки конфигурации: Настройки прокси или сервера могут быть неправильно сконфигурированы, что приведет к уязвимостям.
-
Проблемы с хранением сертификатов: Если личные ключи не защищены должным образом, существует риск их компрометации.
5. Domain Fronting
Когда прокси обрабатывает несколько доменов с различными уровнями безопасности, важно учитывать возможность domain fronting. Если злоумышленник устанавливает соединение с доменом, не требующим клиентских сертификатов, а затем делает запрос к защищенному домену с использованием заголовка "Host", успешная обработка такого запроса может произойти, что создает угрозу утечки данных.
Заключение
Независимо от используемого уровня защиты, веб-приложения по-прежнему остаются под угрозой. Киберугрозы могут варьироваться от опасностей на уровне сети до угроз, связанных с поведением пользователей. Для повышения безопасности рекомендуется ограничить доступ к веб-приложению, возможно, через использование виртуальных частных сетей (VPN), что добавляет еще один уровень аутентификации и контроля доступа. Важно также проводить регулярные тестирования на уязвимости и обновления программного обеспечения для минимизации рисков.
В конечном счете, реализация мер безопасности — это не единовременная задача, а постоянный процесс оценки и улучшения системы защиты.