4.1.10 Составление карты архитектуры веб-приложения
Инфраструктура многих современных веб-приложений весьма сложна, зачастую состоит из множества соединенных между собой разнородных веб-серверов. Такая инфраструктура может включать в себя сотни веб-приложений, взаимодействующих между собой, что делает проверку и управление конфигурацией в таких системах одним из фундаментальных этапов в тестировании. Фактически, единственная уязвимость может поставить под угрозу безопасность всей инфраструктуры и, даже небольшие и на первый взгляд не критичные проблемы, могут поставить под серьезный удар все остальные приложения на этом же веб — сервере.
Для того чтобы предотвратить подобные инциденты, необходимо проводить глубокий анализ конфигурации и знать возможные угрозы безопасности. Перед проведением такого анализа, необходимо составить карту архитектуры приложения. Необходимо четко идентифицировать различные компоненты инфраструктуры и понять, как они взаимодействуют с веб-приложением и каким образом они могут влиять на безопасность веб-приложения и инфраструктуры в целом.
Как тестировать?
Архитектура приложения должна быть задокументирована (построена карта) для понимания, какие компоненты используются в работе веб-приложения. В небольших конфигурациях, например при использовании простых CGI приложений, может быть использован один сервер, на котором функционирует веб-сервер, исполняющий С, Perl или CGI приложения, и возможно присутствие какого-либо механизма аутентификации.
В более сложных конфигурациях, например в системах онлайн банкинга, могут быть задействованы несколько различных серверов. Такие конфигурации могут включать в себя реверсивный прокси, веб-сервер фронтэнда, сервер приложений, сервер баз данных или LDAP сервер. Каждый из этих серверов будет использоваться в соответствии со своим функционалом, они даже могут быть разделены по разным сетям, отделенным файрволами. Такое разделение создает различные DMZ зоны таким образом, что доступ удаленного пользователя к веб-серверу не дает доступ к самому механизму аутентификации, и различные элементы архитектуры остаются изолированными. При такой конфигурации компрометация одного из элементов не приведет к компрометации всей архитектуры.
Сведения об архитектуре приложения могут быть получены от разработчиков в документальной форме или через интервью. Но такие сведения бывает сложно получить просто проводя “слепое” тестирование на проникновение.
В случае проведения “слепого” тестирования, тестировщик начинает с предположения о простой конфигурации (единичный сервер). По мере получения новой информации о приложении, карта архитектуры приложения расширяется. Тестировщик начинает со следующих простых вопросов: “Присутствует ли файрвол, защищающий веб-приложение?” Ответ на такой вопрос может быть получен по результатам сканирования сети веб-сервера и анализа, фильтруются ли сетевые порты на уровне сети ( нет ответа или ICMP статус unreachable получен) или же сервер напрямую подключен к сети Интернет (возвращает RST пакеты для всех не-слушаемых портов) Такой анализ может быть расширен, например, можно попытаться определить тип используемого файрвола на основе сетевых пакетов. Это SPI-файрвол (Stateful Packet Inspection) или это просто списки контроля доступа (Access Control List или ACL) на роутере? Как он сконфигурирован? Можно ли его обойти?
Также необходимо выяснить наличие реверсивного прокси-сервера перед веб-сервером, это можно сделать с помощью анализа баннера веб-сервера, в котором может быть напрямую указано наличие реверсивного прокси-сервера (например если возвращается строка “WebSEAL”) Также наличие реверсивного прокси можно определить сравнивая ответы веб-сервера на запросы с ожидаемым поведением( ожидаемые ответы) Например, некоторые реверсинвыне прокси могут выступать в качестве систем предотвращения вторжений (intrusion prevention system), блокируя известные атаки на веб-сервер. Если известно, что веб-сервер отвечает статус-сообщением 404 на запрос несуществующей страницы, и возвращает другие сообщения об ошибках при попытке проведения типичных атак, которые например используются в сканнерах уязвимостей, это может сигнализировать о наличии реверсивного прокси (или файрвола на уровне приложения) который фильтрует запросы и возвращает отличные от стандартных страницы ошибок. Другой пример: если веб-сервер возвращает набор разрешенных HTTP методов (включая TRACE) но при вызове конкретного метода возвращает ошибку — скорей всего что-то блокирует такие запросы.
В некоторых случаях, защитные системы сообщают о себе в ответах:
GET /web-console/ServerInfo.jsp%00 HTTP/1.0 HTTP/1.0 200 Pragma: no-cache Cache-Control: no-cache Content-Type: text/html Content-Length: 83 <TITLE>Error</TITLE> <BODY> <H1>Error</H1> FW-1 at XXXXXX: Access denied.</BODY>
Реверс - прокси также могут выступать в роли кеширующих прокси для увеличения производительности серверов приложений. Определить такие прокси-серверы можно по анализу заголовков. Также такие прокси можно определить по таймингу запросов-ответов, которые должны быть закешированы сервером, сравнивая время ответа на первый запрос со временем ответа на последующие запросы.
Еще один элемент, наличие которого можно определить в целевой архитектуре — сетевой балансировщик нагрузки. Обычно, подобные системы используются для балансировки нагрузки определенного TCP\IP порта между несколькими серверами по определенному алгоритму. Таким образом, детектирование этого элемента архитектуры требует изучения нескольких запросов и сравнения ответов для определения того, пришли ли эти ответы от одного веб-сервера или от разных. Например, на основе времени в поле Date, если серверы не синхронизированы. Некоторые балансировщики нагрузки вставляют дополнительную информацию в пакеты данных, что позволяет определить их наличие, например балансировщик Alteon WebSystems вставляет строку “AlteonP” в куки.
Веб-серверы приложений обычно довольно легко обнаружить. Зачастую, серверы приложений сами обрабатывают поступающие веб-запросы (а не веб-сервер), поэтому заголовки ответов могут значительно отличаться ( различные значения в полях заголовка, появление дополнительных полей). Еще один способ определить наличие сервера приложений — посмотреть, не добавляет ли веб-сервер куки, которые могут идентифицировать сервер приложений (например, JSESSIONID используемые некоторыми J2EE серверами).
Определение бек-эндов аутентификации (LDAP, реляционные базы данных или RADIUS серверы) вне периметра — не такая уж простая задача, так как зачастую они скрыты самим веб-приложением.
Использование в бек-энде базы данных можно зафиксировать просто исследуя веб-приложение. Если в приложении много динамического контента, который генерируется “на лету”, весьма вероятно что данные извлекаются приложением из какой-либо базы данных. Иногда, пролить свет на возможное использование базы данных позволяет механизм взаимодействия с приложением. Например, приложение онлайн магазина, использующее числовые идентификаторы (“id”) при просмотре различных товаров. Однако, при проведении слепого тестирования приложения, знания об используемой базе данных можно получить только из присутствующих ошибок в приложении, таких как некорректная обработка исключений или SQL инъекции.
Перевод подготовлен специально для канала t.me/FreedomF0x
Contact: t.me/freedomf0x t.me/Slippery_Fox twitter.com/FlatL1ne
xmpp(жаба_ёпт): [email protected]
При поддержке друзей: t.me/in51d3 t.me/NeuroAliceMusic t.me/vulnersBot t.me/darknet_prison
Our private (no logs) xmpp server: FreedomFox.im (for add, write to [email protected])
Хорошо там где нас нет (с) Русские хакеры
Добре там де нас немає (с) Російські хакери