Последние две недели в среде специалистов по веб-безопасности не утихали разговоры по поводу готовящейся публикации деталей новой атаки, позволяющей незаметно для пользователя “украсть” его клики. Первоначально предполагалось, что Robert Hansen, известный под ником “RSnake” и Jeremiah Grossman опубликуют доклад о найденной ими новой уязвимости, получившей название Clickjacking, на конференции OWASP в Нью-Йорке 24 сентября 2008 года, однако их выступление было отменено по просьбе компании Adobe, которая была крайне заинтересована в этой атаке, так как основной ее продукт, а именно Adobe Flash, был уязвим перед Clickjacking. Свою просьбу Adobe мотивировал желанием устранить уязвимость еще перед тем, как ее только начнут применять, тем самым обезопасив пользователей Flash. Разглашение подробностей произошло лишь недавно, после того, как на обозрение широкому кругу лиц был выставлен первый PoC от третьих лиц, которые самостоятельно провели собственное исследование, опираясь на ту небольшую информацию, которая все-таки просочилась в публичные блоги и сайты. Честно говоря, я ожидал большего и вся шумиха, которая была поднята по поводу Clickjacking, не сопоставима со значимостью угрозы самой атаки. Тем не менее, определенная степень опасности все же существует и исключать возможность проведения Clickjaсking разработчикам не стоит.
Clickjacking позволяет перехватывать клики мыши пользователя с целью нажатия на другие элементы, которые могут быть включены в контекст легитимного сайта, но без визуального отображения, что ведет к совершению пользователем непреднамеренных действий. Реализация атаки состоит в следующем: некий сайт A имеет в себе IFRAME, адресом которого является сайт B, к которому пользователь имеет доступ на основе авторизационных данных Cookie. Злонамеренный сайт A перекрывает страницу с сайта B таким образом, чтобы оставить видимым конкретный элемент, например кнопку “Удалить аккаунт”, “Добавить друга” и т.д. Сайт A может иметь такой интерфейс, который позволял бы рассматривать элемент с сайта B, как часть сайта A, побуждая пользователя нажать на него. Тем самым пользователь подвергается опасности соврешения абсолютно непредполагаемых им действий, который выгодны злоумышленнику. Добиться такого “перекрывания” интерфейса другого сайта можно с помощью метода CSS Overlay. Конечно все это выглядит мягко говоря не совсем практично, но возможности Clickjacking не ограничивается лишь подобным примером атаки. Например, Clickjacking ставит под сомнение эффективность метода защиты против CSRF с помощью токенов, о чем я писал в одном из предыдущих постов. Кроме того, возможна (точнее была возможна в связи с выходом патча) атака, при которой пользователь, нажимая на определенные области экрана, в дружелюбной игре, может поменять настройки Flash таким образом, что его компьютер превратился бы в настоящую станцию слежения с помощью веб-камеры или микрофона (разумеется, если таковые устройства подключены к компьютеру). Именно этот способ был раскрыт независимо от Гроссмана и Хансена, в следствие чего последний был вынужден снять завесу тайны с Clickjacking в своем блоге лишь недавно. Потенциальная уязвимость в Adobe Flash так и не стала реальностью, но мне удалось пощупать баг еще до выхода патча. Если вы не успели, то смотрите видео. Более подробно о всех тонкостях Clickjacking RSnake обещал рассказать в одноименном whitepaper’е, который готовится к выпуску на следующей неделе.
Меры по защите от Clickjacking могут быть предприняты как разработчиками веб-приложений, так и самими пользователями. Плагин для FireFox NoScript уже имеет защиту от Clickjacking, так что его пользователи могут быть уверены, что все их клики будут уходить только в одном направлении. Веб-разработчики также могут включить защиту в свои сайты, воспользовавшись достаточно простым способом, который носит название framebusting. Суть его заключается в том, что веб-приложение определяет не находиться ли оно во фрейме другого сайта, и если так, то просто выбирается из фрейма, и становится top’ом. Код приема:
var frameBusted = (top != self); if (frameBusted) top.location.href = '/index.htm';
В заключение хочу отметить, что, несмотря на всю противоречивость атаки, она может быть использована для превращения кликов в деньги путем непреднамеренного нажатия пользователем на рекламе (привет сеошникам). Возможно скоро будут известны первые удачные атаки.
Leave a Reply