В этой статье разберём основные угрозы DDoS/DoS для .onion‑сайтов и способы их защиты на уровне Tor и веб‑сервера.
Для начала схема работы onion сервисов:
Таким образом, маршрут выглядит как:
User → Entry Node → Relay Node → Rendezvous Point ← Hidden Service ← Intro Point
Каждый узел знает только ближайшие к нему, что обеспечивает анонимность обеих сторон.
В Tor используется многослойное шифрование, известное как луковичная маршрутизация (onion routing).
Вот как происходит шифрование на каждом этапе при доступе к onion-сайтам:
3. Скрытый сервис (onion-сайт):
4.После соединения на Rendezvous Point:
Криптография, используемая в Tor:
Результат:
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
2. HiddenServiceRateLimits в torrc
По умолчанию в Tor нет ручных лимитов (кроме PoW в ≥0.4.8). Вручную можно включить:
После правки:
3. Proof‑of‑Work в Tor
PoW‑защита (Proof‑of‑Work) появилась в Tor ≥0.4.8.1-alpha и включена по умолчанию.
При перегрузке сервис выдаёт клиенту «загадку» — нужно потратить CPU‑ресурс, чтобы получить доступ.
Эффективно снижает массовый флуд внутри сети Tor, не мешая законным юзерам.
Тестирование защиты сервиса, эмуляция атаки:
Простой bash‑скрипт на базе torsocks и curl:
При однократном запуске получите ~5–15 RPS, не убивая nginx, но проверив rate‑limit и PoW.
Вывод
Для начала схема работы onion сервисов:
- [User (Tor Browser)] — Пользователь (Tor-браузер)
Пользователь запускает Tor Browser и запрашивает доступ к onion-сайту. - ↓
- Entry Node — Входной узел
Первый узел, через который проходит трафик. Он знает IP-адрес пользователя, но не знает, к какому сайту тот хочет подключиться. - ↓
- Relay Node — Промежуточный узел
Передаёт трафик между Entry Node и Rendezvous Point. Он служит для дополнительной анонимизации маршрута. - ↓
- Rendezvous Point — Узел встречи
Это место, где устанавливается соединение между пользователем и скрытым сервисом. Ни одна из сторон не знает IP другой.
Пользователь выбирает этот узел и сообщает о нём скрытому сервису через Intro Point. - ←→
- Hidden Service — Скрытый сервис (onion-сайт)
Сам сайт, размещённый внутри сети Tor. Он подключается к Rendezvous Point, чтобы установить зашифрованный канал с пользователем. - ↑
- 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-адреса, он просто промежуточное звено.

- Выбирает свои точки входа — Intro Points.
- Публикует их в Tor DHT (каталоге) вместе с публичным ключом.
- Когда клиент хочет подключиться:
- Он создаёт ключ шифрования, шифрует его публичным ключом сервиса и отправляет через Intro Point.
- Hidden Service получает сообщение и соединяется с Rendezvous Point, установленным клиентом.

- Обе стороны используют Diffie-Hellman (DH) для создания общего сеансового ключа.
- Весь трафик между клиентом и hidden-сайтом зашифрован end-to-end, даже внутри Tor.

- AES — симметричное шифрование данных внутри цепочки.
- RSA / Curve25519 — для обмена ключами.
- TLS-like handshake — при установке соединения с узлом.
- HMAC — защита от изменения данных.
- NTor protocol — современный протокол установления ключа между клиентом и нодой.

- Никто в сети Tor не знает всей цепочки:
- Entry Node знает клиента, но не сайт.
- 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."
Вывод
- Tor сам обеспечивает базовые DoS‑ограничения: цепочки, rate‑limit вводных точек, PoW (в ≥0.4.8).
- Важно добавить свои лимиты в torrc и nginx, блокировать Tor2web и ботов.
- Для PoW‑защиты достаточно версии ≥0.4.8, которую легко получить из backports или официального репозитория.
- Одиночный скрипт через Tor не «положит» сайт, но покажет слабые места и протестирует защиту.