Onion версия

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

  graph LR
    A(( )) --> B(( ))

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

  graph LR
    A(( )) --> B[VPN]
    B --> C(( ))

Сегодня мне есть что что добавить к этим двум диаграммам, слушайте:

Вступление

Недавно я смотрел YouTube с браузера. И у меня отвалился VPN. В качестве утилиты для обхода блокировок я использовал... Извините, почитал новости: кого-то засудили за ссылку на VPN ресурс. Так вот, весь его список доступных серверов, скачанных не скажу от куда, был покрыт красными треугольниками. Примерно так выглядело это паршивое грустное дело:

Name Protocol Group Type Ping
...
990 🌐 Anycast-IP [IPv6] [BL]-945 Trojan N/A
991 🌐 Anycast-IP [IPv6] [BL]-946 Trojan N/A
992 🌐 Anycast-IP [IPv6] [BL]-947 Trojan N/A
993 🌐 Anycast-IP [IPv6] [BL]-948 Trojan N/A
994 🌐 Anycast-IP [IPv6] [BL]-949 Trojan N/A
...

Здесь вы можете меня прервать внезапно возникшим в вашей всё ещё блуждающей голове вопросом:

- Неужели это у тебя была тысяча разных VPN сервисов на подключение?

Да была. Они были моим большим выбором. Моим списком... их задержки отклика всё росли и вот исход. Что же, это не проблема, список пришлось обновить. Я даже более скажу: списку пришлось настроить автоматическую ротацию. Раз в несколько часов. Новые конфигурации стали обновляться сами и я вроде как смог вернуться к просмотру своего любимого YouTube, однако же страшная мысль посетила меня в тот поворотный день.

Что если все VPN протоколы окончательно раскроют и заблокируют? Что если оставшиеся в живых последние оплоты нашей безопасности и свободы: VLESS, Hysteria и Trojan будут повержены? Если перебанят всех провайдеров VPN? Что? Нет, я не специалист, я без понятия, как внутри они устроены и какова вероятность их обнаружения. Но то что я вижу - отваливающиеся VPN сервера - меня пугает. Как он - наш предвечный враг - находит эти сервера, как он блокирует их? И как нам разблокировать их обратно, вернув интернет?

Загоняя себя дальше по спирали безумной паранойи и отчаяния, я пришёл на знакомый мне GitHub репозиторий, чтобы посмотреть, какие есть альтернативы и улучшения для стандартных VPN подписок. В ответ на мой запрос я получил примерно следующий текст совета:

Tor Bridges, DoH, альтернативный браузер, сменить страну проживания

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

Это уже Darknet?

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

  graph LR
    A(( )) --> B[Guard]
    B --> C[Middle]
    C --> D[Exit]
    D --> E(( ))

На диаграмме выше изображён план запроса от Tor клиента к нужному ресурсу, находящемуся в обычном интернете. Запрос проходит по трём узлам.

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

  graph LR
    A(( )) ~~~ B[Guard] ~~~ C[Middle]
    A(( )) --> F[Bridge]
    F --> C[Middle]
    C --> D[Exit]
    D --> E(( ))

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

Мосты заменяют собой заблокированные известные Guard узлы. Дело в шляпе. Можно дальше смотреть YouTube. Что касается безопасности - из интересных вещей существуют TLS Stripping и Timing Atack. Первый тип угрозы: Exit может дропать TLS подключение, из за чего вместо HTTPS вы будете получать просто HTTP сайт. Тогда Exit сможет перехватывать весь трафик по HTTP, ведь он будет не шифрован. Все пароли, всё содержимое страниц. Крайне опасная вещь. А второе: Timing Atack. В теории так можно вычислить пользователя в Tor сети. Но для этой атаки надо скомпрометировать входной и Exit/Rendezvous узлы.

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

Но здесь меня снова прерывают: "Зачем в этом всём разбираться глубже, если после добавления Bridge в настройках Tor браузера, YouTube начинает работать? Теперь можно просто смотреть ролики через Tor, так и что ещё надо? Обычная безопасность нам обеспечена, ни на что запрещённое я не захожу, чего ещё надо знать?". Здесь хочется дать пояснение, сказать что вот, этого правда достаточно, знаете почему - потому что Exit сервера находятся в другой стране - и там не блокируют YouTube - вот он и работает теперь... можно расходиться? Нет, погодите, у меня ещё остался вопрос.

А как они создают...

Свои .onion сайты?

Они, ты снова имеешь в виду предвечного врага? Нет, я имею в виду не их. А тех людей, что представляют собой черноту чуть менее опасную и влиятельную. Я говорю про администраторов теневых сайтов. Darknet сайтов? О, это так фантастично звучит. Администраторы теневых сайтов. Они продают запрещённые вещества, оружие... мне кажется, что среди этих теневых сайтов преобладает скам. Ну потому что вряд ли у них есть столько оружия и запрещённых веществ, чтобы с этого можно было соорудить целый магазин... ну так вот: как они публикуют свои сайты, если это им необходимо делать анонимно?

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

Создать свою конфигурацию и запустить демон Tor. Конфигурация выглядит максимально просто, вот пример моей фальшивой конфигурации, которая выставлена здесь для примера:

HiddenServiceDir /Users/altoid/.tor/hidden_service
HiddenServicePort 80 127.0.0.1:8000

UseBridges 1
ClientTransportPlugin obfs4 exec /usr/local/bin/lyrebird
Bridge <...>

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

alpha2oeyn47rxxn4icjj43i7j2q7fvla6gzh44aglr7ygor24xn2qyd.onion 

Выглядит чуток крипово, но пугаться нечего. Такое длинное название необходимо для уникальности и безопасности сервера, а так же для вычисления, где он сам находится. Теперь ничего не составляет труда скопировать ссылку, вставить её в наш браузер (это должен быть Tor браузер) и открыть. Тогда мы получим ответ:

Tor - Первая попытка

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

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

Tor - Canvas

Не так уж и сложно, да? И разворачивать можно почти всё, что вы захотите. Почему почти? Разработчики говорят, что Tor не поддерживает чистый UDP протокол, а значит, аудиоконференции и стримы не будут работать. Но на самом деле у некоторых UDP соединений должен быть TCP-fallback который будет работать вообще где угодно. Короче надо тестировать. Я же могу только одно сказать: YouTube работает, WebSocket’ы тоже работают, обычный TCP - очевидно работает. Вам надо что-то ещё? Пять минут назад вы этого не знали, а теперь можете за пол часа создать свой теневой сервер. И там даже не обязательно продавать оружие, можно просто выставлять в открытый доступ свои проекты. Мне этого давно не хватало. Я сам никогда не желал платить за то, чтобы держать свой хостинг, а с Tor можно запустить свой любой сервер лишь за цену электричества, пожираемого вашим железом.

И ещё есть забавный бонус!

Tor SSH за стенами NAT

- Остановись, я понял только слово "за стенами" из этого предложения.

Это не проблема, слушайте: SSH - это известный вам протокол удалённого подключения к серверам и компьютерам. У меня их много, целая куча: телефон, старый ноут, сервер TauCeti, мой текущий ноут в конце-концов. Представим ситуацию: вы находитесь далеко от дома, например на другом конце мира. А дома у вас вот что происходит: ноут включён и работает, у него открыт SSH порт и к вашему ноуту можно подключиться, чтобы зайти в терминал. Зачем заходить в терминал? Ну не знаю, можно и не в терминал, можно, например, за файлами на рабочем столе. Вот вы оставили на рабочем столе файл, а он вам нужен. И как его достать? Ну вот вы подключаетесь и достаёте. Подключаетесь по IP вашего устройства.

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

...Ну, только если он не имеет доступа к данным вашего оператора - тогда он сможет узнать вообще всё о вас, кроме содержимого сайта (потому что HTTPS шифрует контент, но это мы уже съезжаем в сторону).

Так вот, к чему это я: ваш серый IP делает невозможным подключение по SSH или как-либо ещё, покуда ваш личный сервер не будет иметь белого IP. И это печально, потому что ваш "Зацени мой сайт на 192.168.1.15:3000" действительно никто кроме людей, подключённых к одной и той же Wifi сети поглядеть не сможет. Однако... подключение к Tor решает эту проблему! Подключаясь к Tor мы выставляем свой так называемый дескриптор в Tor сеть и даже находясь за NAT можем приглашать к себе гостей. Мы это уже делали - ровно тогда, когда я показывал вам работающий через Tor проект Canvas. С SSH будет то же самое. Можно вообще любые службы открывать через Tor и подключаться к ним. Можно открыть свой веб сервер на 80 порту, можно открыть ssh сервер для удалённого доступа. И всё это без кнопок "Купить хостинг за 500₽ в месяц"... который потом ещё и будет ограничен 15ГБ памяти.

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

Хм... да нет, конечно, что за глупости?

Tor адресация

Небольшое послесловие. Надо упомянуть ещё забавную вещь: когда вы подключаетесь к Onion сервисам - я буду называть их скрытыми сервисами - ваш запрос в Clearnet вообще не выходит - всё происходящее идёт внутри сети Tor. При таком взаимодействии, в пути запроса и ответа участвуют аж 5 промежуточных узлов - 3 со стороны клиента до точки встречи и ещё 3 со стороны сервера, куда вы идёте за теневыми данными. Вот как это выглядит.

  graph LR
    A(( )) --> B[Bridge]
    B --> C[Middle]
    C --> D[Rendezvous]
    D --> E[Middle]
	E --> F[Guard]
	F --> G(( ))

Да, Rendezvous сервер здесь одинаковый для обоих сторон, ведь именно на нём вы и встречаетесь. Левая половина - это цепь вас как клиента. А правая половина - это цепь запросов теневого сервиса - ведь ему тоже надо оставаться безопасным.

Вообще это интересная тема. До изучения Tor мне казалось, что сети - это скучно и сложно. Ну что, у вас остались ещё вопросы? А, я вижу, вы хотите попасть на Tor Tau, но не знаете, куда вам надо идти. Вы ждёте ответа, подсказки.

Вам очень хочется узнать...

Где ссылка?

Ну, сейчас, когда я пишу эту статью - ссылка начинается на alpha2 и вот она там вверху, в главе про свои onion сайты. Что, она перестала работать? А, значит, я отыскал себе нового преемника. Хотите знать, как я это сделал?

Дело вот в чём: hostname для вашего теневого сервиса создаётся случайным образом. Оно генерируется. И мы можем немного поиграть со случайностью, а именно перебрать несколько миллионов вариантов случайных сгенерированных адресов, пока не найдём тот, что будет нам казаться красивым. Лично я, автор этого текста, делаю это с помощью утилиты mkp224o. Утилита генерирует случайные адреса пока те не будут походить на тот, что мы ищем. Я запускал утилиту с вот такими параметрами:

mkp224o -B -S 60 -t 1 -d onions -n 20 tauceti catalyst quarantine

Означает это следующее: я хочу начать генерировать ключи пакетным методом (-B) с выводом статистики о генерации раз в 60 секунд (-S 60), при этом использовать можно лишь один поток моего старого ноута (-t 1), а складывать всё найденное нужно в папку onions (-d onions). И найти мне надо 20 адресов (-n 20), которые начинаются на любое слово из списка tauceti catalyst quarantine.

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

А ещё в адресах не может быть чисел 0, 1, 8 и 9, а так же все адреса заканчиваются на d.onion. Но я не буду вам объяснять, почему это происходит, потому что base32.

Эти URL, что начинаются с заранее заданного слова, называются Vanity адресами. А вот то, ради чего вы сюда зашли. Теневой Tau, который я перебирал некоторе время:

tauceti5lowrh27defk7hczwi7sv45mcii7x3yzyrzxhutocwyqlqfqd.onion 

Хотите интересный факт напоследок? Президент Дональд Трамп помиловал Роса Ульбрихта - тот вышел из тюрьмы после десятилетнего срока. Росу давали два пожизненных за Silk Road в 2015 году.