В этой статье разберём основные угрозы DDoS/DoS для .onion‑сайтов и способы их защиты на уровне Tor и веб‑сервера.

Для начала схема работы onion сервисов:

1752739537796.png


  1. [User (Tor Browser)] — Пользователь (Tor-браузер)
    Пользователь запускает Tor Browser и запрашивает доступ к onion-сайту.
  2. Entry Node — Входной узел
    Первый узел, через который проходит трафик. Он знает IP-адрес пользователя, но не знает, к какому сайту тот хочет подключиться.
  3. Relay Node — Промежуточный узел
    Передаёт трафик между Entry Node и Rendezvous Point. Он служит для дополнительной анонимизации маршрута.
  4. Rendezvous Point — Узел встречи
    Это место, где устанавливается соединение между пользователем и скрытым сервисом. Ни одна из сторон не знает IP другой.
    Пользователь выбирает этот узел и сообщает о нём скрытому сервису через Intro Point.
  5. ←→
  6. Hidden Service — Скрытый сервис (onion-сайт)
    Сам сайт, размещённый внутри сети Tor. Он подключается к Rendezvous Point, чтобы установить зашифрованный канал с пользователем.
  7. Intro Point — Вводный узел
    Это публичный Tor-узел, через который сайт получает запрос на подключение.
    Пользователь не подключается к Hidden Service напрямую — сначала связывается через Intro Point.


Таким образом, маршрут выглядит как:

User → Entry Node → Relay Node → Rendezvous Point ← Hidden Service ← Intro Point


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

В Tor используется многослойное шифрование, известное как луковичная маршрутизация (onion routing).

Вот как происходит шифрование на каждом этапе при доступе к onion-сайтам:

🧅 1. Пользователь заранее формирует цепочку из нескольких узлов Tor (обычно: Entry → Middle → Exit или Rendezvous), и:

  • Шифрует данные трижды, по одному слою для каждого узла в обратном порядке.
  • Только конечный узел может снять "свой" слой шифрования и передать данные дальше.
Это похоже на обёртывание сообщения в несколько слоёв шифра, как слои лука.

🔐 2. ▶️ Клиент → Entry Node​

  • Первичный слой шифрования.
  • Entry Node видит IP клиента, но не знает содержимое или конечную цель.

▶️ Entry Node → Relay Node​

  • Второй слой: Relay расшифровывает только свой слой, не зная отправителя и получателя.

▶️ Relay Node → Rendezvous Point​

  • Третий слой.
  • Rendezvous Point не знает ни клиента, ни onion-адреса, он просто промежуточное звено.

🔁 3. Скрытый сервис (onion-сайт):
  • Выбирает свои точки входа — Intro Points.
  • Публикует их в Tor DHT (каталоге) вместе с публичным ключом.
  • Когда клиент хочет подключиться:
    • Он создаёт ключ шифрования, шифрует его публичным ключом сервиса и отправляет через Intro Point.
    • Hidden Service получает сообщение и соединяется с Rendezvous Point, установленным клиентом.
📡 4.После соединения на Rendezvous Point:
  • Обе стороны используют Diffie-Hellman (DH) для создания общего сеансового ключа.
  • Весь трафик между клиентом и hidden-сайтом зашифрован end-to-end, даже внутри Tor.
🔑 Криптография, используемая в Tor:
  • AES — симметричное шифрование данных внутри цепочки.
  • RSA / Curve25519 — для обмена ключами.
  • TLS-like handshake — при установке соединения с узлом.
  • HMAC — защита от изменения данных.
  • NTor protocol — современный протокол установления ключа между клиентом и нодой.
✅ Результат:
  • Никто в сети Tor не знает всей цепочки:
    • Entry Node знает клиента, но не сайт.
    • Hidden Service знает, что есть подключение, но не кто клиент.
  • Ни один промежуточный узел не может расшифровать всё сообщение.
  • Даже если один узел скомпрометирован — он не раскрывает личности.
Атаки на Hidden Service

HTTP‑флуд

 – попытки «залить» сайт GET/POST‑запросами через Tor2web или напрямую через Tor;
Малоэффективно, т.к. каждый запрос ~1 сек — массовый флуд невозможен.
Slowloris/slow POST
 – поддержание множества незакрытых HTTP‑соединений;
Sybil‑атаки
 – создание множества фальшивых Tor‑нод;
Атаки на HSDir
 – попытки перезаполнить сервисы директорий hidden‑услуг.

Рассмотрим векторы атак:

1)Тор2веб (Tor2web)

Tor2web — это сторонний прокси (onion.to, onion.ws и др.), позволяющий открыть .onion с обычного браузера.
Преимущество: не нужен Tor‑браузер;
Недостатки:
 - потенциальный DDoS‑вектор;
 - нет анонимности клиента;

Защита:

1. Блокировка Tor2web в nginx

Код:
if ($http_user_agent ~* "tor2web|curl|bot") {
return 403;
}
if ($http_referer ~* "onion.to|onion.ws|onion.dog") {
return 403;
}

2. HiddenServiceRateLimits в torrc
По умолчанию в Tor нет ручных лимитов (кроме PoW в ≥0.4.8). Вручную можно включить:
Код:
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8080

DoS‑защита
HiddenServiceEnableIntroDoSDefense 1
HiddenServiceEnableIntroDoSRatePerSec 25
HiddenServiceEnableIntroDoSBurstPerSec 100

Параллельные соединения
HiddenServiceMaxStreams 64
HiddenServiceMaxStreamsCloseCircuit 1
После правки:
Код:
systemctl restart tor

3. Proof‑of‑Work в Tor

PoW‑защита (Proof‑of‑Work) появилась в Tor ≥0.4.8.1-alpha и включена по умолчанию.
При перегрузке сервис выдаёт клиенту «загадку» — нужно потратить CPU‑ресурс, чтобы получить доступ.
Эффективно снижает массовый флуд внутри сети Tor, не мешая законным юзерам.

Тестирование защиты сервиса, эмуляция атаки:
Простой bash‑скрипт на базе torsocks и curl:

Код:
#!/bin/bash

ONION="http://exampleonion.onion/"
THREADS=10
REQS=50

attack(){
for i in $(seq $REQS); do
torsocks curl -s --max-time 10 "$ONION" > /dev/null
sleep 0.1
done
}

for t in $(seq $THREADS); do
attack &
done
wait
echo "Done: $((THREADS*REQS)) requests."
При однократном запуске получите ~5–15 RPS, не убивая nginx, но проверив rate‑limit и PoW.

Вывод

  • Tor сам обеспечивает базовые DoS‑ограничения: цепочки, rate‑limit вводных точек, PoW (в ≥0.4.8).
  • Важно добавить свои лимиты в torrc и nginx, блокировать Tor2web и ботов.
  • Для PoW‑защиты достаточно версии ≥0.4.8, которую легко получить из backports или официального репозитория.
  • Одиночный скрипт через Tor не «положит» сайт, но покажет слабые места и протестирует защиту.