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

Статья Как на самом деле работает Tor? Полный визуальный гайд (2020)

Artem N

(L2) cache
Пользователь
Регистрация
28.11.2020
Сообщения
329
Реакции
278
Сегодня мы подробно рассмотрим как на самом деле работает Tor.

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

Статья предназначена для чтения любым человеком с *НУЛЕВЫМИ* знаниями о сетевых технологиях или Tor.

Давайте же погрузимся в тему.

Что такое Tor?

Военно-морская исследовательская лаборатория США разработала протокол Луковой маршрутизации (Tor) для того, чтобы обеспечить защиту коммуникаций американской разведки в Интернете. Как ни странно, Tor стал широко использоваться всеми - даже теми организациями, против которых борется США.

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

Когда вы посещаете веб-сайт, ваш компьютер устанавливает прямое TCP-соединение с сервером. Любой, кто осуществляет интернет-мониторинг, может прочитать этот TCP-пакет. Они так же могут узнать какой сайт вы посещаете и ваш IP-адрес. И к какому порту подключаетесь.

Если вы используете протокол HTTPS, то никто не узнает, что было в исходном сообщении. Но иногда противнику достаточно знать, с кем именно вы соединяетесь.

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

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

"У лука есть слои" - Шрек

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

Вот почему он называется "Луковым протоколом маршрутизации" - он добавляет слои на каждом этапе.

Обзор

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

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

1641402114352.png


Исходный пользователь (знак вопроса слева) остаётся анонимным, если только вы не первый путь в узле, поскольку вы знаете, кто послал вам пакет.

1641402185543.png


Никто не знает какие данные отправляются пока они не достигнут последнего узла в пути; тот знает данные, но не знает кто их отправил. Предпоследний узел в пути не знает, что это за данные, знает только последний узел в пути.

1641402237844.png


Это привело к появлению угрозы, когда крупные организации с огромными ресурсами создают серверы Tor, цель которых - стать первым и последним луковым маршрутизатором. Если этой организации удастся это сделать, то она получают информацию о том кто отправил данные и какие именно это данные (фактически взламывая Tor).

1641402429991.png


О нет! Теперь крупная организация теперь знает, что вы смотрите Netflix.

Это невероятно сложно сделать, не находясь физически рядом с серверами, но мы рассмотрим это подробнее позже.

В этой статье я буду использовать Netflix в качестве обычного сервиса (Боб), а Amazon Prime Video в качестве противника (Ева). В реальности это крайне маловероятно. Я здесь не для того, чтобы рассуждать о том, какие организации могут захотеть атаковать Tor. Поэтому использую два маловероятных примера, чтобы не затрагивать политику.

Каждый пакет проходит по сети в ячейках фиксированного размера. Эти ячейки должны быть одинакового размера, чтобы данные, проходящие через сеть Tor, не выглядели подозрительно большими.

Эти ячейки на каждом маршрутизаторе разворачиваются с помощью симметричного ключа, после чего ячейка передается дальше по маршруту. Давайте рассмотрим сам Tor.

Tor

Сила в количестве

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

Если Tor не удобен в использовании или не имеет красивого дизайна, им не будет пользоваться много людей. Если им не пользуется много людей, то он менее анонимен.

Tor пришлось принять некоторые решения по дизайну, которые, возможно, не улучшают безопасность, но улучшают удобство использования в надежде, что улучшение удобства использования приведет к улучшению безопасности.

Чем Tor не является

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

Tor не защищён от межсетевых атак. Атака end to end - это когда объект контролирует как первый, так и последний узел на пути, о чём говорилось ранее. Эту проблему эксперты по кибербезопасности ещё не решили.

Tor не скрывает личность отправителя.

В 2013 году в период выпускных экзаменов в Гарварде один из студентов пытался отсрочить экзамен, отправив ложное сообщение с угрозой взрыва. Студент использовал Tor и Guerrilla Mail (сервис, позволяющий людям создавать одноразовые адреса электронной почты), чтобы отправить угрозу школьному руководству.

Студента поймали, несмотря на то, что он принял меры предосторожности.

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

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

1641403994048.png


Различие между Tor и VPN

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

1641404105476.png


