Набор технологических компонентов HTML5 можно разделить на четыре сегмента (см. рис.): отображение, процессинг, сетевое взаимодействие и политики. Все это RIA-богатство вычертило новое лицо для модели угрозы на клиентской стороне веб-приложений, в браузере (см. рис.). Вместе с технологиями, воплощающими RIA-потребности, в клиентской части веб-приложений появился целый набор новых брешей и точек входа, заманчивых для злоумышленника. Брешей, которые позволяют создавать новые модификации уже существующих атак.nnКроме того, поверхность атак быстро расширяется благодаря включению такой функциональности, как аудио/видео-тэги, API для механизма Drag&Drop, CSS-прозрачность, локальное хранилище. WebWorkers, DOM-селекторы, мышиная жестикуляция, встроенная поддержка JSON, управление межсайтовым доступом, автономный просмотр и т.д. Краткие комментарии к векторам атак, обозначенным на рис.1:AV2. Если веб-приложение пользуется DОМовыми услугами неаккуратно, то может легко стать жертвой XSS-атаки. Например, если веб-разработчик не учитывает того факта, что URL-параметры, разделенные символом решетки («#»), обрабатываются браузером локально, то его приложение может стать жертвой следующих махинаций:n
- передача значений параметров непосредственно в DOM, без промежуточного HTTP-запроса к серверной части веб-приложения;
- инъекция программного кода, осуществляющая редирект на страницу киберзлоумышленника.
AV3. По идее веб-приложение может взаимодействовать только со своим локальным хранилищем. Поэтому предполагается, что «выбраться из песочницы» и получить доступ к хранилищу чужого сайта (к его cookies, например) не получится. Однако на самом деле такая возможность существует. Посредством DNS-спуфинга и XSS-атаки, например. От DNS-спуфинга до некоторой степени можно защититься при помощи SSL: чтобы доступ к DNS был возможен только при наличии сертификата (но SSL тоже не панацея).nnС другой стороны, XSS-атака может подчистую вымести локальное хранилище и получить доступ к хранящейся там информации. С помощью XSS-атаки можно даже HTTPOnly-cookies скомпрометировать. По идее к ним нельзя получить доступ из программного скрипта. Однако их идентификаторы, хранящиеся в локальном хранилище, можно получить через XSS-атаку.nnAV4. Локальная база данных помогает некоторым приложениям работать быстрее и эффективнее. Если веб-прило-жение пользуется этой возможностью, то становится потенциально уязвимым для следующих угроз:n
- когда веб-приложение уже скомпрометировано XSS-атакой, у киберзлоумышленника есть полный доступ к его локальной БД, как на чтение, так и на запись;
- все те методики проведения SQL-иньекций, которые актуальны для удаленных баз данных, применимы также. Наиболее опасные из иньекций — асинхронные инъекции.
AV5. XHR и WebSockets открывают перед киберзлоумышленником множество вариантов злодейства. Вот несколько примеров того, что злодей может делать:n
- Вызывать в JavaScript функции от имени произвольных доменов.
- Инициировать внутреннее сканирование портов, определение IP-адресов, а также производить полный захват всей сети, просто имея доступ к одному только браузеру. Минуя файрвол.
- Создавать канал связи со своим злонамеренным удаленным сервером после того, как браузер был скомпрометирован.
- Перенаправлять сетевой трафик
AV6. В эпоху HTML5 веб-приложения опираются в своей работе на самые разнообразные потоковые структуры данных (JSON. XML, AMF и т.п.) и пользуются механизмом межсайтового разделения контента (см, рис. 3). Киберзлоумышленник посредством своего злонамеренного сайта может побудить браузер своей жертвы (на клиентской стороне) создать один из таких потоков и использовать этот поток в качестве точки входа для CSRF-атаки (см. рис. 4) на подсистему межсайтового разделения контента (на серверной стороне).nnAV8. При возникновении событий вроде Drag&Drop браузер отправляет запрос к серверной части веб-приложе-ния, чтобы оно прислало программный код для обработки этого события. Киберзлоумышленник при желании может перехватывать такие события и подсовывать браузеру свой собственный обработчик события. Например, чтобы подменить обработчик для Drag&Drop, киберзлоумышленник может сделать инъекцию через setData. Для этого надо установить draggable в true и поставить обработчик на событие ondragstart;n
<div draggable="true" ondragstart="event.dataTranafer.setData('text/plain','code injection');
AV9. Благодаря WebWorkers стало возможным реализовывать многопоточные веб-приложения. WebWorkersnпозволяет браузеру запускать скрипты в фоновом режиме, чтобы они работали параллельно с главной страницей. Это очень привлекательная для киберзлоумышленников возможность, поскольку позволяет им запускать свой вредоносный код в невидимом режиме.nnAV10. Во многих веб-приложениях есть возможность добавления пользовательских виджетов, которые представляют собой небольшой кусок HTML с вкраплением JavaScript-кода. Виджеты запускаются в DOM родительского веб-приложения. Причем в некоторых случаях все запускаемые там виджеты разделяют общий DOM-контекст родительского приложения. Такая их особенность позволяет злонамеренному виджету получать доступ к важным тегам и переменным другого виджета. Например, к учетным данным для входа в систему. На рис. 5 представлен фрагмент кода злонамеренного виджета, который «слушает» события мыши и, как только вводятся учетные данные, вызывает самописные функции GetU и GetP, которые считывают эти параметры и отправляют их киберзлоумышленнику