[Информационная безопасность, JavaScript, Браузеры] Кросс-браузерный трекинг на основе перебора обработчика внешних протоколов
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В статье описывается способ создания кросс-браузерного идентификатора при помощи использования уязвимостей четырех популярных браузеров: Tor Browser, Safari, Chrome и Firefox. Ссылки на демо, исходный код.
Два месяца назад, в процессе исследования браузера Safari, я случайно наткнулся на уязвимость, позволяющую проверять наличие конкретного приложения на компьютере пользователя прямиком из браузера с использованием JavaScript.Проверяя список из 24 приложений на предмет присутствия в операционной системе можно создать 24-битный идентификатор. Такой идентификатор будет одинаковый во всех браузерах и позволит связывать сессии пользователей между браузерами. А если еще и обучить простую модель, то можно предсказывать профессию пользователя или страну, в которой он родился. Представьте, что на вашем компьютере установлена IDE для Python, PostgreSQL и телеграмм. Вы открываете случайную страницу в интернете, на которой написано, что вы бэкенд-разработчик из России, а еще там есть ваш идентификатор, который точно такой же даже в Tor Browser. Страшно?Идея крутая, и после нескольких месяцев исследований это стало реальным. Детали реализации описываются ниже, однако есть ограничения:
- Демо плохо работает для Linux. Хромиум браузеры открывают все приложения через xdg-open, поэтому детект приложений там не возможен вообще. Firefox работает не везде из-за кастомных настроек;
- По собранной статистике, 8% сессий показывают правильный результат со второго раза или не стабильный результат вообще;
- 15% идентификаторов в базе невалидные. Либо все приложения установлены, либо не установлено ничего;
- Демо проверяет наличие зарегистрированных протоколов, поэтому некоторые удаленные приложения отображаются как установленные;
- На момент прочтения статьи уязвимости могут быть исправлены. На момент написания - только Tor Browser подготовил PR с исправлениями.
Однако, если вы пользователь Windows или Mac, то демо покажет правильный результат с очень большой вероятностью. Баг репорты уже отправлены разработчикам браузеров и ссылки на них приводятся в конце статьи.Технические деталиДля проверки установленных приложений браузеры используют обработчики внешних протоколов. В каждой операционной системе есть список протоколов и каждое приложение может регистрироваться в нем.Если приложение существует в системе, то браузер покажет подтверждающее диалоговое окно для его открытия. Этот механизм называется Deep Linking.
Открытие ZoomИдея звучит просто - мы будем проверять показано ли данное диалоговое окно, и если нет, то приложение не установлено в системе. В реальности все гораздо сложнее. Браузеры обладают специальными механизмами для предотвращения подобных проверок. Именно уязвимости в данных механизмах позволяют провернуть нашу задумку. В конечной реализации используются CORS политики, особенности браузерных окон и iframe элементы.ChromiumДанный браузер обладает очень хитрым механизмом предотвращения перебора внешних протоколов. Он запрещает открытие любой внешний ссылки без действия пользователя (нажатия клавиш или кликов мышки). Существует глобальный флаг (один на все вкладки и процессы), который сбрасывается после каждого открытия внешней ссылки.
Однако, все функции кастомных Extension (дополнений) хрома сбрасывают этот глобальный флаг. Это сделано, чтобы Extensions могли открывать специальные ссылки (вроде mailto:) без подтверждения пользователей. Данную особенность можно использовать для обхода блокировки перебора протоколов.Здесь я вспомнил про встроенный Chrome PDF Viewer, который реализован как Extension. Мы можем открывать PDF файл после каждой проверки внешнего протокола и сбрасывать защиту от перебора.Конечный алгоритм:
- Вызвать переход на внешний протокол с помощью метода location.replace();
- Проверить наличие подтверждающего диалогового окна с помощью input Элемента. Дело в том, что при наличии данного окна невозможно фокусировать элемент ввода до тех пор, пока окно присутствует в браузере;
- Открыть любой PDF файл на другом домене, чтобы сбросить диалоговое окно и механизм защиты;
- Выполнять шаги 1-3 в цикле, чтобы проверить весь список приложений.
FirefoxЗдесь мы будем использовать механизмы same-origin policy. Создаем дополнительное окно и переходим по внешнему протоколу. Если приложение не установлено, то браузер покажет внутреннюю страницу, которая будет не доступна из JavaScript. Установленное приложение будет открыто как страница about:blank, которая доступна.
Конечный алгоритм:
- Открыть дополнительное окно с помощью метода window.open;
- Перейти по ссылке внешнего протокола с помощью метода location.replace;
- Проверить доступ к объекту document дополнительного окна. Если доступ есть, то приложение установлено в системе;
- Повторять шаги 2-3 для всего списка приложений.
SafariИспользуем тот же метод, что и в Firefox. Однако, при наличии приложения необходимо перезагрузить основную страницу (метод location.reload) для сброса подтверждающего окна.Tor BrowserРазработчики браузера, по-видимому, решили отключить диалоговые окна на открытие внешних приложений. Исходили из соображений безопасности, однако это сильно упрощает нам работу.Здесь не нужны никакие дополнительные окна. Мы просто будем использовать iframe элементы и проверять same-origin policy.
Проверять можно пассивно: делаем проверку каждые 10 секунд в фоне без требования к действиям от пользователей. Можно активно: показываем капчу на 24 символа и проверяем после каждого нажатия клавиши.ВыводыДанная уязвимость существует уже несколько лет, а многие разработчики браузеров о ней знают, если судить по баг репортам. Тем не менее, я не смог найти сайты, которые ее используют.Ссылки:
- Демо
- Исходный код
- Статья на английском
- Баг репорт для Chromium
- Баг репорт для Firefox
- Баг репорт для Safari
- Баг репорт для Tor Browser
===========
Источник:
habr.com
===========
Похожие новости:
- [Информационная безопасность, Серверное администрирование] Привет, Telnet! И пока. Команда OpenSSL s_client для зашифрованных соединений (перевод)
- [Информационная безопасность, Системное администрирование, Сетевые технологии] Использование и настройка локального API CrowdSec
- [Информационная безопасность, Облачные сервисы] Если не хватает NSX Edge: как клиенты нашего облака переезжают в сервис NGFW
- [Системное администрирование, Браузеры, Софт, IT-компании] Microsoft прекратит поддержку приложения Internet Explorer 11 в Windows 10 с июня 2022 года
- [JavaScript, API] DINS JS EVENING (online): параллелизм в вебе и есть ли жизнь после закрытия вкладки
- [Информационная безопасность, Браузеры, Софт, IT-компании] Firefox представил новую архитектуру безопасности браузера с изоляцией сайтов
- [JavaScript, Java, Карьера в IT-индустрии] Битва Java-разработчиков Tech Monsters Night от «М.Видео-Эльдорадо»
- [Информационная безопасность, Законодательство в IT, Карьера в IT-индустрии, IT-компании] Не человек для работы, а работа для человека: мои ошибки при организации стажировок для студентов
- [Информационная безопасность] Вслед за Colonial Pipeline криптовымогателям DarkSide заплатила многомиллионный выкуп Brenntag
- [Информационная безопасность, Социальные сети и сообщества, IT-компании] А. В. Щипков: Суверенизация Рунета принесёт пользу стране и Церкви
Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_javascript, #_brauzery (Браузеры), #_krossbrauzernost (кроссбраузерность), #_privatnost (приватность), #_treking (трекинг), #_informatsionnaja_bezopasnost (
Информационная безопасность
), #_javascript, #_brauzery (
Браузеры
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:20
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В статье описывается способ создания кросс-браузерного идентификатора при помощи использования уязвимостей четырех популярных браузеров: Tor Browser, Safari, Chrome и Firefox. Ссылки на демо, исходный код. Два месяца назад, в процессе исследования браузера Safari, я случайно наткнулся на уязвимость, позволяющую проверять наличие конкретного приложения на компьютере пользователя прямиком из браузера с использованием JavaScript.Проверяя список из 24 приложений на предмет присутствия в операционной системе можно создать 24-битный идентификатор. Такой идентификатор будет одинаковый во всех браузерах и позволит связывать сессии пользователей между браузерами. А если еще и обучить простую модель, то можно предсказывать профессию пользователя или страну, в которой он родился. Представьте, что на вашем компьютере установлена IDE для Python, PostgreSQL и телеграмм. Вы открываете случайную страницу в интернете, на которой написано, что вы бэкенд-разработчик из России, а еще там есть ваш идентификатор, который точно такой же даже в Tor Browser. Страшно?Идея крутая, и после нескольких месяцев исследований это стало реальным. Детали реализации описываются ниже, однако есть ограничения:
Открытие ZoomИдея звучит просто - мы будем проверять показано ли данное диалоговое окно, и если нет, то приложение не установлено в системе. В реальности все гораздо сложнее. Браузеры обладают специальными механизмами для предотвращения подобных проверок. Именно уязвимости в данных механизмах позволяют провернуть нашу задумку. В конечной реализации используются CORS политики, особенности браузерных окон и iframe элементы.ChromiumДанный браузер обладает очень хитрым механизмом предотвращения перебора внешних протоколов. Он запрещает открытие любой внешний ссылки без действия пользователя (нажатия клавиш или кликов мышки). Существует глобальный флаг (один на все вкладки и процессы), который сбрасывается после каждого открытия внешней ссылки. Однако, все функции кастомных Extension (дополнений) хрома сбрасывают этот глобальный флаг. Это сделано, чтобы Extensions могли открывать специальные ссылки (вроде mailto:) без подтверждения пользователей. Данную особенность можно использовать для обхода блокировки перебора протоколов.Здесь я вспомнил про встроенный Chrome PDF Viewer, который реализован как Extension. Мы можем открывать PDF файл после каждой проверки внешнего протокола и сбрасывать защиту от перебора.Конечный алгоритм:
Конечный алгоритм:
Проверять можно пассивно: делаем проверку каждые 10 секунд в фоне без требования к действиям от пользователей. Можно активно: показываем капчу на 24 символа и проверяем после каждого нажатия клавиши.ВыводыДанная уязвимость существует уже несколько лет, а многие разработчики браузеров о ней знают, если судить по баг репортам. Тем не менее, я не смог найти сайты, которые ее используют.Ссылки:
=========== Источник: habr.com =========== Похожие новости:
Информационная безопасность ), #_javascript, #_brauzery ( Браузеры ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:20
Часовой пояс: UTC + 5