Добро пожаловать в HSBC, седьмой банк в списке крупнейших в мире. Конечно, страница, которую вы сейчас читаете расположена не на hsbc.com, а на jameshfisher.com. В то же время, если Вы посетите эту страницу с Chrome для мобильных устройств и немного полистаете её вниз — на странице с большой вероятностью отобразится адресная строка с hsbc.com:
(ссылка на страницу оригинала)
При скроллинге вниз в мобильной версии Chrome браузер скрывает строку отображения URL-адреса и передаёт её экранное пространство непосредственно веб-странице. Так как пользователь отождествляет это пространство с UI, заслуживающим доверия, фишинговый сайт использует его для выдачи себя за другой сайт, отображая поддельный URL-адрес — Inception-строку.
Далее ещё хуже. Обычно, когда вы листаете вверх, Chrome заново отображает URL. Мы можем заставить его этого не делать! В тот момент, когда браузер скрывает URL-строку, мы перемещаем всё содержимое страницы в т.н «скролл-камеру» (англ. scroll jail) — новый элемент, в котором применяется свойство «overflow:scroll». Теперь пользователь думает, что он листает страницу вверх, хотя на самом деле он листает «скролл-камеру». Так же как и спящие герои фильма «Начало» (англ. Inception), пользователь считает, что он в работает из своего браузера, хотя на самом деле он находится в браузере внутри браузера.
Видео:
Является ли описанный механизм серьёзной проблемой в безопасности? По правде сказать, даже я — создатель Inception-строки — случайно попался на эту уловку (по всей видимости, при своих же экспериментах — прим. переводчика). В связи с этим, я могу представить, скольких пользователей можно обмануть таким образом, в особенности — менее технически грамотных и осведомлённых. Пользователь может проверить правильность URL только при загрузке страницы. После того, как он пролистнул её вниз — шансов на спасение не так уж и много.
При проработке представленной концепции, я сделал скриншот адресной строки на сайте HSBC из Google Chrome и поместил его на эту страницу. Страница может определить ваш браузер и создать для него Inception-строку. Приложив еще больше усилий, Inception-строку можно сделать интерактивной. Даже, если не удалось обмануть пользователя на настоящей странице, вы можете попробовать ещё раз, после того как он введёт что-то наподобие gmail.com в строке Inception.
Как защитить себя от обмана? Если у вас появились сомнения насчёт аутентичности веб-страницы, не просто проверьте URL-бар, а обновите (или даже закройте и откройте заново) страницу, в которой вы сомневаетесь.
Если у браузера Google Chrome и подобных ему существует проблема в безопасности, то как её решить? Существует компромисс между увеличением экранного пространства и сохранением доверенной области на экране, такой, как сохранение малой части экранного пространства выше "линии смерти" вместо передачи всего пространства веб-странице. Chrome может использовать эту малую часть пространства для отображения факта скрытия адресной строки.
Описание схожей атаки — атака на основе Fullscreen API (англ.). Также — атака custom-курсор (2016) (англ.), работающая благодаря тому, что Chrome позволяет веб-странице установить свой курсор, который может быть перемещён за пределы viewport-а браузера.
Комментарии (21)
Alex_ME
28.04.2019 13:38Протестировал в мобильной Опере (да, я знаю, что это очень редкий браузер).
Помимо очевидного несоответствия строки браузеру, что можно решить, как написал автор, есть еще
- видимо, scroll jail работает в опере как-то неправильно, и как бы ты не скроллил страницу, оригинальная адресная строка не думает скрываться
- сразу бросилось в глаза неправильное количество вкладок
Ilyasyakubov
28.04.2019 13:46Схожая ситуация с мобильным Safari. Адресная строка не скрывается. Но даже когда скрывается на других сайтах, сверху все равно висит название сайта мелким шрифтом.
BkmzSpb
28.04.2019 15:36Аналогичное поведение в мобильном Firefox, показывает настоящий и фейковый бар. А вот открыв в Chrome — это могло бы меня обмануть, по крайней мере 1-2 раза кликнуть по фейковой строке предже чем понять, что что-то не так, я мог бы.
Porohovnik
28.04.2019 13:56
А вот и защита от данной атаки…lopatoid
29.04.2019 03:32+1И какой в этом смысл? Ну тогда можно просто запретить скрывать адрес бар, и всё. Разработчики Хрома же хотели дать пользователю больше места для отображения контента.
Porohovnik
29.04.2019 08:40Я браузер может и вот так:
tsukasa_mixer
28.04.2019 20:00Ну, если подумать, то доделать соответствие с системой, и браузер ом я так думаю можно
т.е. Различие может и пропасть.
id_potassium_chloride
29.04.2019 03:59На моём Google Chrome тоже появилось две строки состояния (хотя и не сразу). А ещё фейковая строка никак не может скопировать истинное количество открытых вкладок пользователя и поведение при нажатии на кнопку переключения между вкладками. Существенно (на мой взгляд) осложнено копирование шрифтов и стиля оформления в соответствии с версией браузера, ОС и конкретным устройством.
Кстати, ранее читал о похожей атаке для Desktop: страница создаёт фейковый элемент, который копирует всплывающее окно браузера в Windows. Если не пытаться увести его за границы окна браузера, то визуально окно не отличается от настоящего.
Kobalt_x
29.04.2019 09:34Нормально воспоизводится только на split-скрине. В другом случае резским скроллом вверх можно увидеть истинную адресную строку.
Tatikoma
29.04.2019 11:56После блокировки/разблокировки телефона, а так же после сворачивания/разворачивания браузера — появилась оригинальная строка.
Но в целом очень круто, не знал про такой хак со скроллом. Кмк, — баг в хроме в том, что пролистнув страницу наверх не появляется оригинальная строка. Думается мне, что условие возврата оригинальной строки должно быть несколько более сложным, нежели document.body.scrollTop == 0.
Есть баг-репорт в хроме или нужно написать?MadOokami
30.04.2019 00:52А в чем баг, если
Обычно, когда вы листаете вверх, Chrome заново отображает URL. Мы можем заставить его этого не делать! В тот момент, когда браузер скрывает URL-строку, мы перемещаем всё содержимое страницы в т.н «скролл-камеру» (англ. scroll jail) — новый элемент, в котором применяется свойство «overflow:scroll»
Т.е. есть возможность показать элемент, перекрыв строку с URL.
acyp
хз. у меня, возможно в силу привычки крутить страницу вверз-вниз на экране две строки. нижняя действительно фейковая, а сверху настоящая. но при совпадении нескольких моментов может и сработает.