Как и зачем взламывают web-приложения — часть вторая

Как взламывают web-приложения

Как и зачем взламывают web-приложения — часть вторая.

Что же, продолжим повествования о подвожных камнях мира web-приложений.

AV9. Благодаря WebWorkers стало возможным реализовывать многопоточные веб-приложения. WebWorkers позволяет браузеру запускать скрипты в фоновом режиме, чтобы они работали параллельно с главной страницей. Это очень привлекательная для киберзлоумышленников возможность, поскольку позволяет им запускать свой вредоносный код в невидимом режиме.

AVI0. Во многих веб-приложениях есть возможность добавления пользовательских виджетов, которые представляют собой небольшой кусок HTML с вкраплением JavaScript-кода. Виджеты запускаются в DOM родительского веб-приложения. Причем в некоторых случаях все запускаемые там виджеты разделяют общий DOM-контекст родительского приложения. Такая их особенность позволяет злонамеренному виджету получать доступ к важным тегам и переменным другого виджета. Например, к учетным данным для входа в систему. На рисунке представлен фрагмент кода злонамеренного виджета, который слушает события мыши, и как только вводятся учетные данные, вызывает самописные функции GetU и GetP, которые считывают эти параметры и отправляют их киберзлоумышленнику.

Небезопасная десериализация — основа для большинства современных кибератак

Современные веб-приложения, в особенности микросервисы, активно пользуются программными обьектами, которые в разные моменты времени надо либо просто хранить, либо обрабатывать, либо передавать по сети. Сериализация — это преобразование экземпляра объекта (например, обьектов XML или JSON) в битовую последовательность. Десериализация — восстановление первоначального состояния структуры данных из битовой последовательности. В веб-приложениях сериализованные битовые потоки перемещаются между браузером и серверами. Они передаются по HTTP(S) и могут «расчленяться» на клиентской стороне. Киберзлоумышленник, узнав структуру передаваемых в битовом потоке обьектов и вооружившись списком уязвимостей скриптовых движков, под управлением которых работают веб-приложения, может модифицировать эти битовые потоки, чтобы эксплуатировать данные уязвимости.

Так, например, поскольку при парсинге этого битового потока скриптовый движок в некоторых случаях задействует ресурсы локальной операционной системы, киберзлоумышленик, эксплуатируя небезопасную десериализацию, может делать инъекции команд операционной системы. Другой пример эксплуатации небезопасной десериализации — эскалация привилегий. Битовый поток сериализованного обьекта может содержать токены авторизации или ссылки на ACL-список (Access Control List; контрольный список доступа). Киберзлоумышленник может извлечь эту информацию и с ее помощью получить более высокие права в атакуемой им системе.

Небезопасная десериализация стала в особенности актуальна с 2016 года, который безопасники окрестили годом апокалипсиса Java-десериализации. Этот апокалипсис случился в результате публикации обновленной версии RCE-атаки: Apache Commons Collection Remote Code Execution. Хотя атаки на Java-десериализацию были известны и до этого, демонстрация обновленной версии RCE-атаки вывела последствия от небезопасной десериализации на новый уровень.

В качестве эффективной контрмеры было предложено полностью отказаться от Java-десериализации и взять на вооружение более безопасный формат JSON. Однако анализ наиболее популярных JSON-парсеров для NET и Java показывает, что их механизм десериализации также уязвим для упомянутой RCE-атаки.

Принцип действия веб-сервисов и их уязвимости

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

Язык WSDL (Web Services Definition Language; язык определения веб-сервисов), который представляет собой XML-описание точек подключения, доступных для пользователей веб-сервиса.

Спецификация UDDI (Universal Description, Discovery, and Integration; универсальная система предметного описания и интеграции), которая представляет собой набор XML-протоколов и инфраструктуру для описания и обнаружения веб-сервисов.

Протокол SOAP (Simple Object Access Protocol; простой протокол доступа к обьектам), который предназначен для обмена сообщениями на основе XML и для осуществления RPC-взаимодействия между веб-сервисами. Благодаря трем этим технологиям веб-сервисы способны описывать свои собственные функции, искать другие вебсервисы и динамически взаимодействовать с ними. Три этих технологии позволяют программисту взаимодействовать с веб-сервисами в произвольном порядке и таким образом создавать гибкие многофункциональные веб-при­ложения. Кроме того, веб-сервисы предоставляют разрозненным разработчикам возможность организовывать бесшовное взаимодействие между их веб-приложениями, независимо от того, на основе каких технологий эти веб-приложения работают: ASP NET. ISAPI, COM, PHP, J2EE или что-то еще. Такая особенность веб-сервисов очень удобна для проведения бизнес-операций в электронной среде.

