Веселимся с BitTorrent DHT: кто, что и сколько качает

Disclaimer: все описанное ниже крайне не рекомендуется повторять в домашних условиях.

Уверен, почти каждый первый из читающих это сообщение хоть раз пользовался bittorrent: быстро, удобно, бесплатно. Но, увы, не совсем приватно.

Осенью 2015-го я решил провести небольшой эксперимент и совершить Sybil Attack на сеть DHT. Результатом моего кропотливо-трехвечернего труда стал набор из нескольких скриптов, позволяющий собирать информацию о более чем миллионе загрузок торрентов в сутки, используя для этого всего лишь трехдолларовый VPS во Франции (а то и домашний компьютер).

Каждая строка — infohash какого-нибудь торрента, при 100 запущенных нодах DHT, летят они примерно со скоростью 3–5 в секунду

DHT

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

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

InfoHash

Ничто иное, как SHA-1 от одной из частей torrent-файла, содержащей информацию о названии, списке файлов и прочем.

И как мы можем этим воспользоваться?

Метод работы весьма прост: каждый раз, когда вы скачиваете торрент по magnet-ссылке, либо используя торрент-файл без флага “private”, ваш торрент-клиент отправляет т.н. “аннонс” в распределенную сеть DHT.

Аннонсы говорят другим узлам сети о том, что, дескать, если объявится кто-то еще, кому нужен тот же самый торрент, его следует направлять к нам. Более того, в DHT также существует механизм, защищающий от отправки аннонсов от имени других пользователей.

Я всегда был хорош в рисовании диаграмм

На своем компьютере или сервере я запускаю пару-тройку-десять сотен небольших “торрент-клиентов” (чем больше клиентов — тем больше охват), единственное предназначение которых — собирать информацию о том, кто, что и когда скачивает, складируя все это безобразие в Redis.

Затем, другой скрипт (уже на Ruby) берет самые популярные инфохеши и получает для них torrent-файлы с torcache.

С полученной информацией можно делать кучу веселых вещей, я же использовал её в мирных целях: строил рейтинги торрентов по числу загрузок, определял самые популярные расширения файлов (расставляя по ним теги вроде “video”, “audio”, “software”), считал число загрузок из каждой страны и другие непотребства.

Самые “торрентизированные” страны. Угадайте, кто лидирует с большим отрывом? :)
График загрузок по дням для одного из торрентов

Это всё, конечно, замечательно, но мне-то что делать?

Познакомиться наконец со Steam. Ну, или свыкнуться с таким уровнем публичности.

Конечно, можно просто отключить DHT в клиенте или качать все только с закрытых трекеров, но это не панацея.

Помните, что протокол BitTorrent не гарантирует ни анонимности, ни приватности!

Исходный код я причешу и опубликую в ближайшие пару-тройку дней, чтобы не пропустить, подписывайтесь на меня и Storytell в Medium, а также на Twitter :)