- PVSM.RU - https://www.pvsm.ru -
Все последние версии браузеров поддерживают HTML5, следовательно, индустрия находится на пике готовности принять технологию и адаптироваться к ней. Сама технология создана такой, чтобы сделать простым процесс включения и обработки графического и мультимедиа-контента в вебе, без использования третьих плагинов или API. Эта статья расскажет о новых типах атак, которые HTML5 «подарил» миру.
Чтобы отвечать растущим потребностям разработчиков делать высококачественные сайты, HTML5 ослабил внимание к некоторым ограничениям, которые ранее провозглашались концепцией SOP [1] (same origin policy). Концепция имеет простые правила: скрипты, запускаемые на сайте, имеют доступ к методам и свойствам этого сайта, но не имеют такового к страницам другого сайта (SOP как таковое есть обширная отдельная тема, рекомендуем ознакомиться перед дальнейшим чтением).
Теперь HTML5 нарушает эти ограничения.
Например, AJAX-запросы могут выполняться между разными доменами. SOP ограничивает доступ JavaScript к контенту веб-страниц, предписывая обязательное условие: JavaScript и сам контент находятся на одном домене. Без такого ограничения, вредоносный веб-сайт может запускать яваскрипт, который подгружает персональную информацию с других сайтов, используя сохраненные аутентификационные данные пользователей, и возвращает информацию атакующему. Итак, HTML5 сделал возможным получение данных с других доменов с помощью JavaScript.
Так, в то время, как xyz.com разрешает получать данные, abc.com может сделать аякс-запрос к xyz.com и прочитать ответ. Эта особенность используется для туннелирования HTTP-трафика кросс-доменным вызовом.
AJAX вызывает и создает браузерный эквивалент реверсивного шелла с помощью простого инструмента «Shell of of the future [2]». Инструмент основан на концепции, что если атакующий в состоянии найти утечку кросс-доменного запроса, он может использовать начинку JavaScript (убедив пользователя нажать на ссылку) и его скрипт уйдет выполняться на сервер атакующего через кросс-доменный запрос. Используя эту брешь в будущем, атакующий может просматривать сессии жертвы с помощью туннелирования его запросов через браузер жертвы.
Важный вопрос: как сессия жертвы отображается для атакующего?
Это возможно, потому что скрипт, запускаемый браузером пользователя, начинает обращаться к сайту атакующего через Cross Origin Resource (без HTML5 это было бы невозможно). Таким образом атакующий просто туннелирует свой запрос через браузер жертвы.
С HTML5 стало возможным красть CSRF [3]-токены — если токен идет через URL (например, GET-запрос), пользуясь ранее названными правилами CORS [4]. Атакующий может произвести инъекцию в CSRF-начинку на странице, использующей кросс-доменные запросы, после чего создается запрос на целевой сайт, без оповещения об этом пользователя. Обратите внимание, что для CORS должен быть добавлен дополнительный HTTP-заголовок, называемый origin
. Смена значения атрибута withCredentials
на true
позволит угнать куки вместе с запросом. Заголовок сервера в таком случае должен быть Access-Control-Allow-Origin: *
. Вместо звездочки можно указать адрес конкретного домена или доменов, которым разрешено получить ответ. Если оставить звездочку — разрешение будет распространяться на все домены.
Пользователь и подозревать не будет, что происходит в фоновом режиме. Таким образом, HTML5 позволяет красть CSRF-токены и выполнять операции без ведома пользователя.
Многие коммерческие организации имеют внутренние сайты, которые используются для внутренних нужд бизнеса. Фактически это интранет-приложения, недоступные через интернет. Так как таких приложений существует множество, они должны как-то взаимодействовать друг с другом. И, в спешке, большинство разработчиков просто добавляют уже известный нам заголовок Access-Control-Allow-Origin: *
и включают CORS. Это может быть использовано атакующим, который может использовать социальную инженерию [5], чтобы заставить работника компании кликнуть на ссылку, после чего атакующий очень легко получает доступ к контенту.
Своеобразная «пошаговая инструкция»:
Access-Control-Allow-Origin: *
(Почему? Он хочет позволить другим сайтам в интранете получить доступ к данным сервера).Access-Control-Allow-Origin: *
.
Разработчики всегда любят делать собственные кастомные фильтры для того, чтобы блокировать XSS-атаки. Большинство из них заносят в черный список такие символы, как <img, <script
и так далее. HTML5 вводит множество новых тегов для поддержки мультимедиа и динамической загрузки аудио/видео. Новые теги, атрибуты и события могут, при должном старании, стать потенциальными векторами обхода XSS-фильтров. Ниже несколько возможных векторов, которые были собраны с различных ресурсов:
List of XSS vectors for HTML5
<video><source onerror="javascript:alert(1)">
<video onerror="javascript:alert(1)"><source>
<audio onerror="javascript:alert(1)"><source>
<input autofocus onfocus=alert(1)>
<select autofocus onfocus=alert(1)>
<textarea autofocus onfocus=alert(1)>
<keygen autofocus onfocus=alert(1)>
<button form=test onformchange=alert(2)>X
<form><button formaction="javascript:alert(1)">
Кэш офлайновых HTML-приложений используется большинством браузеров — Google Chrome, Mozilla, Opera, Safari и так далее. Так, приложение может кэшировать контент для того, чтобы сделать его доступным офлайн. Главная проблема такого кэша — это его уязвимость к классу атак под названием «отравление кэша». Если JS-файл конкретного сайта отравил атакующий — он может очень легко заполучить пользовательский аккаунт. Главное различие между нормальным кэшем и кэшем приложения на HTML5 в том, что первый не позволяет кэшировать все типы файлов, а второй — позволяет. Используя эту особенность, атакующий может украсть аутентификационные данные пользователя.
Давайте посмотрим, как атакующий может сделать это:
Таким образом, через отравление кэша веб-приложения, атакующий может украсть доступы пользователя. Это несколько атак, которые обнаружили специалисты по безопасности. В ближайшие годы, без сомнения, появится еще больше атак, основанных на специфике HTML5.
В качестве бонуса — авторитетный комментарий нашего главного защитника информации, Алексея Федоровича:
Собственно атаки на HTML5 как таковые используются довольно редко, злоумышленники не любят усложнять сам процесс получения доступа к конфиденциальным данным, в реальности все больше лидирует обычная компрометация почтовых ящиков, с дальнейшем восстановление паролей от необходимых ресурсов на этот ящик. Ну и конечно-же самый любимый способ всех черношляп, точная копия сайта-формы авторизации (фейк), например Facebook’а или вашего собственного, расположенный на сервере злоумышленника.
А CSRF, XSS, SQLinj и т.п. начинают искать на сайтах, только тогда, когда на той стороне сидит человек с головой и не помогает социальная инженерия + когда у злоумышленника достаточно времени и технических знаний для осуществления задуманного. Если вас захотят взломать, взломают, без вариантов. Можно лишь снизить порог проникновения и на первом уровне отсеять школьников со сканерами безопасности и хактулсами. Удачи.
Оригинал статьи на Onextrapixel [6].
Автор: zevvssibirix
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/blog-kompanii-sibiriks/60300
Ссылки в тексте:
[1] SOP: http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE_%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0
[2] Shell of of the future: http://blog.andlabs.org/2010/07/shell-of-future-reverse-web-shell.html
[3] CSRF: http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0
[4] CORS: http://ru.wikipedia.org/wiki/Cross-origin_resource_sharing
[5] социальную инженерию: http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%B8%D1%8F
[6] Оригинал статьи на Onextrapixel: http://www.onextrapixel.com/2014/04/25/html5-attacks-what-you-need-to-know/
[7] Источник: http://habrahabr.ru/post/223501/
Нажмите здесь для печати.