Что еще о Вас может знать браузер

от автора

Всем известно, что находясь внутри браузера, нельзя извлечь достаточное количество информации о его пользователе с помощью простого JavaScript. Служебная информация, вроде имени браузерного движка, операционной системы и их версий хоть и дает общее представление о пользователе (и об аудитории в целом), но все же не является всеобъемлющей.

Для комплексного анализа пользователя используется User-ID в Universal Analytics, но с помощью независимых программных компонентов, запущенных и находящихся где-то в памяти компьютера рядом с браузером, тоже можно собирать данные о пользователе. Полученная непосредственно из памяти браузера информация позволит осуществить анализ как отдельного пользователя, так и всей аудитории. Здесь будет рассмотрено семейство браузеров на движке Webkit и на конкретном примере браузера Google Chrome.

image

Браузер как хранилище интересной информации

Ежедневно миллионы людей доверяют своему веб-браузеру самую сокровенную информацию: личные и банковские данные, списки избранных сайтов. Большая часть действительно «вкусной» информации (в первую очередь, для злоумышленников) скрывается как самим браузером (менеджеры паролей с шифрованием), так и веб-ресурсами, которыми люди пользуются с помощью браузера (безопасно написанный и отлаженный код, SMS-оповещения/подтверждения и т.д). Но помимо этого остаются открытыми и легкодоступными данные, вроде исходного кода страниц. Ведь именно там и находится большинство того материала, на основе которого и можно произвести комплексный анализ пользователей. И материал этот отнюдь не одного лишь технического характера.

Сами по себе браузеры (особенно на базе Chromium) построены таким образом, чтобы о пользователях «утекало» как можно меньше информации во внешний мир. Т.е разработчики всячески пытаются обезопасить людей от всевозможных, пусть даже и несущественных утечек. Google Chrome, к примеру, создает для каждой отдельной вкладки свою «песочницу» в виде отдельного процесса. О деталях можно узнать, перейдя по локальной ссылке: chrome://memory Логично предположить, что каждая такая отдельная вкладка-процесс хранит исходный код собственной страницы.

Как узнать то, что знает браузер?

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

Для демонстрации был создан небольшой тестовый проект на C#, позволяющий собирать сорцы исходного кода из памяти браузера. Исходный код проекта можно посмотреть в репозитории BitBucket. Утилита для непосредственного использования — здесь.

image

Теперь стоит понять, от чего же зависит качество сбора информации из исходных кодов открытых страниц браузера, располагающихся в памяти. Chromium — это OpenSource-проект, так что достаточно немного покопаться в его исходном коде, чтобы прояснить многие базовые аспекты.

Например, то, как устроена страница веб-документа. В классе Document, являющимся частью движка WebKit, есть вот такой код(С++):

... // "body element" as defined by HTML5 (https://html.spec.whatwg.org/multipage/dom.html#the-body-element-2). // That is, the first body or frameset child of the document element. HTMLElement* body() const;  // "HTML body element" as defined by CSSOM View spec (http://dev.w3.org/csswg/cssom-view/#the-html-body-element). // That is, the first body child of the document element. HTMLBodyElement* firstBodyElement() const; ... HTMLHeadElement* head() const; ... 

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

Сочетая эту информацию со знаниями о том, как операционная система выделяет память для нового программного объекта, получается, что находиться в памяти HTML код страницы может в совершенно раздробленном виде.

Сканирование памяти и вычленение разведданных

Предположим, один из пользователей открыл у себя в браузере новую вкладку (вот такую). Что в этом простом случае, казалось бы, можно извлечь?

Например, то, что искал пользователь в поисковой системе, и что еще не было стерто браузером из памяти:

Группа подсказок:

  • какой фильм посмотреть.

Можно узнать и некоторые персональные данные. Например, почтовый ящик конкретного пользователя:

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

Часто полезную информацию получается извлечь благодаря механизму так называемого «межсайтового сопряжения». Например, когда определенные веб-ресурсы поддерживают авторизацию через аккаунт Google+, Facebook и т.д. В таком случае уже удастся получить наиболее приближённые к конкретному пользователю аналитические данные.

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

Nastya Ivanova
прокомментировал видео на YouTube
Доступно всем в Интернете — 2014-04-05 undefined
undefined
undefined
undefined

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

Что в итоге?

Часто бывает так, что крупные веб-проекты выпускают отдельные приложения для своих клиентов. Эти приложения, как правило, функционируют с браузером на одном уровне — на уровне операционной системы. Такой подход позволяет не только упрощать некоторые функции для пользователя, но и собирать о нем ценные аналитические данные, которые редко представляется возможным собрать в пределах самого браузера стандартными методами веб-аналитики. Некоторые производители клиентских приложений могут даже получать из памяти браузера глубоко личные данные, чтобы максимально «узнать» своего пользователя.

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

Конспект

  • Исходный код проекта, который собирает информацию о пользователе можно посмотреть тут.
  • Аналог подобного процесса — использование User-ID в Google Analytics.
  • Самые точные данные о пользователе можно получить благодаря межсайтовому сопряжению (аккаунты соц. сетей).

ссылка на оригинал статьи http://habrahabr.ru/post/263063/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *