DEV Community

defX
defX

Posted on

Анонимность onion-сервисов: почему нельзя определить IP-адрес и как устроена распределенная сеть Tor

Когда речь заходит об анонимности в интернете, первое, что приходит на ум — сеть Tor и её загадочные .onion-сайты. Многие уверены, что за каждым таким сайтом стоит сервер, IP-адрес которого можно каким-то образом вычислить. В этой статье мы развеем этот миф и глубоко погрузимся в архитектуру Tor, чтобы понять, почему определение IP-адреса onion-сервиса технически невозможно.

  1. Базовые принципы: чем Tor отличается от обычного интернета

Обычный интернет:

Пользователь → DNS-запрос → IP-адрес → Подключение к серверу
Tor Network:

Пользователь → Цепочка узлов → Onion-адрес → Скрытый сервис
Ключевое отличие: В Tor не используется DNS и нет преобразования доменных имен в IP-адреса.

  1. Архитектура скрытых сервисов: тройная защита

Onion-сервисы используют многоуровневую систему безопасности:

Компоненты подключения:

Introduction Points (Входные точки) - 3 случайных узла, знающие как связаться с сервисом
Rendezvous Points (Точки встречи) - промежуточные узлы для установки соединения
Сервис - собственно onion-сайт

Клиент → Цепочка Tor → RP ↔ Introduction Points ↔ Onion-сервис
Криптографическая защита:

Многослойное шифрование (принцип "луковицы")
Каждый узел знает только предыдущий и следующий
Ни один узел не знает полного пути

  1. DHT Tor: распределенная база данных вместо DNS

Что такое DHT (Distributed Hash Table)?

Tor использует полностью децентрализованную систему для хранения информации о сервисах:

Псевдокод работы DHT

class TorDHT:
def store_descriptor(self, onion_address, descriptor):
# Дескриптор хранится на нескольких HSDir узлах
positions = self.calculate_positions(onion_address)
for position in positions:
hsdir = self.find_responsible_node(position)
hsdir.store(descriptor)

def find_descriptor(self, onion_address):
    positions = self.calculate_positions(onion_address)
    for position in positions:
        hsdir = self.find_responsible_node(position)
        descriptor = hsdir.retrieve(onion_address)
        if descriptor:
            return descriptor
    return None
Enter fullscreen mode Exit fullscreen mode

Onion-адрес — это публичный ключ

Формат v3 onion-адреса: 56-символов.onion

Это не случайный набор символов, а хеш от:

Публичного ключа сервиса
Версии протокола
Дополнительных параметров

  1. HSDir узлы: хранители тайн сети

Кто может быть HSDir?

Не каждый узел Tor может стать HSDir. Требуются строгие критерии:

def can_be_hsdir(router):
return (router.uptime > 96 * 3600 and # 4+ дней стабильной работы
router.bandwidth > MIN_BANDWIDTH and # Достаточная скорость
router.version >= SUPPORTED_VERSION and # Актуальная версия
'Stable' in router.flags and # Стабильное соединение
'Fast' in router.flags) # Высокая скорость
Статистика сети:

Всего узлов Tor: ~6,000-8,000
HSDir узлов: ~2,000-3,000 (30-40%)
Только лучшие узлы получают эту привилегию
Что хранят HSDir узлы:

HSDir_Storage = {
'descriptors': [
{
'service_id': 'abc123...onion',
'intro_points': ['ip1:port1', 'ip2:port2'], # Через Tor!
'timestamp': '2024-01-15 10:30:00',
'expires': '2024-01-16 10:30:00'
}
],
'no_content': True, # НЕ хранит контент сайтов
'no_user_data': True, # НЕ хранит данные пользователей
}

  1. Почему определение IP технически невозможно

Архитектурные причины:

Нет прямого соединения между клиентом и сервером
Introduction Points знают только как связаться с сервисом, но не его IP
Шифрование на каждом этапе
Распределенность информации
Что видят участники сети:

Клиент: знает только onion-адрес и точки встречи
RP-узлы: знают только клиента и introduction points
Introduction Points: знают только сервис и RP
HSDir узлы: знают только дескрипторы, но не могут подключиться к сервису
Сервис: не знает IP клиента
Даже при компрометации нескольких узлов:

Максимум что можно узнать при контроле 1-2 узлов

compromised_knowledge = {
'rp_node': ['client_ip', 'intro_points_ip'],
'intro_point': ['service_ip', 'rp_node_ip'],
'hsdir_node': ['descriptor_data']
}

Но никогда не будет полной картины:

full_picture = {
'client_ip': '...',
'service_ip': '...',
'full_communication': '...'
}

  1. Распространенные заблуждения

"WebRTC может раскрыть IP сервиса"

НЕТ: WebRTC работает на клиентской стороне
Onion-сервис не может инициировать WebRTC соединение
В Tor Browser WebRTC полностью отключен
"Можно отследить трафик до сервера"

НЕТ: Трафик проходит через минимум 6 узлов (3 от клиента, 3 к сервису)
Каждый узел знает только соседей
Шифрование перестраивается на каждом узле
"HSDir узлы знают IP сервисов"

НЕТ: Они хранят только дескрипторы с информацией об introduction points
Introduction Points сами являются Tor-узлами, а не конечным сервисом

  1. Реальные случаи провалов анонимности

Исторически большинство раскрытий onion-сервисов происходили из-за:

Ошибок конфигурации (80% случаев)
Человеческого фактора
Эксплойтов нулевого дня (крайне редко)

  1. Как обеспечивается отказоустойчивость

Репликация дескрипторов:

Каждый дескриптор хранится на 3+ HSDir узлах

replica_positions = [
H(descriptor_id | period | 0),
H(descriptor_id | period | 1),
H(descriptor_id | period | 2)
]
Ротация узлов:

HSDir узлы меняются каждые 24 часа
Introduction Points ротируются регулярно
Автоматическое восстановление при сбоях

  1. Практические выводы

Для пользователей:

Onion-сервисы анонимны по дизайну
Можно безопасно посещать .onion сайты
IP-адрес сервиса невозможно определить
Для исследователей:

Архитектура Tor обеспечивает математическую стойкость
Атаки требуют контроля над значительной частью сети
Существующие методы обнаружения неэффективны против правильно настроенных сервисов
Для администраторов:

Следуйте best practices настройки
Изолируйте сервисы от внешнего мира
Регулярно проводите аудиты безопасности
Заключение

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

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

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

https://def-expert.ru/anonimnost-onion-servisov-pochemu-nel-zya-opredelit-ip-adres-i-kak-ustroena-raspredelennaya-set-tor
Для исследователей:

Архитектура Tor обеспечивает математическую стойкость
Атаки требуют контроля над значительной частью сети
Существующие методы обнаружения неэффективны против правильно настроенных сервисов
Для администраторов:

Следуйте best practices настройки
Изолируйте сервисы от внешнего мира
Регулярно проводите аудиты безопасности
Заключение

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

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

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

Top comments (0)