Уязвимости веб-приложений | Немезида ВАФ

Основные типы веб-уязвимостей, которые являются результатом ошибок при разработке или проектировании веб-приложения.

Clickjacking
Данная техника заключается в создании специального iFrame с помощью CSS и Javascript, которые создает кнопку-подделку. По нажатию (или автоматически, без действия пользователя) на эту кнопку в невидимый iframe загрузится специальная страница с вредоносным кодом. Спрятанная страница может быть подделкой текущей и заставить пользователя делать то, что он не желал, например заново пройти аутентификацию, для считывания его регистрационных данных.
Cross Site Request Forgery (CSRF)
Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом.

Одно из применений CSRF — эксплуатация пассивных XSS, обнаруженных на другом сервере. Так же возможны отправка писем (спам) от лица жертвы и изменение каких-либо настроек учётных записей на других сайтах (например, секретного вопроса для восстановления пароля).

Cross Site Scripting (XSS)
XSS возникает, когда в генерируемые сервером страницы по какой-то причине попадают пользовательские скрипты. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера они используют уязвимый сервер в качестве средства атаки на клиента.

Сейчас XSS составляют около 15 % всех обнаруженных уязвимостей. Долгое время программисты не уделяли им должного внимания, считая их неопасными. Однако это мнение ошибочно: на странице или в HTTP-Cookie могут быть весьма уязвимые данные (например, идентификатор сессии администратора).

По механизму исполнения атаки XSS можно разделить на активные и пассивные.

При активных XSS вредоносный скрипт хранится на сервере, и срабатывает в браузере жертвы при открытии какой-либо страницы заражённого сайта.

Пассивные XSS подразумевают, что скрипт не хранится на сервере уязвимого сайта, либо он не может автоматически выполниться в браузере жертвы. Для срабатывания пассивной XSS требуется некое дополнительное действие, которое должен выполнить браузер жертвы (например, клик по специально сформированной ссылке).

Local File Inclusion
Представляет собой тип уязвимости, которая позволяет злоумышленнику использовать локальный файл на серверной стороне, через скрипт на веб-сервере. Уязвимость существует из-за использования вводимых данных без надлежащей проверки.
Remote File Inclusion
Представляет собой тип уязвимости, которая позволяет злоумышленнику использовать удаленный файл на серверной стороне, через скрипт на веб-сервере. Уязвимость существует из-за использования вводимых данных без надлежащей проверки.
PHP Injection
Потенциально опасными функциями являются:
eval()
preg_replace() (с модификатором «e»)
require_once()
include_once()
include()
require()
create_function()

PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки.

SQL Injection
Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.

Атака типа внедрения SQL может быть возможна из-за некорректной обработки входящих данных, используемых в SQL-запросах.

AXFR
Обычно этот механизм используется для репликации информации зоны между серверами, но он также может использоваться для получения различной информации для массовых почтовых рассылок, распределенных DoS атак и других злонамеренных целей. Уязвимость связана с тем, что многие DNS-сервера не выполняют ограничения на AXFR запросах.

XFR данные могут использоваться, чтобы найти почтовые ретрансляторы, прокси серверы, хосты с определенными OS или установленными приложениями.

Когда DNS-сервер получает AXFR-запрос он отдает все данные, которые ему известны для запрошенного домена. Подразумевается, что такой запрос придет от DNS-сервера, который пытается выполнить трансфер зоны (перенести домен к себе, реплицировать). Но если DNS-сервер сконфигурирован неверно, любой пользователь может получить доступ к этим данным.

Очень часто сайты имеют «секретные» поддомены (dev.*, test.* и подобные) для внутреннего использования. Обычно, эти домены имеют небезопасную конфигурацию (включенный stacktrace для dev доменов) или разрабатываемые фичи.

XML External Entity
Для записи спецсимволов в XML документах используются так называемые сущности. Сущностью называются именованные данные, как правило, текстовые (в частности спецсимволы). Сущности можно разделить на следующие категории:
— предопределенные;
— внутренние;
— внешние.