Он не сможет увидеть ваши пакеты. Он не знают с кем вы разговариваете - кроме VPN.

VPN не являются приватным в том же смысле, что и Tor. VPN защищают вас от интернет-провайдера или от злоумышленника (того, который следит за WiFi вашего ноутбука). Но он не защищает вас от самих себя.

VPN - это man in the middle. Они знают кто вы и с кем разговариваете. В зависимости от вида трафика, VPN также расшифровывает ваши пакеты. Это означает, что они знают всё. При использовании VPN вы должны доверять этому VPN. С Tor всё несколько иначе.

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

Tor защищает вас от сети Tor. Один мошеннический узел можно пережить. Они не ожидают, что вы будете доверять сети.

Никто кроме вас не должен знать IP-адреса отправителя и получателя. Никто не должен знать содержание сообщения.

1641404603752.png


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

Луковая маршрутизация

1641404664022.png


На примере приведённой выше сети мы смоделируем работу Tor. Ваш компьютер - тот, что крайний слева и вы отправляете запрос на просмотр *Stranger Things* на Netflix (потому что для чего еще используется Tor :)). Этот путь узлов называется *контуром*. Позже мы рассмотрим как создаются цепи и как работает шифрование. Но пока попытаемся рассмотреть принцип работы Tor.

1641404796792.png


Начнём с сообщения (мы его еще не отправили). Нам нужно зашифровать сообщение N раз (где N - количество узлов в пути). Мы шифруем его с помощью AES, симметричной системы шифрования. Ключ согласовывается с помощью метода Диффи-Хеллмана. Не волнуйтесь, обсудим всё это позже. В пути 4 узла (минус ваш компьютер и Netflix), поэтому мы шифруем сообщение 4 раза.

1641404897826.png


Наш пакет ("Лук") имеет 4 слоя. Синий, фиолетовый, оранжевый и голубой. Каждый цвет представляет собой один слой шифрования.

1641404992284.png


Мы отправляем "луковицу" первому узлу на нашем пути. Затем этот узел удаляет первый слой шифрования.

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

1641405127903.png


Узел 1 знает, что вы отправили сообщение. Но оно всё ещё зашифровано 3 уровнями шифрования, и он не имеет представления о том, что это за сообщение.

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

1641405214261.png


Теперь Узел 3 снимает слой.

1641405241242.png


Конечный узел знает что это за сообщение и куда оно направляется. Но не знает, кто его отправил. Всё, что он знает - это то, что Узел 3 послал ему сообщение, но он не знает ни о ком другом на этом пути. Одним из ключевых моментов здесь является то, что когда узел расшифровывает слой, он не может сказать сколько ещё слоёв нужно расшифровать. Это может быть как 1 или 2, так и 200 уровней шифрования.

1641405334852.png


Теперь Amazon ни за что не узнает, что вы смотрите Netflix! Netflix отправляет обратно часть сериала Stranger Things.

Давайте посмотрим как это работает в обратном направлении.

1641405393751.png


Узел 4 добавляет свой уровень шифрования. Он не знает, кто первоначально сделал запрос. Всё что он знает - это то, что Узел 3 отправил ему запрос. Поэтому он отправляет ответное сообщение обратно Узлу 3.

1641405455218.png


И так далее для следующих узлов.

1641405505285.png


Сейчас ответный пакет полностью зашифрован.

1641405548841.png


В результате пакет полностью зашифрован. И единственный, кто по-прежнему знает что содержит сообщение - это Узел 4. Единственный кто знает, кто создал сообщение, - это Узел 1. Теперь, когда мы получили полностью зашифрованный ответ, мы можем использовать все симметричные ключи для его расшифровки.

1641405621008.png


Вы можете подумать: "Я видел улиток и побыстрее". И будете правы. Этот протокол не рассчитан на скорость, но в то же время он заботится о скорости.

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

Обычно используется шифрование AES с передачей ключа по методу Диффи-Хеллмана.

Пути, которые создает Tor, называются цепями. Давайте рассмотрим, как Tor выбирает узлы для использования.

Как создаётся цепь?

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

Когда Tor выбирает выходной узел, он выбирает его, следуя следующим принципам:

