Home Research ДеанонимизаTOR: где заканчивается анонимность в даркнете

ДеанонимизаTOR: где заканчивается анонимность в даркнете

by Denis Makrushin
2.9K views

ДеанонимизаTOR: где заканчивается анонимность в даркнете

В отличие от традиционных технологий World Wide Web, технологии «луковой маршрутизации» даркнета Tor дают пользователям реальный шанс остаться анонимными. Этим шансом воспользовались многие, но одни сделали это для самозащиты или из любопытства, тогда как другие ощутили ложное чувство безнаказанности и увидели возможность анонимно вести дела – торговать запрещенными товарами, распространять запрещенный контент и т.д. Однако дальнейшие события, например, арест создателя сайта Silk Road, убедительно доказали, что анонимный бизнес на самом деле не такой уж анонимный.

Материал подготовлен совместно с Марией Гарнаевой специально для Securelist

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

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

Как вычисляют пользователей?

История развития даркнета Tor знает много теоретических способов и практических попыток деанонимизации пользователя. Все они условно делятся на две группы: атаки на клиентскую сторону (браузер) и атаки на соединение.

Проблемы браузеров

Из утекших документов NSA можно узнать, что спецслужбы не брезгуют использовать эксплойты к браузеру Firefox, на базе которого построен Tor Browser. Однако использование средств эксплуатации уязвимостей, как пишут в своей же презентации NSA, не позволяет осуществлять постоянную слежку за пользователями даркнета, так как жизненный цикл эксплойтов очень короткий, и существование разных версий браузера (содержащих конкретную уязвимость и не содержащих ее) ставит под удар очень узкий круг пользователей.

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Утекшие материалы NSA с обзором различных вариантов деанонимизации пользователей Tor (Источник: www.theguardian.com)