Атака XML External Entity — пример предопределенной сущности: » (символ двойной кавычки). Пример внутренней сущности: <!ENTITY pentest «hek»> … &pentest;. Внешние сущности ссылаются на сторонние файлы. Атака XML eXternal Entity заключается в использовании внешних сущностей. <!ENTITY epicwin SYSTEM «file:///etc/passwd»>. Фикс — запретить использование внешних сущностей: DOMDocument::loadXML($xml, LIBXML_NOENT);.

HTTP Response Splitting
При использовании уязвимости HTTP Response Splitting (расщепление HTTP-запроса) злоумышленник посылает серверу специальным образом сформированный запрос, ответ на который интерпретируется целью атаки как два разных ответа. Второй ответ полностью контролируется злоумышленником, что дает ему возможность подделать ответ сервера.

В результате успешной реализации этой атаки злоумышленник может выполнить следующие действия:
— межсайтовое выполнение сценариев;
— модификация данных кэша сервера-посредника;
— межпользовательская атака (один пользователь, одна страница, временная подмена страницы);
— перехват страниц, содержащих пользовательские данные.

Denial of Service (DoS)
Данный класс атак направлен на нарушение доступности веб-сервера. Обычно атаки, направленные на отказ в обслуживании реализуются на сетевом уровне, однако они могут быть направлены и на прикладной уровень. Используя функции Веб-приложения, злоумышленник может исчерпать критичные ресурсы системы, или воспользоваться уязвимостью, приводящий к прекращению функционирования системы.

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

Атаки могут быть направлены на любой из компонентов Веб-приложения, например, такие как сервер СУБД, сервер аутентификации и т.д.

В некоторых случаях к DDoS-атаке приводит легитимное действие, например, простановка ссылки на сайт, размещённый на не очень производительном сервере. Большой наплыв пользователей приводит к превышению допустимой нагрузки на сервер и отказу в обслуживании части из них.

Path Traversal
Данная техника атак направлена на получения доступа к файлам, директориям и командам, находящимся вне основной директории Веб-сервера. Злоумышленник может манипулировать параметрами URL с целью получить доступ к файлам или выполнить команды, располагаемые в файловой системе Веб-сервера.
Information Leakage
Эти уязвимости возникают в ситуациях, когда сервер публикует важную информацию, например, комментарии разработчиков или сообщения об ошибках, которая может быть использована для компрометации системы.
Information Disclosure
Атаки данного класса направлены на получение дополнительной информации о Веб-приложении. Используя эти уязвимости, злоумышленник может определить используемые дистрибутивы ПО, номера версий клиента и сервера и установленные обновления. В других случаях, в утекающей информации может содержаться расположение временных файлов или резервных копий.
Credential/Session Prediction
Предсказуемое значение идентификатора сессии позволяет перехватывать сессии других пользователей. Подобные атаки выполняются путем предсказания или угадывания уникального идентификатора сессии пользователя.
SSI Injection
Атаки данного класса позволяют злоумышленнику передать исполняемый код, который в дальнейшем будет выполнен на Веб-сервере. Уязвимости, приводящие к возможности осуществления данных атак, обычно заключаются в отсутствии проверки данных, предоставленных пользователем, перед сохранением их в интерпретируемом сервером файле.

Перед генерацией HTML страницы сервер может выполнять сценарии, например Server-site Includes (SSI). В некоторых ситуациях исходный код страниц генерируется на основе данных, предоставленных пользователем. Если атакующий передает серверу операторы SSI, он может получить возможность выполнения команд операционной системы или включить в нее запрещенное содержимое при следующем отображении.

X-Path Injection
Эти атаки направлены на Веб-серверы, создающие запросы на языке XPath на основе данных, вводимых пользователем.

Язык XPath 1.0 разработан для предоставления возможности обращения к частям документа на языке XML. Он может быть использован непосредственно либо в качестве составной части XSLT-преобразования XML-документов или выполнения запросов XQuery.

Использование Nemesida WAF позволит блокировать попытки эксплуатации таких уязвимостей.