Красноярск, ул. Алексеева, 49
ДЦ "Вертикали", оф. 7-15 (7 этаж)

Режим работы:
9:00 - 18:00
обед 13:00 - 14:00

Многоканальный телефон:
(391) 989-78-00

Обеспечение анонимности в сети Интернет. Tor Project

Параллельно с написанием данной статьи, 30 июля 2017 был опубликован документ, фактически запрещающий использование на территории России анонимайзеров и VPN-технологий, позволяющих обходить запрет на доступ к сайтам и информационным ресурсам, когда такой доступ ограничен в соответствии с законодательством Российской Федерации. К таковым, несомненно, относится и описываемая ниже технология. Владельцам VPN сервисов предлагается ограничить доступ к запрещенным сайтам. Кроме того операторы поисковых систем обязаны прекратить выдачу ссылок на сайты и информационные ресурсы, когда такой доступ ограничен в соответствии с законодательством Российской Федерации. Почти все нормы начинают действовать с 1 ноября 2017 года.

Думается, что ни у кого не возникает сомнений по поводу широкой распространенности действительно неприемлемого интернет-контента, способного оказать значительные негативные влияния на общество в целом и каждую отдельную личность в частности. Но, кроме того, несомненно, огромный интерес вызывает и степень соприкосновения последствий применения положений нового закона и статьи 23 Конституции РФ. А в сочетании с прочтением таких произведений, как "Мы" и "1984", дискуссия на эту тему может поддерживать свет в окнах долго за полночь. Авторы статьи сохраняют нейтральный статус в обсуждении данных проблем и не берутся оценивать моральные и философские аспекты использования Tor, равно как и причины использования подобных технологий. Статья старается осветить лишь техническую сторону обеспечения анонимности в сети.

Часть 1. Настройка Tor.

Даже удивительно, как просто организовать анонимный "серфинг" в сети Интернет с помощью Tor. Идем на официальный сайт и загружаем Tor Browser для Windows. Запускаем и пользуемся! На этом можно было и закончить статью, но легких путей мы не ищем, да и гораздо больший интерес представляет потенциальная возможность направления трафика приложений, отличных от браузеров, через сеть Tor, например сетевого сканера. А для этого нам необходимо будет установить "чистый" Tor без дополнительных компонентов. Называется он Expert Bundle. На момент написания настоящей статьи актуальная версия для Windows – 0.3.0.9. Скачанный архив распакуем для удобства в C:\tor-win32-0.3.0.9\. Далее запускаем tor.exe находясь в каталоге C:\tor-win32-0.3.0.9\Tor. Видим в логе строчки:

- Opening Socks listener on 127.0.0.1:9050 #По умолчанию прокси слушает порт 9050
- * * * *
- Tor has successfully opened a circuit. Looks like client functionality is working.
- Bootstraped 100%: Done #мы подключены к сети Tor!

Как видите, Tor работает "из коробки". "Коробку" эту можно сравнить с автоматической, поскольку мы работаем с параметрами по умолчанию. Но мы можем перейти и на "ручное" управление. Для этого заглянем в рабочую директорию, наблюдаем две папки:

  • Tor (здесь лежат библиотеки программы и сам исполняемый файл tor.exe)
  • Data\Tor (здесь видим файлы geoip и geoip6 – база данных блоков IP-адресов с привязкой к географическому положению каждого блока; для версий IPv4 и IPv6 соответственно)

В папке Data\Tor создадим основной файл настроек torrc. Конфигурационный файл можно создать в блокноте, сохранив его как файл без расширения. При редактировании файла учтите, что он не должен содержать кириллицы. Комментарии, в том числе и с кириллицей, можно вносить после знака #. Регистр символов имеет значение. После редактирования конфигурационного файла нужно сохранить его в кодировке ANSI, иначе Tor его не сможет корректно прочесть.

#Tor создает SOCKS-прокси, который слушает порт 9050. Это дает возможность направлять
#трафик приложений, способных работать через SOCKS-прокси через сеть Tor.
#Параметр CacheDNS кэширует все DNS-ответы, поступающие от выходных нод.
#Параметр UseDNSCache включает использование кэшированных DNS-ответов.

SOCKSPort 9050 CacheDNS UseDNSCache

#Разрешаем подсоединяться к нашему SOCKS-порту только с локальных адресов своего
#компьютера и запрещаем внешние соединения.

SOCKSPolicy accept private:*,reject *:*

#Запускаем логирование в файл для диагностики возможных неполадок,
#указываем путь к файлу

DataDirectory C:\tor-win32-0.3.0.9\var
Log notice file C:\tor-win32-0.3.0.9\var\notice.log

#Периодичность записи статистической информации о работе Tor,
#рекомендуется устанавливать параметр в интервале от 30 минут до 6 часов

HeartbeatPeriod 60 minutes

#Опция, запрещающая использование нашего узла в качестве выходного.
ExitRelay 0

#Параметры GeoIPFile и GeoIPv6File содержат пути до файлов, в которых находится
#информация о географическом расположении IP адресов.

GeoIPFile C:\tor-win32-0.3.0.9\Data\Tor\geoip
GeoIPv6File C:\tor-win32-0.3.0.9\Data\Tor\geoip6

#Перечисляем символические имена стран, узлы из которых не хотим использовать в
#качестве выходных (в примере это Россия, Украина, Белоруссия и узлы, чьё расположение
#определить не удалось)

ExcludeExitNodes {ru},{ua},{by},{kz},{??}

#Строго придерживаться правил, описанных в параметре ExcludeExitNodes
StrictNodes 1

#Используем одни и те же цепочки узлов для связи с перечисленными доменами, чтобы они
#не менялись между нашими обращениями к ним. Это вредит нашей анонимности, но
#увеличивает скорость работы с указанными доменами.

TrackHostExits torproject.org,wikipedia.org,lurkmore.to

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

Важный нюанс! Выходные сервера в Tor постоянно меняются случайным образом. Это означает, что ресурс, который мы посещаем, может в каждый момент времени видеть нас под разными IP-адресами из разных стран. Кроме параметра ExcludeExitNodes, устанавливающего запрет на использование выходных нод, у нас есть возможность прямо указывать, какой сервер (нод) должен быть выходным. IP-адрес в этом случае будет постоянным:

ExitNodes <узел>
StrictExitNodes 1

Где ExitNodes указывает определённый сервер в качестве выходного узла, а StrictExitNodes 1 – указание в случае недоступности выбранного сервера не пытаться подключиться к другому, а выводить ошибку.
Найти список выходных узлов можно по ссылке.

В качестве параметра, можем указать отпечаток узла:

ExitNodes 0111BA9B604669E636FFD5B503F382A4B7AD6E80

Допускается записывать несколько узлов через запятую или, например, указав ExitNodes {ru} – получим только Российские сервера в качестве выходных. Притворимся русским хакером – в наши дни это тренд, не сбавляющий оборотов. Только не забудьте в параметре ExcludeExitNodes убрать значение {ru}, иначе возникнет конфликт.

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

C:\tor-win32-0.3.0.9\Tor\tor.exe -f C:\tor-win32-0.3.0.9\Data\Tor\torrc

Запускаем ярлык. В папке C:\tor-win32-0.3.0.9\ должна появиться папка var, в которой помимо рабочих файлов Tor появится лог-файл notice.log. Все, что Tor выводит в консоль, будет писаться в этот файл для последующего анализа. В файле notice.log видим строчки:

- Opening Socks listener on 127.0.0.1:9050 #Прокси слушает порт 9050
- * * * *
- Tor has successfully opened a circuit. Looks like client functionality is working.
- Bootstraped 100%: Done #мы подключены к сети Tor!

Часть 2. Серфинг.

Нам остается настроить браузер для работы. Для этого в Firefox в меню настроек параметров соединения указываем в качестве прокси-сервера для доступа в интернет SOCKS5 сервер с адресом 127.0.0.1:9050.

Для настройки браузеров IE и Chrome нужно зайти в Свойства браузера [Подключения -> Настройка сети -> Дополнительно]. Аналогично укажем настройки SOCKS-сервера 127.0.0.1:9050

Все готово! Теперь трафик в интернет будет ходить через цепочку серверов Tor. Проверим, действительно ли мы теперь анонимны в сети? Запустим сервис 2ip.ru. Видим, что сайт определяет в качестве нашего IP-адреса совсем не тот, что есть на самом деле. Мы получили анонимное подключение к сети Tor, достаточно просто, не так ли? Перейдем на вкладку "Проверка анонимности" на том же сайте. Нажимаем проверить, смотрим результат – все выглядит не так радужно, как казалось с самого начала.

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

Во-вторых, сервис 2ip обнаружил утечку DNS. Она возникает, когда приложение отправляет DNS-запросы, используя DNS-серверы провайдера. Браузеры резолвят DNS-имена в обход Tor. Проверить наличие этой утечки можно здесь. При использовании SOCKS5 прокси в Firefox, такая утечка происходит. Чтобы от этого избавиться, нужно изменить настройку, определяющую, где будут выполняться DNS-запросы при использовании SOCKS5 [в адресной строке набираем about:config, находим логическую опцию network.proxy.socks_remote_dns, двойным кликом меняем значение на true], теперь при использовании SOCKS-прокси, DNS-запросы будут тоже ходить через SOCKS. Проверяем. Утечки DNS больше нет – мы перешли на использование публичных DNS-серверов.

Следующая проблема – утечка IP через Flash. При этом в нашем случае проблема была характерна для браузера Chrome. Не помогло включение в настройках контента Chrome опции "Блокировать Flash на сайтах". После чего был удален Adobe Flash Player, паранойя нарастала и был удален еще и Adobe Air. Зачем он только был установлен? Но проблему это не решило и упорно происходила утечка через Flash. Решить проблему с Chrome так и не удалось, было решено вывести этот браузер из испытаний. К тому же сервисы Google известны наиболее "прокачанной" системой сбора информации о пользователе, поэтому их использование противоречит принципам анонимности. Не зря разработчики Tor выбрали базой для разработки Tor Browser именно Firefox.

Последняя проблема, которую нам удалось обнаружить – утечка через WebRTC – протокол передачи потоковых данных между браузерами или другими, поддерживающими его приложениями, по технологии точка-точка. Работа ряда сервисов, таких как чат Gmail и Facebook, браузерного варианта Skype и многих других основана на этой технологии и без WebRTC эти службы не будут доступны в полном объёме. Сервис для проверки этой уязвимости (и не только) – WebRTC Leak Test. В нашем случае был виден локальный IP-адрес за NAT, а также белый IP-адрес маршрутизатора. Большой брат наблюдает. Для исправления проблемы в браузере Firefox введите about:config, найдите параметр media.peerconnection.enabled и установите значение FALSE.

Более подробно утечки анонимности описаны в статье авторов сервиса 2ip.ru на Хабре.

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

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

В случае, если у вас есть дополнительная информация о возможных утечках, не описанных в данной статье, пишите нам на адрес Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. с пометкой "блог". Мы открыты для общения!