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

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

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

Изначально сбор цифровых отпечатков устройств доступа предназначался для вполне себе цивилизованных и даже, можно сказать, благих целей. Предотвращение кражи личных данных и финансового мошенничества, предоставление таргетированной рекламы и DRM. Я думаю, сегодня каждый пользователь онлайн-банкинга сталкивался с примерами работы защитных систем на основе цифровых отпечатков. При смене устройства или, например, IP-адреса, с которого осуществляется доступ к банковскому счету, такие системы оповещают пользователя об этом и предлагают пройти идентификационную проверку (это, конечно, иногда подбешивает, но безопасность финансовых транзакций, чаще всего, того стоит). Также многие современные и привычные UI практики используют фингерпринты для предоставления пользователям более адресных услуг (геолокация, пользовательские настройки сайтов, настройки отображения, рекомендательные функции и др.).

За положительными сторонами использования фингерпринтов неотступно следуют и отрицательные: отслеживание, раскрытие и торговля конфиденциальными данными, навязывание услуг, ограничение свободы информации и, бог его знает, что еще (эта сфера не стоит на месте и постоянно развивается).

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

Усугубляет факт сбора информации непрозрачность этой процедуры для рядового пользователя. При текущих возможностях пользовательских устройств и скорости доступа к сети даже относительно большие объемы информации передаются практически мгновенно. Тем более эта информация передается в виде удобном для машин, а не человека. Конечно, специалисты и программные средства сетевого контроля вполне себе читают передаваемые данные (хорошую аналогию можно увидеть в «Матрице», когда операторы свободно читают код матрицы с экрана).

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

Неисчислимое (в идеале) количество комбинаций пользовательского поведения и предпочтений — основное препятствие, но есть и другие, более «материальные» ограничения, налагаемые механизмами защиты (например, защитой от DDoS), развернутыми на сайте. Эти ограничения не позволяют использовать традиционные методы на основе машинного обучения с интенсивным использованием данных. Уникальность совокупности предпочтений, поведенческих паттернов и технических особенностей конкретного устройства, с которого осуществляется доступ в сеть, очень схожа с неповторимостью отпечатков пальцев, поэтому и технология приобрела такое название.

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

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

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

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

Snoopy использует методы статистического анализа для прогнозирования изменений, вызванных различными пользовательскими особенностями. В совокупности использование фреймворка и методы ML обеспечивают точность предсказания поведения пользователей около 97%.

Рис. 1 Snoopy, общие цели.
Рис. 1 Snoopy, общие цели.

Ранее предлагавшиеся методы фингерпринтинга не подходят для массового анализа трафика даже с использованием только HTTPS (без Tor/VPN). Практическое массовое наблюдение требует обобщенной модели, идентифицирующей страницы независимо от контекста просмотров (браузер, ОС, количество вкладок и т. д.) и параметров сети во время сеанса.

Создание обобщенной модели, которая учитывает все возможные контексты просмотра, достаточно сложная задача. Основным препятствием для обобщения является огромное количество данных, необходимых для каждой страницы, с учетом всех возможных вариаций контекста. Например, для построения обобщенной модели для трех операционных систем и браузеров потребуется в 9 раз больше выборок трафика по сравнению со сценарием «одна система — один браузер». Более того, для достижения точности, обещаемой алгоритмами DL/ML, важно собрать достаточное количество выборок трафика для каждого сценария. Кроме того, любые изменения на сайте также требуют свежего сбора образцов трафика. Таким образом, обобщение существующих методов требует особой модели запросов, позволяющей злоумышленнику множественные обращения к сайту в течение короткого промежутка времени без риска обнаружения. Однако на практике защита от атак обнаруживает и блокирует IP-адреса, предпринимающие такие попытки, пачками и без особого напряга. Идентифицируются и блокируются IP-адреса, вызывающие аномалии в аналитике, в том числе связанные с попытками многократной выборки.

Поэтому для обхода этого препятствия ранее предполагалось наличие следующей информации:

1) Интересы пользователя. В идеале предполагается, что пользователя интересует только подмножество страниц. Однако при массовом контроле необходимо учитывать весьма широкий спектр интересов пользователей.

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

3) Предпочтения пользователя. ОС, используемый браузер, настройки кэширования, cookie. Для массовых наблюдений необходимо учитывать самые различные комбинации этих предпочтений.

4) Условия сети. В существующих практических исследованиях модели прогнозирования приведены к конкретным состояниям сети (географическое положение, провайдеры и др.).

Упрощенные методики обобщения без добавления достаточного количества данных для охвата сложных сценариев приводят к низкой точности прогноза. Ограниченное количество обучающих выборок накладывает ограничения на использование методов DL/ML. Snoopy отвечает большинству требований обобщений с учетом конечной модели запросов.