Поэтому естественно, что веб-сервисы представляют собой привлекательную для киберзлоумышленников цель. Хит-парад уязвимостей, наиболее актуальных для веб-приложений, содержит три строчки, которые непосредственно с веб-сервисами связаны А1 2017 (иньекции), А4:2017 (ХХЕ). А8:2017 (небезопасная десериализация). Небезопасную десериализацию мы уже рассмотрели. Теперь вкратце рассмотрим ХХЕ (XML External Entities) и иньекции Посредством ХХЕ злоумышленники делают иньекции в XML-потоки и таким образом получают низкоуровневый доступ к проходящим через веб-приложение данным. Обработка XML-потока на серверной стороне начинается с расчленения этого потока XML-парсером. XML-парсеры как правило, содержат множество уязвимостей, потому что либо разрабатываются на скорую руку, либо настраиваются неправильно. Эксплуатируя уязвимости XML-парсеров посредством иньекций в XML-потоки. киберзлоумышленник может получить доступ к файловой системе, к сетевым дискам и к другим ресурсам удаленного сервера. Благодаря уязвимостям XML-napcepa киберзлоумышленник также может осуществить SSRF-атаку, DoS-атаку, похитить ценные файлы, исходные коды, конфиденциальную информацию.

А вы пользуетесь уязвимыми веб-приложениями?

Вне зависимости от сферы деятельности вашего предприятия вы практически наверняка пользуетесь вебприложениями. Большинство из них уязвимы для кибератак. Так. например, более 50% сайтов розничной торговли уязвимы. Среднее количество уязвимостей на одном сайте — 23, из них 13 критические. Примерно половина от этих 23 уязвимостей в итоге будет исправлена. На исправление каждой из них уйдет порядка 200 дней. Исправление ошибок безопасности веб-приложений представляет собой дорогостоящее мероприятие, потому что для их исправления зачастую приходится переписывать код по всему веб-приложению.

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

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

В результате, среднее количество кибератак на среднестатистическое предприятие через используемые им вебприложения колеблется в пределах 300-800 раз в день При этом киберзлоумышленники очень оперативно берут на вооружение вновь обнаруженные уязвимости. (Уже через три дня с момента их публикации. Большинство вебсканеров эффективно справляются с поиском уязвимостей в классических сайтах (с JavaScript и старыми версиями спецификации HTML), но разношерстный набор технологий Web 2.0. который сейчас является стандартом де-факто, им не по зубам. Поэтому 42% из 100 тыс. топовых веб-сайтов беззащитны. Они либо ждут своего часа, используя уязвимый софт, либо уже скомпрометированы.

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

Как взламывают мобильные приложения: несколько примеров

1. Эскалация привилегий и обход разграничений ролевого доступа. Как правило, в мобильных приложениях реализуется схема ролевого доступа Например, для разграничения доступа между администраторами приложения и обычными пользователями Распространенная ситуация при запуске мобильного приложения обычным пользователем серверная часть приложения присваивает параметру -г- (роль пользователя) число 3, а при входе администратора — число 1. Этот параметр передается клиентской части мобильного приложения в общем JSON-потоке. После аутентификации мобильное приложение в зависимости от значения параметра -г- отображает либо административные, либо пользовательские вкладки Если перехватить этот входящий JSON-поток и модифицировать его, то можно получить доступ к административным вкладкам приложения даже с ограниченными правами обычного пользователя.

2. Нарушение процедуры смены пароля. В некоторых мобильных приложениях на вкладке смены пароля предусмотрена двушаговая процедура с отдельной страницей для каждого шага На первом шаге пользователю предлагается ввести старый пароль Если старый пароль совпадает с тем, который хранится на сервере, приложение перенаправляет пользователя на страницу ввода нового пароля. Если же пароль неверный приложение оставляет пользователя на странице ввода старого пароля. Но киберзлоумышлеммик может фальсифицировать НТТР-ответ сервера на основе которого мобильное приложение принимает решение какую страницу отображать. Если злоумышленник на первом шаге поменяет ответ сервера с FAIL на SUCCESS, то мобильное приложение перенаправит пользователя на ввод нового пароля, даже если старый пароль неверный.

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

Несанкционированный доступ к платной функциональности мобильного приложения. Работа многих мобильных приложений начинается с того, что они отображают экран входа в систему. После аутентификации сервер передает мобильному приложению большой JSON-поток с параметрами инициализации. На основе этих параметров мобильное приложение принимает решение, какие вкладки отображать а какие нет. Например, для разделения платной и бесплатной функциональности приложения В зависимости от роли, которая присвоена пользователю в мобильных приложениях активируются соответствующие наборы вкладок. Отвечающие за такое разграничение параметры, переданные во входящем JSON-потоке могут быть подделаны с цепью получения доступа к платным функциям мобильного приложения, без их покупки. Ни реализациями грешат 87% приложении Android и 80% приложений iOS.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *