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

Все началось с Google YOLO


Мое путешествие началось когда я наткнулся на отличный блог-пост под названием Google YOLO, автором которого является @filedescriptor, о clickjacking-уязвимости сервиса Google YOLO (You Only Login Once), веб-виджета, который обеспечивает встраиваемую авторизацию одним щелчком на веб-сайтах. Я настоятельно рекомендую вам зайти и прочитать блог-пост, который описывает и интерактивно демонстрирует технику clickjacking.

Вкратце, проблема конфиденциальности заключается в том, что можно создать веб-сайт с виджетом Google YOLO и замаскировать виджет как безвредную кнопку. При нажатии на безвредную, на первый взгляд, кнопку, жертва неосознанно авторизируется под своей учетной записью Google, передавая владельцу веб-сайта свою личность, включая полное имя и адрес электронной почты.

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

Когда я впервые наткнулся на блог-пост Google YOLO, Google уже устранили проблему, ограничив функцию лишь партнерскими веб-сайтами. В данном блог-посте также описана техника clickjacking с помощью виджета «Like» от Facebook, но при нажатии на кнопку, виджет запросил подтверждение:

image

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

В итоге, я пришел к выводу что крупные компании решили данную проблему, и ненадолго забыл об этом, до тех пор пока у меня не возникла новая идея…

Виджет комментариев от Facebook: «typejacking»


Однажды, гуляя по просторам интернета, я наткнулся на веб-сайт, который использовал Фейсбуковский виджет комментариев, чтобы дать возможность посетителям комментировать на сторонней странице. В этот момент я вспомнил о прочитанном ранее, и подумал: проблема clickjacking решена крупными компаниями, но как насчет «typejacking»? Что если я возьму виджет комментариев и вставлю его на свой веб-сайт, замаскировав его как не связанную с этим форму? Затем, если я смогу убедить жертву вписать в нее текст, любой текст, и отправить его в виде Facebook-комментария на мою страницу, я смогу узнать ее личность, проверив в Фейсбуке какая учетная запись только что опубликовала комментарий.

С этой мыслью я начал работать над веб-страницей, которая демонстрирует данную технику. В процессе я случайно обнаружил, что виджет «Like», который, как мне казалось, требует подтверждения, работает без подтверждения на моей веб-странице! Читая о виджете в интернете, я обнаружил, что Facebook, в отличие от Google, использует черный список для защиты от clickjacking.

То, как в Facebook решили защитить своих пользователей от clickjacking, может защитить от массового сбора лайков — в Фейсбуке могут заметить, что большое количество лайков приходит с одного сайта, добавить подтверждение, и даже отменить лайки. Но это не защищает от угрозы деанонимизации. Злоумышленник может легко создать новый веб-сайт и использовать clickjacking с виджетом «Like», затем отправить страницу ограниченному количеству жертв и раскрыть их личности, отслеживая лайки на Facebook.

К моему удивлению, техника «likejacking» — термин, описывающий технику clickjacking для получения лайков, известна как минимум с 2010 года. И сегодня, 9 лет спустя, она все еще остается актуальной. Кроме того, когда речь идет о «likejacking», проблема деанонимизации редко упоминается. О проблеме деанонимизации публично писали, по крайней мере, еще в 2012 году, но все же, я считаю что об этом знает недостаточное количество людей, особенно для нашего времени, когда все больше и больше людей понимают важность конфиденциальности в Интернете.

Насчет техники typejacking, я все таки дописал веб-страницу, которая демонстрирует атаку. Можете поэкспериментировать сами или посмотреть видеозапись:



Clickjacking, typejacking… что еще?


Размышляя о технике clickjacking, я подумал, что еще можно сделать, используя возможность вставлять и манипулировать сторонними виджетами на вредоносном веб-сайте. Техники clickjacking и typejacking рассчитаны на взаимодействие пользователя с виджетом. Что если вместо этого мы убедим пользователя предоставить нам информацию из виджета?

Оказалось что кто-то уже об этом подумал до меня. Быстрый поиск привел меня к статье Tell Me About Yourself: The Malicious CAPTCHA Attack («Расскажи мне о себе: зловредная атака с помощью CAPTCHA»), в которой анализируется эта техника. Вот пример из статьи, который демонстрирует как злоумышленник может обмануть жертву и заставить неосознанно раскрыть свое имя, маскируя виджет как невинную капчу:

image

Предотвращение clickjacking для владельцев сайтов


На сегодняшний день все еще нет надежного способа предотвращения clickjacking.

В 2009 году был представлен HTTP-заголовок X-Frame-Options, который предлагает частичную защиту от clickjacking. Заголовок позволяет владельцу веб-сайта указать, какие страницы не должны находиться во фрейме. Браузер поддерживающий заголовок откажется загружать эти страницы во фрейме. Несмотря на то, что в некоторых случаях это предотвращает clickjacking, это не помогает с виджетами, которые должны грузиться во фрейме, такими как виджет «Like» или виджет комментариев.

Глядя на заголовок X-Frame-Options, я подумал, почему бы не сделать похожую опцию, которая предоставит определенную меру защиты, все еще позволяя веб-странице грузиться во фрейме? Подумайте, например, о виджете «Like»: есть ли хорошая причина веб-странице рисовать поверх кнопки? Изменять размер или прозрачность кнопки? Делать какие-либо другие манипуляции, такие как фильтры CSS? Единственная причина, которую я могу представить, это clickjacking. Почему бы не ввести новую опцию X-Frame-Options, такую как X-Frame-Options: Isolate, которая позволяет веб-странице грузиться во фрейме, но гарантирует, что фрейм не может быть изменен, а родительский веб-сайт не может рисовать поверх него. Как и с предыдущими идеями, и это уже кто-то предложил до меня.

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

Обновление: Оказывается, Chrome предоставляет владельцам виджетов возможность обнаруживать clickjacking с помощью функции Intersection Observer v2. Эта функция включена по умолчанию начиная с Chrome 74, выпущенного в апреле 2019 года. К сожалению, в настоящее время только Chrome реализует ее, и ее не так просто использовать — по крайней мере, посложнее добавления заголовка. См. статью Trust is Good, Observation is Better («Доверие — хорошо, наблюдение — лучше») для дополнительной информации.

Предотвращение clickjacking для пользователей


Перепробовав несколько решений, я пришел к выводу, что блокирование сторонних файлов cookie (third-party cookies) является наилучшим способом предотвращения утечки информации посредством clickjacking. Это не предотвращает саму технику clickjacking, но поскольку встроенный фрейм не получает файлы cookie посетителя, данный фрейм не будет особо полезен злоумышленнику.

Плюс опции блокирования сторонних файлов cookie в том, что в большинство браузеров эта опция встроена изначально. Не нужно устанавливать никаких сторонних расширений или искать разные решения для разных браузеров или устройств.

Недостатком является то, что виджеты, такие как виджет «Like» или виджет комментариев, перестанут работать на всех сайтах. Я не очень по ним скучаю, но, возможно, не всем такая опция подойдет.

Еще одним преимуществом блокировки сторонних файлов cookie является то, что блокировка может защитить от атак по сторонним каналам (side-channel attack), которые не требуют вмешательства пользователя. Например, этот метод демонстрирует использование функции CSS3 для деанонимизации пользователей Facebook без дополнительного взаимодействия пользователя с веб-страницей. Другим примером старой, но интересной уязвимости, которую можно предотвратить, заблокировав сторонние файлы cookie, является Generic cross-browser cross-domain theft, которая пользуется лазейкой в спецификации CSS чтобы заставить браузер использовать страницу другого источника (cross-origin) как CSS и получить доступ к определенной информации (issue проекта Chromium).

Заключение


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

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

P.S. На Хабре писали о подобной проблеме на сайте ВКонтакте 5 лет назад. Похоже что демо уже не работает (требуется подтвердить действие во всплывающем окне), но, как видите, тема все еще актуальна. Возможно на сайте ВКонтакте есть другой виджет который можно использовать, например виджет комментариев. Но, к сожалению, в той статье автор не упомянул о блокировке сторонних файлов cookie.

Комментарии (0)