Разнообразие сетевых условий с точки зрения технических данных (джиттера, полосы пропускания и скорости отбрасывания пакетов) также влияет на фингерпринтинг. Учет этих различий по стольким факторам затруднен из-за технических ограничений. Использование файлов cookie еще больше усложнило процесс фингерпринтинга, даже для целенаправленных атак. Трекинговые cookie, используемые на сайтах, и сессионные cookie, включенные в заголовки прикладного уровня, приводят к изменению размера ресурсов. Для учета этих вариаций в предыдущих исследованиях использовались либо сложные методы (комбинации алгоритмов кластеризации, распределение Гаусса, скрытая Марковская модель и алгоритм Витерби), дополненные большими наборами данных, или упрощающие предположения о поведении пользователя.

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

1. Целью массового наблюдения является понимание интересов множества пользователей сайта. Следовательно, ограничительные предположения об интересах пользователей неуместны в контексте массового наблюдения.

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

Структура Snoopy

Рис. 2. Компоненты Snoopy
Рис. 2. Компоненты Snoopy

Наш антагонист — это скомпрометированное сетевое устройство на пути клиент-сервер, которое может (1) получить доступ к незашифрованным полям заголовков как пакетов управления, так и пакетов данных; и (2) наблюдать за характеристиками трафика, такими как размер зашифрованных пакетов.

Допущения и область применения

Предположения о контексте, в котором злоумышленники могут использовать Snoopy:

— не рассматриваются сайты, на которых размещается динамический или высоко персонализированный контент, например, сайты социальных сетей и поисковые системы, в качестве целей для предполагаемой атаки;

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

Snoopy должен скомпрометировать сетевое устройство, имеющее доступ ко всем зашифрованным пакетам прикладного уровня, которыми обмениваются клиент и сервер в течение всего сеанса (не берем случаи динамического изменения маршрута, например, из-за ненадежности соединений).

Общий обзор

Фреймворк состоит из базы данных (Snoopy Database), предназначенной для хранения информации (фингерпринтов и дополнительных метаданных), и двух функциональных модулей: модуля профилирования (Webpage Profiling Module) и модуля прогнозирования (Webpage Prediction Module). На рис. 2 обобщенно показаны различные компоненты фреймворка и их работа.

Первичный запуск фреймворка инициирует заполнение базы данных, для чего служит модуль профилирования, запускаемый с идентификатором сайта (IP/URL), как показано на первом шаге. Функция этого модуля — сбор информации о сайте. Входными данными для него являются идентификатор сайта и набор функций, которые будут использоваться для фингерпринтинга. Изначально механизм конечных запросов в этом модуле обеспечивает целенаправленный сбор образцов трафика с целевого сайта. Впоследствии этот трафик расшифровывается, и как зашифрованная, так и расшифрованная версии образцов трафика передаются механизму статического анализа. Хотя Snoopy не требует ключей дешифрования пользователей во время атаки, ему все же необходимо расшифровывать образцы трафика, которые он генерирует самостоятельно на этапе профилирования. Это необходимо для отличия открытых ресурсов (например, HTML, JavaScript, изображений) каждой страницы от их зашифрованных аналогов.

Окончательный вывод модуля профилирования включает информацию, относящуюся:

(1) к структуре сайта;

(2) последовательности загрузки ресурсов для каждой страницы;

(3) подписи этих ресурсов; 

(4) и другим соответствующим метаданным сайта, таким как возможность кэширования и информация о кукисах.

Как только база данных заполняется, фреймворк сообщает о готовности к прогнозированию, как показано на втором шаге. Модуль прогнозирования принимает в качестве входных параметров зашифрованную трассировку трафика T пользователя (третий шаг на рис. 2), и прогнозирует страницы, к которым осуществляется доступ в T, используя информацию, хранящуюся в базе данных. Предсказание выполняется в два этапа. В первую очередь извлекаются значения функций из входной трассировки T, и выполняется поиск в базе данных, чтобы получить последовательность ресурсов-кандидатов, присутствующих в T. Затем эта последовательность и метаданные используются для прогнозирования окончательного набора страниц (шаг 4 на рис. 2).

Наиболее уникальной и важной особенностью Snoopy является его способность соответствовать конечной модели запросов, сохраняя при этом возможности обобщения. Достижение такого баланса между обобщением и конечным числом запросов чрезвычайно сложно. Эта проблема решается использованием:

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

целенаправленного сбора данных и оценки ценности функций для сбора образцов трафика с целевого сайта.

Snoopy оценивает вариации значений признаков в различных контекстах просмотра с использованием статического анализа заголовков HTTP и полезной нагрузки.

