• XSS.stack #1 – первый литературный журнал от юзеров форума

Разбор фингерпринта paypal.com

gcc

RAM
Пользователь
Регистрация
01.07.2019
Сообщения
124
Реакции
39
Краткий перечень функционала скрипта которым paypal.com выполняет фингерпринт браузера
Опишу прям по секциям, как оно идет в самом скрипте

- Набор различных полифилов:
  • Массивы
  • Дата
  • Query селекторы
  • Реализация JSON парсера
Ничего интересного. Наследие кросбраузерной совместимости.

- Секция init:
  • Проверка на каком домене работает скрит
  • Разбор конфига
  • Определение является ли устройство мобильным (этот код еще не разбирал)
  • Отстук на сервер через тег IMG
  • Если устройство не мобильное то запускается следующий функционал:
    • Слежение за курсором мыши
    • Слежение за нажатием кнопок на клавиатуре
    • Вставляется CollectorIframe (пока не разбирал что там происходит)
    • Выполняется обход DOM дерева и сбор строки из имен тегов
  • Если отловили ошибку то вызывается обработчик который отстукивает на сервер и скидывает инфу об ошибке (код, стек, ...)

- Секция констант:
  • Куча разных URL
  • Имен ключей localstorage
  • Имена ключей cookies
- Далее секция которую еще не разбирал, обзорно в ней
  • Что то кладут в localstorage
  • Парсят юзерагент на предмет типа браузера
  • Определяют тип приложения (appId: "paypal-gifts", name: "Checkout - Hermes")

- Перехват ошибок
Все примитивно, собирается структура данных об ошибке и отправляется на сервер упакованная в JSON

- Работа с датой, временем и таймзоной
Огромная секция кода посвещенная таймзоне. Очень похоже, что тут уши торчат из momentjs (ну а откуда бы еще;)
  • Массив описывающий имена таймзон
  • Массив уточняющий правила вычисления смещений

- Секция кода выполняющего Ajax запрос
Особо ничего интересного, похоже на какую то либу которая позволяет выполнить ajax запрос на сервер
Позволяет выполнять обычные и крос доменные запросы.


- Секция с куском библиотеки cryptoJS
Описывать особо нечего. Хотя в середине данного куска начинается код не из либы и его хорошо бы поковырять.


- Секция в которой отслеживается активна ли вкладка браузера или нет
Ведется какой то учет того, что вкладка становится активной или не активной.
Требуется уточнение.


- Секция в которой описывается создание IMG для отстука на сервер (BeaconImage)
Данные передаются через URL


- Обход DOM дерева и формирования строки со списком тегов
Очень похоже на то, что этот механизм может использоваться для детекта инжекта в код страницы.
<DIV <DIV <DIV <SCRIPT DIV <DIV <DIV <A A >MAIN <DIV <NOSCRIPT <DIV <P >>DIV FORM <DIV <DIV <DIV <H1 >>DIV <DIV <DIV <LABEL DIV <SELECT <OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION OPTION >>SPAN >>DIV <DIV <DIV <LABEL DIV <DIV <INPUT >>SPAN >>>DIV <DIV <DIV <LABEL DIV <DIV <INPUT >>SPAN SPAN >>>DIV <DIV <DIV <LABEL DIV <DIV <INPUT >>SPAN >>>>DIV <BUTTON >DIV <SPAN <BUTTON >SPAN <A >>>INPUT >DIV <SPAN A SPAN A SPAN A SPAN SPAN <A >>>>DIV >>NOSCRIPT NOSCRIPT >>>SCRIPT SCRIPT SCRIPT SCRIPT SCRIPT SCRIPT DIV <DIV SCRIPT DIV <SCRIPT NOSCRIPT >SCRIPT SCRIPT SCRIPT DIV >SCRIPT IFRAME IFRAME >

- Еще одна секция описывающая механизм отстука на сервер по средством создания тега IMG
Данные кодируются в JSON, энкодятся и цепляются в URL

- Секция сбора данных о браузере (часть #1)
Собираются следущие данные:
  • navigator: appName, appVersion, buildID, cookieEnabled, language, onLine, oscpu, platform, product, productSub, userAgent, vendor, vendorSub
  • screen: colorDepth, pixelDepth, height, width, availHeight, availWidth
  • window: outerHeight, outerWidth, innerHeight, innerWidth, devicePixelRatio
  • Реферер
  • Поддержка activeX
  • Версия флэша
  • Информация о таймзоне
  • Информация по различным таймингам: дельта времени загрузки ифрейма, fraudnetStart, p1Start
  • Детект браузер эмуляторов и средств автоматизации (фантом, селениум, ...)
  • Определение браузера (ФФ, Хром, ...)

- Отправка данных на сервер по средством POST AJAX запроса

- Секция сбора фингерпринта (часть #2)

В данной секции собираются следущие данные:
  • Информация о плагинах (если они есть): AcroPDF.PDF, AcroPDF.PDF.1, PDF.PdfCtrl, PDF.PdfCtrl.5, PDF.PdfCtrl.1, ShockwaveFlash.ShockwaveFlash, rmocx.RealPlayer G2 Control, rmocx.RealPlayer G2 Control.1, RealPlayer.RealPlayer(tm) ActiveX Control (32-bit), RealVideo.RealVideo(tm) ActiveX Control (32-bit), RealPlayer, SWCtl.SWCtl, WMPlayer.OCX
  • Информация о плагинах из navigator.plugins
  • Canvas fingerprint: классика + замер тайминга. Отрисовывает текст: "PayPal.com, <!@#$%>". Для анализа берет последние 50 байт картинки.
  • DOM parent data (требует уточнения)
  • VMAttributes: window.performance (инфа о памяти, кол-ве ядер и тп), информация о web GL (вендор, название видео карты, список поддерживаемых GL расширений, ...),
  • Тайминги опроса списка плагинов

- Отправка фингерпринта на сервер по средством POST AJAX запроса
В случае успеха данные с сервера пишутся в localstorage
В случае ошибки вызывается обработчик ошибок

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

- Анализ нажатия кнопок на клавиатуре
В данной секции на поля ввода развешиваются обработчики событий отвечающие за нажатия кнопок: keydown, keyup, paste
Сбор информации по нажатию кнопок и отправка отстуков на сервер.
Код востановлен и прокоменчен, требуется более детальный разбор логики.

- Последнюю секцию кода еще не разбирал и не анализировал.
Но обзорно в ней создается ифрейм, выполняются какие то инициализации и запускается вышеописанный функционал

P.S. Это репост куска моего же поста с экспы.
С того момента код был более детально разобран.
Многие пункты из перечисленных выше были уточнены и детализованы.
Я не стал переписывать пост, т.к. из него в принципе становится понятно как все устроено.
Более детально с радостью отвечу на все Ваши вопросы в коментариях.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх