Захист Tor на основі proof-of-work: робимо DDoS на onion-сервіси дорогими
Onion-сервіс під флудом не може зробити того, що робить звичайний сайт: обмежувати за IP нічого, бо ані відвідувачі, ані зловмисники свою адресу не розкривають. Відповідь Tor, що з'явилася в Tor 0.4.8 і була анонсована в блозі проєкту в серпні 2023 року, - призначити кроці introduction ціну в процесорному часі. Дизайн походить від пропозиції 327, написаної в квітні 2020 року George Kadianakis, Mike Perry, David Goulet та tevador, яка оголила суть: побудова rendezvous-ланцюгів дорога і для сервісу, і для мережі, а саме лише обмеження швидкості цього ніколи не змінювало.
Головоломка, що з'являється лише під навантаженням
Схема прозора в сенсі протоколу: додаткового раунду виклику немає. Параметри головоломки лежать усередині дескриптора onion-сервісу, який клієнти й так завантажують: мітка версії, 32-байтовий seed, запропонований рівень зусилля та строк дії. Поки запропоноване зусилля нульове, захист спить, і introductions ідуть рівно як раніше. Помітивши перевантаження, сервіс піднімає запропоноване зусилля. Клієнти тоді розв'язують Equi-X - головоломкову функцію зі специфікації пропозиції - над завданням, зібраним із рядка персоналізації, засліпленого ID сервісу, seed, випадкового 16-байтового nonce та обраного зусилля. Розв'язок розміром близько 43 байтів їде всередині клітинки INTRODUCE1 як розширення. За блогом Tor, перше розв'язання коштує близько 5 мілісекунд на швидкій машині та до приблизно 30 на повільнішій; під тривалою атакою потрібна робота може наближатися до хвилини обчислень.Черга платить зусиллям
Перевірка розв'язку навмисно дешева; дорога частина - побудова rendezvous-ланцюга - відкладається. Перевірені запити потрапляють до черги з пріоритетом за заявленим зусиллям, за рівності перемагають старіші записи, а планувальник розбирає її в керованому темпі. Складність іде циклом «додай при зростанні, множ при спаді» у 300-секундних вікнах: доки черга насичена, сервіс піднімає зусилля до попереднього значення плюс один або до середнього зусилля оброблених introductions - що більше; коли тиск спадає, зусилля зменшується приблизно на третину. Клієнти повторюють зі зростаючим зусиллям - подвоєння нижче 1 000, потім множення на 1,5 - у межах, які специфікація ставить як 8 і 10 000. Seed'и змінюються приблизно що дві години, попередній seed недовго залишається чинним, щоб уникнути перегонів.Чому звичайні користувачі майже нічого не помічають
Оскільки головоломка існує лише поки сервіс під стресом, звичайний трафік за низького навантаження не платить нічого. Людина, що відкриває кілька сторінок під час атаки, витрачає мілісекунди - блог порівнює це з очікуванням повільного з'єднання, - тоді як зловмисник, що засилає мільйони introductions, платить за кожен. Формулювання Tor Project:"Blocks attackers while giving real users a chance to reach their destination" - блог Tor Project, серпень 2023
Як сервіси вмикають захист
Оператори керують захистом через torrc. Перемикачі, задокументовані в посібнику проєкту з DoS-захисту onion-сервісів:- HiddenServicePoWDefensesEnabled - публікує головоломку в дескрипторі та вмикає чергу з сортуванням за зусиллям
- HiddenServicePoWQueueRate і HiddenServicePoWQueueBurst - з якою швидкістю перевірені запити покидають чергу
- CompiledProofOfWorkHash - глобальна опція, що обирає хеш-функцію для головоломок