Кроме псевдоофициальных документов Tor-сообщество знает о других, более интересных и хитрых атаках на клиентскую сторону. Так, например, исследователями из Массачусетского Технологического Института было установлено, что Flash создает выделенный канал коммуникации между специальным сервером злоумышленника, который фиксирует реальный IP-адрес клиента, и жертвой, что полностью ее дискредитирует. Однако разработчики Tor Browser оперативно отреагировали на данную проблему, исключив обработчики Flash-контента из своего детища.

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Flash как способ узнать настоящий IP-адрес жертвы (Источник: http://web.mit.edu)

Для реализации другого, более свежего способа компрометации браузера используется библиотека WebRTC. Она предназначена для организации канала передачи видеопотока между браузерами с поддержкой HTML5, и по аналогии с вышеописанным Flash ранее позволяла установить реальный IP-адрес жертвы. Так называемые STUN-запросы WebRTC идут в незашифрованном виде в обход Tor со всеми вытекающими последствиями. Однако и это «недоразумение» также было оперативно исправлено разработчиками Tor Browser, который теперь по умолчанию блокирует WebRTC.

Атаки на канал

В отличие от атак на браузер, атаки на канал между Tor-клиентом и сервером внутри или вне даркнета выглядят не так убедительно – большинство концепций, представленных учеными в лабораторных условиях, пока еще не нашли своего PoC «в полях».

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

  • Номер версии протокола;
  • Номер записи;
  • Входящий и исходящий сетевой интерфейс;
  • Время начала и конца потока;
  • Количество байт и пакетов в потоке;
  • Адрес источника и назначения;
  • Порт источника и назначения;
  • Номер протокола IP;
  • Значение Type of Service;
  • Для TCP-соединений — все наблюдаемые в течение соединения флаги;
  • Адрес шлюза;
  • Маски подсети источника и назначения.

Все это практически деанонимизирует клиента.

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Деанонимизация Tor-клиента на основе анализа трафика (Источник: https://mice.cs.columbia.edu)

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

Пассивная система мониторинга

Каждый резидент сети может предоставить свои вычислительные ресурсы для организации Node-сервера – узлового элемента сети Tor, который выполняет роль посредника в информационном обмене клиента сети. Существует несколько типов узлов в данном даркнете: промежуточные (relay node) и выходные (exit node). Последние являются крайним звеном в операции расшифровки трафика, а значит, представляют собой конечную точку, которая может стать каналом утечки интересной информации.

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

Однако решение задачи агрегации актуальных сайтов лежит на поверхности. Для того чтобы составить список недавно посещенных пользователем даркнета onion-ресурсов необходимо отслеживать факт обращения к ним. Как известно, exit node является конечно точкой на пути следования зашифрованных пакетов внутри даркнета, а значит мы можем свободно перехватывать пакеты HTTP/HTTPS-протоколов в момент их расшифровки на exit node. Другими словами: если пользователь использует даркнет как посредника между своим браузером и веб-ресурсом в традиционном «вебе», то последний узел (exit-node) Tor’а будет являться местом, в котором пакеты идут в открытом виде и доступны для перехвата.

Известно, что HTTP-пакет может содержать информацию о посещенных ранее ресурсах, в том числе onion. Данные находятся в заголовке запроса «Referer», который может содержать URL источника запроса. В традиционном «вебе» данная информация помогает веб-мастерам определить по каким запросам в поисковых системах и с каких сайтов переходят пользователи подконтрольного веб-ресурса.

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

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

Во-первых, в конфигурационном файле torrc (этот файл находится в каталоге с установленным Tor) необходимо задать политику Exit Policy, разрешающую передачу трафика по всем портам. Данная настройка не является какой-то магической манипуляцией и всего лишь дает надежду «увидеть» что-нибудь интересное на нетривиальном порту.

>> ExitPolicy accept *:*

Поле Nickname в файле torrc не несет никакой смысловой нагрузки, поэтому единственная рекомендация в данном случае – не использовать компрометирующие (например, «WeAreCapturingYourTraffic») и содержащие цифры названия узла, которые могут натолкнуть на мысль о целой сети подобных узлов (например, «NodeNumber3″).

После запуска Tor-сервера необходимо дождаться завершения процедуры загрузки своих координат на сервер директорий – это поможет нашему узлу «заявить» о себе всем участникам даркнета.

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Exit node в процессе своего функционирования

После того, как мы подняли выходной узел и он начал пропускать через себя трафик Tor-юзеров, необходимо запустить снифер пакетов и ловить проходящий трафик. В нашем случае в роли снифера выступает tshark, который слушает интерфейс #1 (на нем висит Tor) и любезно складывает дамп в файл «dump.pcap»:

>>tshark –i 1 –w dump.pcap

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Tshark ловит пакеты, которые проходят через выходной узел в открытом виде

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

Итак, получив в свое распоряжение огромный дамп, следует проанализировать его на предмет onion-ресурсов. Беглое чтение дампа «по диагонали» позволило категоризировать все посещенные Tor-пользователями ресурсы по типу контента.

Стоит отметить, что за сутки (будний день) непрерывного перехвата трафика дамп одного узла вырастает до 3 ГБ. А значит, просто открыть его Wireshark’ом не получится – программа просто подавится таким большим файлом. Для анализа дампа необходимо разбить его на файлы размером не более 200 МБ (определено эмпирическим путем). Для этого вместе с Wireshark используется утилита editcap:

>> editcap – c 200000 input.pcap output.pcap

В данном случае значение 200000 – число пакетов в одном файле.

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

Активная система мониторинга

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

Ярким примером активной системы мониторинга, развернутой в полевых условиях, является множество выходных узлов, которые были обнаружены экспертом компании Leviathan Security. Эти узлы отличались от прочих выходных узлов тем, что осуществляли инжект вредоносного кода в «пролетающие» бинарные файлы. Пока клиент скачивал какой-либо файл из интернета, используя Tor в качестве средства обеспечения анонимности, вредоносный exit node осуществлял MitM-атаку и внедрял вредоносный код в скачиваемый бинарный файл.

Данный инцидент хорошо иллюстрирует концепцию активной системы мониторинга, однако также демонстрирует ее обратную сторону – любая активность на выходном узле (манипуляция с трафиком) легко и оперативно определяется автоматизированными средствами, и узел заносится сообществом Tor в «черный список».

Начнем с «чистого листа»

HTML5 принес с собой не только WebRTC, но и интересный тег «canvas», который предназначен для создания растрового изображения при помощи JavaScript. У данного тега есть особенность отрисовки изображений, и их рендеринг каждый браузер осуществляет по-разному в зависимости от различных факторов, таких как:

  • различные графические драйвера и аппаратная составляющая на стороне клиентов;
  • различный набор программного обеспечения в операционной системе и различная конфигурация программной среды.

Параметры отрисованных изображений могут уникально идентифицировать браузер и его программно-аппаратное окружение. На данной особенности можно создать так называемый фингерпринт. Несмотря на то, что эта техника не нова и используется, например, некоторыми рекламными агентствами в интернете для отслеживания интересов пользователей, не все его методы реализуемы в Тоr Browser. Например, в TBB нельзя эксплуатировать supercookie, использование Flash и Java отключено по умолчанию, введено ограничение в использовании шрифтов, а при использовании некоторых других техник выводится нотификация, которая может насторожить пользователя.

Так, первые попытки canvas-фингерпринтинга с помощью функции getImageData(), которая получает данные о пикселях, были заблокированы Тоr Browser:

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Однако в настоящий момент все еще остаются «лазейки» для фингерпринтинга в Тоr без нотификаций.

Я узнаю тебя по шрифтам

Для идентификации Тоr Browser можно воспользоваться функцией measureText(), которая измеряет ширину отрисованного в canvas текста:

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Используем measureText() для получения размера шрифта, уникального для данной ОС

Если ширина получившихся шрифтов представляет собой уникальное значение (а иногда оно еще и с плавающей точкой), то мы можем идентифицировать браузер, в том числе Тоr Browser. Мы допускаем, что в некоторых случаях полученные значения ширины шрифтов могут совпадать у разных пользователей.

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

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

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Официальный ответ разработчиков Tor на проблему рендеринга шрифтов

Выходим в «поле»

Данный подход был реализован исследователем с никнеймом «KOLANICH». Используя обе функции – measureText() и getBoundingClientRect(), – он написал скрипт, протестировал его локально в различных браузерах и получил уникальные идентификаторы.

Используя ту же методику, мы организовали тестовый стенд. Задача стенда: осуществить фингерпринтинг Tor Browser в различном программно-аппаратном окружении.

Для решения данной задачи мы взяли блог одного из авторов и на его главную страницу внедрили JavaScript, который использует функции measureText() и getBoundingClientRect() для измерения полученных в результате рендеринга шрифтов в браузере посетителя веб-страницы. Скрипт отправляет полученные значения в виде POST-запроса веб-серверу, который, в свою очередь, сохраняет этот запрос в своих логах.

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Фрагмент лога веб-сервера, в котором виден фингерпринт Tor Browser

В настоящее время мы собираем результаты работы данного скрипта. Пока все полученные значения уникальны. Мы сообщим о полученных результатах.

Чем это грозит на практике

Каким образом данная концепция может быть использована в реальных условиях для идентификации пользователей Tor Browser? Вышеописанный JS-код может быть установлен на нескольких объектах — участниках информационного обмена в даркнете:

  • Exit node. Реализация MitM-атаки, в ходе которой JS-код внедряется во все веб-страницы, которые посещает во внешней Сети резидент даркнета.
  • Внутренние onion-ресурсы и внешние веб-сайты, контролируемые атакующими. Например, атакующий поднимает свой «дорвей» – специально подготовленную веб-страницу под конкретную целевую аудиторию и осуществляет фингерпринт всех посетителей.
  • Уязвимые к XSS (предпочтительно к «хранимым», но не обязательно) внутренние и внешние веб-сайты.
ДеанонимизаTOR: где заканчивается анонимность в даркнете

Объекты, которые могут фингерпринтить Tor-пользователя

Последний пункт является особенно интересным. Просканировав на веб-уязвимости примерно 100 onion-ресурсов (которые оказались в логах пассивной системы мониторинга) и отсеяв «false positive», мы выяснили, что примерно 30% всех проанализированных ресурсов даркнета подвержены атакам «межсайтового скриптинга».

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

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Процесс денонимизации Tor-юзера

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

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

Вместо заключения

На официальном сайте проекта Tor размещен ответ разработчиков на вопрос о включенном по умолчанию JavaScript в Tor Browser:

ДеанонимизаTOR: где заканчивается анонимность в даркнете

Официальный ответ разработчиков Tor Browser на вопрос о JavaScript

Судя по этому ответу, отключения разработчиками JS-кода в Tor Browser ожидать не приходится.

Leave a Comment

You may also like