Предсказуемость фингерпринтов

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

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

1. Операционная система. Используемая система влияет на размер сегмента пакетов TLS несколькими способами. Во-первых, размер сегмента TLS ресурса зависит от реализации TLS в соответствующей ОС. Разные системы начинают с одной и той же записи TLS, но разбивают ее на сегменты разного размера. Хотя не ожидалось, что это повлияет на размер сегмента TLS, заметны небольшие различия при вычислении суммы размеров сегментов TLS. Более глубокий анализ показал, что количество и размер сегментов влияет на метаданные, связанные с каждым сегментом TLS, несколькими способами, которые, к счастью, предсказуемы. Во-вторых, в каждый сегмент TLS добавляются заголовки. Поэтому, если запись разбита на несколько небольших сегментов TLS, общее количество байтов заголовка TLS для всех сегментов будет больше, чем общее количество байтов заголовка TLS, добавленных в случае, если запись была разбита на меньшее количество больших сегментов. В-третьих, переменное поле в заголовке HTTP, а именно строка UA, содержащая имя ОС, также влияет на размер записи TLS.

2. Браузер. Имя браузера косвенно влияет на размер сегмента TLS, поскольку оно также является частью строки пользовательского агента. Поскольку разные имена браузеров имеют разную длину, они влияют на длину строки UA, что, в свою очередь, приводит к изменению размеров записей TLS.

3. Последовательность просмотра, с которой пользователь просматривает страницы, влияет как на размер записи TLS, так и на последовательность загрузки ресурсов (кэширование, cookie).

Кэширование: когда пользователь посещает страницу, содержащую ранее загруженный ресурс, ресурс не загружается, если включено кэширование, что приводит к изменению последовательности загрузки ресурсов. Например, если пользователь посещает страницу WX (состоящую из ресурсов r1 и r2), за которой следует страница WY (состоящая из ресурсов r1 и r3), общая последовательность загрузки ресурсов будет следующей: r1-r2-r3. С другой стороны, если бы кэширование было отключено, это привело бы к следующей последовательности: r1-r2-r1-r3.

Cookie: когда пользователь разрешает сайту использовать cookie, сервер отправляет файл cookie в заголовке HTTP вместе с первым ресурсом, доставленным во время сеанса. Добавление файла cookie увеличивает размер записи TLS для первого ресурса. Следовательно, ресурс будет иметь больший размер записи TLS, если он загружается в начале сеанса. Кроме того, отслеживающий cookie влияет на размер полезной нагрузки передаваемого ресурса. Такие cookie содержат информацию о поведении пользователя при просмотре, такую как URL ранее просматриваемых страниц в сеансе. Поскольку URL разной длины, изменение размера записи TLS из-за cookie зависит от страницы, посещенной пользователем в последний раз. Кроме того, трекинговые cookie содержат нулевое значение для первого ресурса, доставленного во время сеанса просмотра.

Опять же, это приводит к изменению размера записи TLS в зависимости от последовательности просмотра пользователем. Например, если размер ресурса r1 равен s1, а размер cookiesc, то размер записи TLS для r1 будет (s1 + sc), если r1 — первый загружаемый ресурс. С другой стороны, если r1 загружается после того, как пользователь посетил страницу с длиной URL tc (а также размером отслеживающего cookie) в сеансе просмотра, размер записи TLS для r1 будет (s1 + tc).

4. Протокол прикладного уровня. Группа пакетов, составляющих ресурс, имеет решающее значение для вычисления размера зашифрованного ресурса. Для HTTP/1.x пакеты, принадлежащие ресурсу, имеют один и тот же номер TCP ACK, что упрощает процесс. Однако для сайтов HTTP/2 и HTTP/3 это не одно и то же из-за конвейерной обработки и многопоточных операций сервера.

При многопоточности пакеты, принадлежащие двум разным ресурсам, могут чередоваться в одном и том же потоке TCPHTTP/2) или потоке QUICHTTP/3). Чтобы справиться с такими сложными сценариями, фреймворк вычисляет размеры зашифрованных ресурсов на сайтах HTTP/2. Для сайтов HTTP/3 он отбрасывает пакеты установления соединения QUIC, чтобы протокол связи возвращался к HTTP/1.1 или HTTP/2.

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

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

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

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

Основной задачей написания этой статьи, я считаю, освещение того факта, что средства отслеживания действий пользователей в сети не стоят на месте, при учете того, что право на конфиденциальность еще никто не отменял. В следующей статье немного подробней рассмотрим работу фреймворка Snoopy, а пока пусть пребудет с вами приватность и конфиденциальность)))!

P.S. «Если ты не параноик, это еще не значит, что за тобой не следят»!


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

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