1. Есть ли в torrc (конфигурационном файле) клиента настройки о том, какие узлы не выбирать?
2. Tor выбирает только тот выходной узел, который позволяет вам выйти из сети Tor. Некоторые узлы разрешают только веб-трафик (HTTP на 80-м порту), что не очень удобно когда хочется отправить электронную почту (SMTP, порт 25).
3. Выходной узел должен обладать достаточной пропускной способностью, чтобы суметь обслуживать вас. Tor пытается выбрать узел выхода, который имеет достаточно ресурсов.

Все пути в цепи подчиняются следующим правилам:

Мы не выбираем один и тот же маршрутизатор дважды для одного и того же пути.

Если вы выберете один и тот же узел дважды, то гарантируется что он будет либо сторожевым узлом (узел, в который вы входите), либо узлом выхода - оба варианта опасны. Существует вероятность 2/3, что это будет и сторожевой узел и узел выхода - что ещё опаснее. Мы хотим избежать атак входа/выхода.

1641406706595.png

Это не okay. Цвет узла изменён, чтобы показать что он один и тот же.

Мы не выбираем ни один маршрутизатор из того же семейства, что и другой на том же пути (два маршрутизатора принадлежат к одному семейству, если каждый из них указывает другой в "семействе" записей своего описания).

Операторы, управляющие более чем одним узлом Tor, могут выбрать обозначение своих узлов как "семейных". Это означает, что у всех узлов один родитель (оператор сети). Это снова является контрмерой против атак входа/выхода. Хотя операторы не обязаны объявлять "семью". Если они хотят стать сторожевым узлом (об этом речь ниже), рекомендуется объявить "семью" (но это не обязательно.

1641406991362.png

Не вариант.

Мы не выбираем более одного маршрутизатора в подсети /16.

Подсети определяют сети. IP-адреса состоят из 8 октетов. Например, IP-адрес Google в двоичном формате имеет вид:
01000000.11101001.10101001.01101010

Первые 16 бит (подсеть /16) равны 01000000.11101001, что означает, что Tor не выбирает узлы, начинающиеся с тех же 16 бит, что и этот IP-адрес. Опять же, это контрмера против атак входа/выхода.

1641407153759.png

Не вариант.

Если вопрос о подсетей кажется вам запутанным, я написал код на языке Python, чтобы объяснить его:
Python:
# ip addresses are in binary, not the usual base 10 subnets are usually powers of 2, this is 2^4.
IP = "01000000.11101001.10101001.01101010"
subnet = 16

# this will store the subnet address once we find it
subnet_ip = []
IP_list = list(IP)
counter = 0

for i in IP_list:
  # we want to end the loop when we reach the subnet number
  if counter >= subnet:
    break
  # the ip address segments each oclet of bits with full stops
  # we don't want to count a fullstop as a number
  # but we want to include it in the final subnet
  if i == ".":
    subnet_ip.append(".")
    continue
  else:
    # else it is a number so we append and increment counter
    subnet_ip.append(i)
    counter = counter + 1
print("Subnet is " + ''.join(subnet_ip))

Мы не выбираем ни один неработающий или невалидный маршрутизатор, если только не были специально настроены на него. По-умолчанию мы настроены на разрешение невалидных маршрутизаторов в позициях "middle" и "rendezvous".

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

Первый узел должен быть Сторожевым узлом.

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

1641408129986.png


Это возможно для крупных компаний, имеющих 99,9% бесперебойной работы и высокую пропускную способность (например, Netflix). У Tor нет возможности помешать могущественным противникам зарегистрировать множество сторожевых узлов. В настоящее время Tor настроен так, что один сторожевой узел будет работать 12 недель в году. Вам придётся выбрать 4 новых сторожевых узла в год.

Это означает, что если вы используете Tor один раз для просмотра Amazon Prime Video, то вероятность того, что Netflix станет вашим сторожевым узлом, относительно мала. Конечно, чем больше сторожевых узлов создает Netflix, тем больше вероятность подобного. Хотя, если Netflix знает что вы подключаетесь к сети Tor для просмотра Amazon Prime Video, им придётся ждать 4 недели, пока их подозрения подтвердятся (если только они не нападут на сторожевой узел и не захватят его).

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

Чем больше пользователей Tor, тем сложнее крупной организации атаковать его. Если Netflix контролирует 50% узлов в сети:

1641409006989.png


Вероятность того, что вы выберете сторожевой узел от Netflix, равна 50%.

Если вдруг присоединится ещё 50 узлов (это 1/3), то это уменьшит вероятность, что Netflix владеет сторожевым узлом (а значит, и потенциальной атакой) и сделает его ещё более дорогим.

1641409133442.png


В Tor сила - в количестве.

Guard Pinning

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

Сообщение из документации Tor гласит:
1. Introduction and motivation

Tor uses entry guards to prevent an attacker who controls some
a fraction of the network from observing a fraction of every user's
traffic. If users chose their entries and exits uniformly at
random from the list of servers every time they build a circuit,
then an adversary who had (k/N) of the network would deanonymize
F=(k/N)^2 of all circuits... and after a given user had built C
circuits, the attacker would see them at least once with
probability 1-(1-F)^C. With large C, the attacker would get a
sample of every user's traffic with probability 1.

To prevent this from happening, Tor clients choose a small number
of guard nodes (currently 3). These guard nodes are the only
nodes that the client will connect to directly. If they are not
compromised, the user's paths are not compromised.

But attacks remain. Consider an attacker who can run a firewall
between a target user and the Tor network, and make many of the
guards they don't control appear to be unreachable. Or consider
an attacker who can identify a user's guards, and mount
denial-of-service attacks on them until the user picks a guard
that the attacker controls.

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

Сторожевые узлы Tor могут подвергнуться DDOS'у или злоумышленник может получить большинство сторожевых узлов в Интернете, чтобы попытаться заполучить вас. Привязка сторожевых узлов позволяет значительно усложнить эту задачу.

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

Что такое узел каталога?

Состояние сети Tor отслеживается и публикуется группой из 9 доверенных серверов (по состоянию на 2019 год), известных как узел каталога. Каждый из них контролируется отдельной организацией.

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

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

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

1641410649634.png


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

1641410928049.png


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

В первых версиях Tor использовался простой подход к разрешению конфликтов: каждый узел передавал состояние сети так, как он его видел. Каждый клиент верил тому узлу, с которым общался в последнее время. Здесь нет консенсуса между всеми узлами каталогов.

В Tor это катастрофа... Ничто не гарантировало, что узлы говорят правду. Если бы злоумышленник захватил один узел, он мог бы лгать о состоянии сети.

1641411075902.png


Если клиент запросит у злоумышленника состояние сети, тот вернёт список. Этот список содержит только узлы, которые контролируются этим самым злоумышленником. А после клиент подключается именно к этим узлам.

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

В третьей, текущей версии системы каталогов, ответственность за консенсус была перенесена с клиентов на узлы каталогов.

1641411349674.png


Что такое мостовые узлы?

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

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

Государство может запросить у узла каталога список активных ретрансляторов Tor и заблокировать весь трафик к ним.

Если вам интересно, то Tor поддерживает актуальный список стран в которых он может быть заблокирован.

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

1641411567594.png


Полный список Bridge nodes никогда не публикуется, что затрудняет для государств полную блокировку Tor. Вы можете просмотреть некоторые узлы моста здесь. Если это не сработает, Tor предлагает:
Другой способ получить мосты - отправить электронное письмо на адрес bridges@torproject.org. Обратите внимание, что вы должны отправить письмо, используя адрес одного из следующих провайдеров электронной почты: Riseup или Gmail.

Блокировать Tor можно и другим способом. Государственные цензоры могут использовать Deep Packet Inspection (DPI) для анализа данных о структуре, размере и характере каждого пакета. С помощью DPI государства могут распознать трафик Tor, даже если он подключается к неизвестным IP-адресам или зашифрован.

Чтобы обойти эту проблему, разработчики Tor создали Подключаемые Транспорты (PT). Они преобразуют поток трафика Tor между клиентом и мостом. По словам документации Tor:
Таким образом, цензоры, отслеживающие трафик между клиентом и мостом, будут видеть невинный на вид преобразованный трафик вместо реального трафика Tor. Другие программы могут общаться с клиентами Tor и мостами Tor, используя подключаемый транспортный API, чтобы облегчить создание совместимых программ.

Скрытые возможности Tor

Вы когда-нибудь слышали эти байки: "В dark-web есть сайты, зайдя на которые вы увидите людей, занимающихся непристойными вещами, продающих запрещённые вещи или (что ещё хуже!) смотрящих фильм "Похмелье, часть 3".

Когда люди говорят об этих сайтах, они имеют в виду Tor Hidden Services.

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

1641412024519.png

1641412055622.png


Устройство (Знак вопроса) знает, что оно хочет получить доступ к Netflix, но оно ничего не знает о сервере. Сервер ничего не знает об устройстве, которое попросило доступ к нему. Это довольно запутанно, но не волнуйтесь - я собираюсь объяснить всё это с помощью классных диаграмм.

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

1641412221229.png


Точки внедрения знают, что они будут внедрять посетителей на сервер.

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

Если вы попытаетесь найти скрытую услугу, то точка внедрения, отвечающая за неё, предоставит вам полный дескриптор скрытой услуги и адрес этой точки.

Ключом для этой хэш-таблицы является луковый адрес, сам адрес берётся из открытого ключа сервера.

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

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

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

1641412548786.png


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

Если вы хотите получить доступ к этому адресу, то вы сначала запросите дескриптор из хэш-таблицы. Дескриптор будет содержать, скажем, 4 или 5 IP-адресов вводных узлов. Вы выбираете один наугад, скажем, верхний.

1641412655924.png


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

1641412711018.png


Здесь должно быть написано "Tor-узел". Я потерял файлы для этих графиков (спасибо LucidChart). Жаль, не могу обновить.
Затем вы прокладываете маршрут к этой точке и посылаете ей сообщение с вопросом, может ли она представить вас серверу, используя точку, которую вы только что использовали. Затем вы отправляете одноразовый пароль (в данном примере используем 'Labrador').

Точка встречи устанавливает связь с точкой внедрения и отправляет ей слово 'Labrador' и свой IP-адрес.

1641412839234.png


Точка внедрения отправляет сообщение на сервер, а сервер может принять его или ничего не делать.

1641412875447.png


Если сервер принимает сообщение, то он создаёт цепь к точке встречи.

1641412915238.png


Сервер отправляет в точку встречи сообщение. Точка встречи рассматривает оба сообщения - от вашего компьютера и от сервера. И говорит: "Хорошо, я получила сообщение от этого компьютера о том, что он хочет подключиться к этой службе и так сообщение от службы, спрашивающей, может ли она подключиться к компьютеру. Они должны поговорить друг с другом".

Затем точка встречи будет выступать в качестве ещё одного прыжка в цепи и соединять их.

1641413061475.png


Коротко о работе скрытой службы можно сказать следующее, взято отсюда:

1. Скрытый сервис вычисляет свою пару ключей (закрытый и открытый, асимметричное шифрование).
2. Затем выбирает несколько ретрансляторов в качестве точек внедрения.
3. Передаёт свой открытый ключ этим точкам по цепям Tor.
4. После этого создаёт дескриптор скрытого сервиса, содержащий его открытый ключ и информацию о его точках внедрения.
5. Скрытый сервис подписывает дескриптор скрытого сервиса своим закрытым ключом.
6. Затем он загружает дескриптор скрытого сервиса в Распределённую хэш-таблицу (DHT).
7. Клиенты узнают onion-адрес от скрытой службы вне сети. (например, публичный веб-сайт) ($hash.onion - это 16-символьное имя, полученное из открытого ключа службы).
8. После получения onion-адреса клиент подключается к DHT и запрашивает этот $hash.
9. Если он существует, клиент узнает открытый ключ скрытой службы и её точки внедрения.
10. Клиент выбирает случайным образом ретранслятор, чтобы построить к нему цепь и сообщить ему одноразовый секрет. Выбранный ретранслятор действует как точка встречи.
11. Клиент создает вводное сообщение, содержащее адрес точки внедрения и одноразовый секрет, после чего шифрует сообщение открытым ключом.
12. Клиент отправляет свое сообщение через Tor в одну из точек внедрения, требуя переслать его скрытому сервису.
13. Скрытый сервис расшифровывает сообщение с помощью своего закрытого ключа, чтобы узнать о месте внедрения и одноразовом секрете.
14. Скрытая служба создает сообщение о встрече, содержащее одноразовый секрет, и отправляет его по цепи в точку встречи.
15. Точка встречи сообщает клиенту, что соединение установлено.
16. Клиент и скрытая служба общаются друг с другом через эту точку встречи. Весь трафик шифруется, а точка просто передаёт его туда-обратно. Обратите внимание, что каждый из них, клиент и скрытый сервис, строит цепь до точки вчтречи. При трёх хопах на цепь получается шесть хопов в общей сложности.

Атаки на Tor

Tor защищает своих пользователей от попыток атак. Недруги хотят знать с кем разговаривает Алиса. Однако Tor не защищает от атак подтверждения. В этих атаках противник стремится ответить на вопрос "Говорит ли Алиса с Бобом?"

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

Если Алиса посылает пакет следующего вида:
# (timestamp, size, port, protocol)
(17284812, 3, 21, SSH)
И если Боб получит этот пакет, злоумышленник сможет увидеть, что пакеты одинаковые - даже если злоумышленник не сможет увидеть, что это за пакет, поскольку он зашифрован. Имеет ли Боб склонность получать пакеты в то же время, когда их посылает Алиса? Одинаковы ли они по размеру? Если да, то можно сделать вывод, что Алиса и Боб общаются друг с другом.

Tor разбивает пакеты на большие куски не просто так - чтобы предотвратить подобные вещи. Tor работает над добавлением паддинга во все пакеты, чтобы усложнить эту задачу.

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

Если Алиса отправляет пакеты, A, B, C, а Боб получает их в B, A, C, труднее определить, что это одно и то же. Это не гарантирует безопасность, но осложняет детект.

Атака, при которой атакующий пытается контролировать оба конца цепи, называется атакой Силбила. Названа в честь главной героини книги "Sybil" за авторством Flora Rheta Schreiber. Мы обсуждали некоторые из этих атак ранее, когда атакующий контролирует оба защитных защиты и выходные узлы.

Атаки Сибила - это не теория. В 2014 году исследователи из Университета Карнеги-Меллона успешно провели её.

Когда Lizard Squad - группа хакеров попыталась осуществить атаку, система обнаружения подала сигнал тревоги. Tor имеет встроенную систему мониторинга против такого рода событий.

В 2007 году Дэн Эгерстад - шведский консультант по безопасности - сообщил, что он перехватил имена пользователей и пароли, отправленные через Tor, будучи выходным узлом. В то время эти данные не были зашифрованы TLS или SSL.

Интересно, как Дэн Эгерстад так отозвался об узлах Tor:
Если вы посмотрите где размещаются эти узлы Tor и насколько они велики, то некоторые из них стоят тысячи долларов в месяц только за размещение, потому что они у них большая пропускную способность. Это тяжёлые серверы и так далее. Кто будет анонимно платить за это?

Tor обычно не скрывает тот факт, что вы его используете. Многие сайты (например, BBC'S iPlayer или правка в Википедии) блокируют вас при использовании известного узла Tor.

Некоторые приложения под управлением Tor раскрывают ваш истинный IP-адрес. Одним из таких приложений является BitTorrent.

Jansen и др. описали атаку, в ходе которой они осуществляют DDOS на узлы выхода. Ухудшая сеть (удаляя узлы выхода), атакующий увеличивает шанс получить узел выхода.

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

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

Эти всё звучит круто. Но большинство пользователей Tor ловят не так: большинство пользователей совершают ошибки и попадаются сами.

Возьмите Dredd пирата Roberts, основателя Silk Road. Он выдал себя, написав об этом в социальных сетях.

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

На DEFCON 22 была фантастическая лекция о том, как были пойманы пользователи Tor. Ни одна из упомянутых историй не была вызвана Tor, а скорее плохим operations security.

Заключение

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

Если вам понравилась эта статья и вы хотите получить еще больше подобных статей, подпишитесь на мой список рассылки. Я буду отправлять вам письма только тогда, когда у меня будет что-то новое, а это каждый месяц/два месяца или как-то так.

---
Оригинал статьи: https://skerritt.blog/how-does-tor-really-work/
Переведено специально для xss.pro.
 


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