Грифинг-атака на тестнет Биткойна – что это было?

0
ПОДЕЛИТЬСЯ

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

Грифинг-атака — это когда кто-то намеренно рассылает транзакции по сети, увеличивая нагрузку на сеть и нарушая её работу. Другим пользователям сети при этом становится сложнее запускать приложения поверх системы, однако финансовой выгоды злоумышленник не получает.

Ответственность за инцидент взял на себя Джеймсон Лопп, сооснователь и директор по безопасности платформы для “некастодиального” хранения криптовалют Casa.

Грифинг-атака на тестнет Биткойна – что это было?

На вопрос другого пользователя о том, стоила ли атака того, Лопп отвечал, что она обошлась ему в 1 доллар электроэнергии.

По словам Лоппа, он проводил атаку во благо, а не во вред тестнету Биткойна.

«Я выступаю за давно назревший сброс тестовой сети Биткойна, чтобы testnet-монеты не имели никакой приобретённой ценности, чтобы разработчикам не приходилось платить за тестирование своего ПО. Одновременно я выступаю за исправление ошибки в коде консенсуса testnet, которая позволяет создавать огромное количество блоков за короткий промежуток времени. Этой атакой я хотел продемонстрировать, насколько тривиально можно использовать эту слабость, и побудить разработчиков поддержать её исправление», — Джеймсон Лопп для The Block

Данные о хешрейте и сложности тестнета Биткойна показывают, что 19 апреля хешрейт подскочил до 2315 TH/s, а 28 апреля вернулся к 346 TH/s.

Грифинг-атака сломала синхронизацию узлов в testnet Биткойна, отметил Лео Уиз из Lightning Labs, компании-разработчика Lightning Network.

«В час появляются тысячи новых блоков, так что как бы быстро вы ни синхронизировались, вы никогда не сможете достичь вершины. Возможно, нам придётся навсегда распрощаться с тестовыми сетями без ограничений доступа», — Лео Уиз в X

Другие, впрочем, замечали, что никакого вопиющего вреда тестовой сети нанесено не было, и единственный нанесённый ущерб — это временные сложности с тестами для разработчиков опенсорс биткойн-приложений и трата их времени. А Лопп высказался в том смысле, что инцидент с грифингом следует рассматривать как “бесплатный стресс-тест” для сети, чем спровоцировал новую волну критики в свой адрес.

«Вот сидим мы в джакузи в спа-салоне и, в общем, неплохо проводим время. Один из нас говорит, что мы должны перейти в другой спа-салон — там джакузи лучше: у него мощный фильтр, который может поддерживать чистоту, если кто-то решит нагадить в джакузи. И в теории мы согласны, конечно, но нам и здесь хорошо, вещи в камере хранения, и нам не хочется сейчас всем выходить и ехать в какой-то другой спа. В конце концов, кому придёт в голову гадить в джакузи? …

 

Тогда этот кто-то идёт дальше и реально гадит в джакузи, делая его непригодным для всех. Когда мы прерываем наш сеанс джакузи и начинаем собирать вещи, он провозглашает, что теперь нам всем стало лучше, поскольку у нас больше нет риска, что кто-то нагадит в джакузи, а мы все, дескать, теперь будем более предусмотрительными, когда в следующий раз решим проектировать олимпийский бассейн», — Франсис Пулё в X

Но всё же: что именно произошло и как была устроена эта атака? Об этом Джеймсон Лопп постфактум написал сам, а заодно ещё раз изложил свою мотивацию.

Джеймсон Лопп: Грифинг тестнета Биткойна

Разбор манипуляции с генерацией блоков в тестовой сети Биткойна и призыв к сбросу/перезагрузке сети для устранения ряда проблем.

Пришло время сбросить состояние тестнета Биткойна, testnet3, если точнее. Почему? Как я писал месяц назад в своём письме для списка рассылки разработчиков Биткойна, был нарушен фундаментальный принцип работы testnet. Предполагалось, что testnet-монет будет много и они будут бесплатными, чтобы разработчики могли экспериментировать и тестировать свои программы без необходимости тратить деньги или рисковать реальной ценностью при отладке ПО.

Как это случилось?

  1. Testnet не обнулялся уже 13 лет.
  2. Награда за блок близка к 0, что затрудняет майнинг.
  3. Люди использовали его для эйрдропов и других действий, обещающих реальную ценность.
  4. Это создало экономический спрос на TBTC (test BTC).
  5. Люди покупают и продают TBTC на множестве сайтов.
  6. У testnet есть странная особенность, которую мы должны пофиксить, потому что именно она в некоторой степени ответственна за состояние, к которому мы пришли к этому моменту.

Почему награда за майнинг в testnet иссякла? Потому что на начало мая тестовая сеть находится на высоте блока 2 811 000, что эквивалентно 2061 году в mainnet. Таким образом, награда за блок составляет всего ~0,006 TBTC. Как это случилось? Это связано с явлением, о котором я уже писал несколько лет назад.

Основная сеть Биткойна производит 144 блока в день, плюс-минус несколько блоков. Тестовая сеть… скажем так, несколько более волатильна, как вы можете видеть на следующем графике. Из-за несколько иных правил консенсуса, время от времени случаются дни, когда добывается более 10 000 блоков — несколько месяцев майнинга в один день.

Грифинг-атака на тестнет Биткойна – что это было?

Как это начиналось

Я, наверное, одним из первых узнал о том, что testnet накапливает ценность, поскольку не секрет, что я многие годы раздавал testnet-монеты разработчикам. Поискав “testnet coins” в Google/Reddit/X, скорее всего, вы увидите моё имя пользователя в верхней части выдачи. Поэтому, когда в начале этого года меня стали заваливать запросами на testnet-монеты от не-разработчиков, я начал копать. В результате это оказался проект SatoshiVM, заявляющий, будто строит L2-сеть с zk-роллапами.

Грифинг-атака на тестнет Биткойна – что это было?

SatoshiVM имеет кучу красных флажков:

  • Github проекта — это город-призрак без какой-либо активности.
  • В X (твиттере) значится почти 200 000 фолловеров, но я не знаю никого, кто следил бы за проектом или говорил о нём.
  • В X также полно жалоб о том, что эйрдроп не работает.

Полагаю, это первое крупномасштабное мошенничество, которое я видел в testnet Биткойна, хотя это далеко не первый случай, когда testnet использовался для мошенничества. Нередко злоумышленники пользуются наивностью людей, продавая им testnet-биткойны по курсу mainnet. К слову, поэтому очень важно, чтобы каждый кошелёк с поддержкой testnet, имел на главном экране жирный дисклеймер о том, что монеты testnet не имеют никакой ценности!

Testnet имеет накопленную ценность

Для ясности, поскольку множество людей язвительно обвинили меня в том, будто все описываемые здесь действия я предпринимаю из “личной неприязни” к их проекту:

Единственная причина, по которой я выступаю за сброс testnet, состоит в том, что тестовая сеть должна быть бесплатной для использования разработчиками. В остальном каждый должен быть волен использовать её для любых целей разработки, какие только пожелает.

Вот некоторые доказательства того, что монеты testnet обмениваются на реальную ценность:

Грифинг-атака на тестнет Биткойна – что это было?

Это скрин с веб-сайта, действующего как брокер и продающего testnet-монеты по цене чуть больше бакса. Обратите внимание, что они даже ссылаются на трудности в приобретении testnet-монет в обоснование того, почему они набрали ценность.

Грифинг-атака на тестнет Биткойна – что это было?

Вот ещё один сайт, где реализована полноценная книга заявок для торговли между testnet и mainnet монетами.

Грифинг-атака на тестнет Биткойна – что это было?

А это своего рода децентрализованная биржа, где торгуются различные токены, также работающая на тестнете.

Фаза 1: Майнинг дешёвых блоков

Создать большое количество блоков с низкой сложностью — довольно тривиальная задача.

  1. Активируем правило минимальной сложности
  2. Графический процессор ноутбука может добывать 1 блок каждые ~10 секунд
  3. Продолжаем, пока временная метка не уйдёт слишком далеко вперёд (2 часа)
  4. Ждём
  5. Повторяем

Прошло уже 9 лет с тех пор, как я в последний раз майнил на testnet. Тогда я написал небольшой гайд о том, как я это делал, хотя тогда у меня был дешёвый бывший в использовании ASIC.

В этот раз я надеялся обойтись просто CPU-майнингом на десктопе, следуя этому гайду, и использовал старое ПО bfgminer.

Но оказалось, что CPU-майнинг слишком медленный даже на сложности 1, так что мне пришлось ещё потратить какое-то время на то, чтобы заставить bfgminer работать с моим GPU.

В файле bitcoin.conf я настроил, чтобы каждый вновь полученный блок запускал bash-скрипт:

blocknotify=/path/to/trigger_miner.sh

Bash-скрипт проверяет, запущен ли майнер. Если нет, то запускает его на 60 секунд, после чего убивает процесс майнинга.

#!/bin/bash
pgrep -fl bfgminer
# if not found - equals to 1, start it
if [ $? -eq 1 ]
then
~/code/bfgminer/bfgminer -S opencl:auto -o http://127.0.0.1:18332 -u [username] -p [password] --generate-to mwnsh33QHVXYDLWUvZwRizzp72SEaRLnf2 --coinbase-sig "Mined by Lopp (⌐■_■)" & 
else
echo "bfgminer running - do nothing"
fi

sleep 60
pkill bfgminer

Чтобы убедиться, что всё работает, я просто проверил testnet блок-эксплореры, чтобы убедиться, что моя “визитная карточка” на месте.

Грифинг-атака на тестнет Биткойна – что это было?

И после этого можно видеть целые горы пустых блоков:

Грифинг-атака на тестнет Биткойна – что это было?

Но оставив майнинг в таком режиме практически на целый день, я заметил, что добываю не так уж много пустых блоков. Взглянув на временные метки блоков других майнеров, я увидел, что они тоже корректировали свои временные метки вперёд, что было немного удивительно, поскольку я предполагал, что майнеры должны делать это вручную. При ближайшем рассмотрении логика шаблона майнинга выглядит так: если среднее время от 6 последних блоков опережает системные часы (находится в будущем), то используется среднее время + 1 секунда. Это имеет смысл, потому что, по правилу консенсуса, если вы добываете блок с временной меткой раньше этого среднего времени 6 последних блоков, такой блок будет считаться недействительным и отклонён другими узлами.

Тем, кому интересна тема пограничных условий временных меток и их эффективности, предлагаю обратиться к этому моему эссе от 2019 года: Bitcoin Timestamp Security.

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

Но за те несколько дней, что я выполнял скрипт Фазы 1, мы видим, что я успешно увеличил количество блоков тестнета на 300%!

Грифинг-атака на тестнет Биткойна – что это было?

Реакция публики

Интересный аспект моего скрипта из Фазы 1 — не разрушительного, ибо он фактически не замедлял подтверждения чьих-либо транзакций, — состоит в том, что он привлёк внимание проектов, о существовании которых я тогда даже не подозревал. Я начал получать в Телеграм сообщения с вопросами о том, что я делаю. А потом лидер одного из проектов попытался выставить себя жертвой, делая множество вздорных заявлений.

Грифинг-атака на тестнет Биткойна – что это было?

Копнув немного в сторону этого motoswap-проекта, быстро выяснилось, что им руководят люди из BSV. Так что неудивительно видеть, как они используют расхожий трайбалистский нарратив, при любой возможности представляя свои неудачи как героическое противостояние токсичным макси. По какой-то причине Дэнни продолжает говорить своим приверженцам, что они собираются переключиться с тестнета на мейннет, и это, де, “сломает” мейннет. Но, разумеется, это не так: единственное, что произойдёт, если они перейдут на мейннет, это то, что деген-трейдеры перестанут пользоваться их DEX.

Грифинг-атака на тестнет Биткойна – что это было?

Парень не может даже правильно написать название собственного проекта. Однако, наверное, любой, кто следит за этой сферой хотя бы несколько лет, понимает, что нужно обладать совершенно особой степенью глупости, чтобы поверить в авторитет Крейга Райта или что BSV — хорошая идея.

Грифинг-атака на тестнет Биткойна – что это было?

Этот парень, похоже, боится, что больше не сможет продавать testnet-монеты.

Воспользовавшись невежеством этих ребят, хочу добавить ещё немного пикантности. Самое забавное в моей манипуляции с временными метками то, что она заставила все оценки хешрейта сойти с ума. Mempool.space показывал, будто я утроил хешрейт сети, добавив к нему более 1 петахеша в секунду, хотя на самом деле я использовал всего лишь GPU со скоростью 500 мегахешей в секунду, который включался на несколько секунд за раз!

Грифинг-атака на тестнет Биткойна – что это было?

Фаза 2: Перманентные блок-штормы

Первая фаза майнинга блоков с низкой сложностью была лишь доказательством концепции для второй фазы, которая вызывает гораздо больший хаос в сети. Впервые я заметил этот хаос, возникающий совершенно естественным образом, ещё в 2015 году:

Грифинг-атака на тестнет Биткойна – что это было?

В чём заключалась Фаза 2? Фактически это были те же шаги, что и в Фазе 1, но запускаемые только для блока непосредственно перед каждой корректировкой сложности. Каков результат? Мы видим, что при нормальных условиях testnet производит ~150 блоков в день. Но активировав режим “перманентного блок-шторма”, можно запросто достичь и 20 000 блоков в день!

Грифинг-атака на тестнет Биткойна – что это было?

Это довольно безумно: 150–250-кратное ускорение генерации блоков и, соответственно, общей пропускной способности блокчейна. Как и следовало ожидать, многие люди, запускающие инфраструктуру и сервисы на testnet, оказались не готовы к резкому масштабированию более чем в 100 раз без предупреждения…

Реакция публики

Неудивительно, что первыми, кто обратил внимание, что testnet ведёт себя страннее, чем обычно, были проекты, торгующие testnet-монетами за реальную ценность.

Грифинг-атака на тестнет Биткойна – что это было?

Грифинг-атака на тестнет Биткойна – что это было?

Так прошёл день, а затем…

Грифинг-атака на тестнет Биткойна – что это было?

Довольно забавно, как этот degen-проект попытался представить собственный инфраструктурный провал как позитив, заявив, будто это они “сломали testnet”.

Следующий оператор testnet-крана тоже выдал странную реакцию. Это заставляет задуматься о его стимулах, поскольку, как видно из разглагольствований на его веб-сайте, его как будто вполне устраивают эйрдропы и торговля на testnet. Он волен придерживаться этой точки зрения, конечно, хотя я полагаю, что она не вписывается в грубый консенсус остальной части разработчиков, использующих testnet.

Грифинг-атака на тестнет Биткойна – что это было?

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

Грифинг-атака на тестнет Биткойна – что это было?

Эта попытка отмены (выше) — вопрос перспективы, потому что статус (довольно редкий) разработчика Bitcoin Core не имеет ничего общего с моими манипуляциями с testnet. Я изменял только код, запускаемый локально на моей собственной машине. Bitcoin Core, как сообщество, как организация, не играл в моих действиях никакой роли.

Я также заметил, что блок-штормы сломали инфраструктуру mempool.space: на диаграмме ниже видно, как их диаграммы мемпула перестали обновляться после шторма.

Грифинг-атака на тестнет Биткойна – что это было?

Фаза 3: Впереди!

Пока я даю testnet3 передышку, чтобы дать разработчикам время укрепить инфраструктуру и/или переключить сети. Кое-кто уже говорили мне, что переходят на signet — другую тестовую сеть, гораздо менее хаотичную, потому что блоки в ней не минтятся с помощью proof-of-work.

Заметьте, всё, что я делал до сих пор, подразумевало околонулевой хешрейт и такой же расход электроэнергии. Я потратил больше времени (пару часов) на то, чтобы драйверы OpenCL заработали на моей Linux-машине (для майнинга с помощью GPU), чем на написание скриптов для запуска блок-штормов.

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

Грифинг-атака на тестнет Биткойна – что это было?

Достаточно сказать, что это очень плохая идея — использовать testnet для чего-то, имеющего реальную ценность. Testnet небезопасен, и я с удовольствием докажу это людям, которые отказываются в это верить. Повторюсь: меня не волнует, если люди используют testnet для тестирования сколь угодно спорных вещей, таких как “надписи”/руны/ординалы/биржи и т.д. Но если вы собираетесь иметь дело с фактической ценностью, то гораздо лучше будет использовать для этого хотя бы что-то вроде dogecoin или litecoin — знаете, mainnet в продакшене, без намеренных ограничений.

Сброс testnet

Над изменениями в коде Bitcoin Core, которые запустят testnet4, сейчас работают несколько контрибьюторов.

Это была уникальная работа: не каждый день приходится майнить новый блок генезиса. Как оказалось, эта старая добрая тулза всё ещё работает довольно хорошо.

./generate-genesis -timestamp 1714658825 -psz "CCN 02/May/2024 Bitcoin Testnet Could Need Reset After 13 Years"
Ctrl Hash:	0x000000005611bbf1419574641c1d880d2872645ec62eb2efd605fab98d0760d2
Target:		0x00000000ffff0000000000000000000000000000000000000000000000000000
Blk Hash:	0x372e42462a9898504ccd14c037bf98436289ba1ef27088433aad521fca09bf21
Mkl Hash:	0xa2927b35a7444dd3e3ef24145a8c7054a4810c88d8cbed3896adfecae832b6fe
Nonce:		836015000
Timestamp:	1714658825
Pubkey:		000000000000000000000000000000000000000000000000000000000000000000
Coins:		5000000000
Psz:		'CCN 02/May/2024 Bitcoin Testnet Could Need Reset After 13 Years'

После 13 лет работы, testnet нуждается в сбросе, и я надеюсь, что testnet4 будет доработана и доступна в ближайшие несколько месяцев.

Ключевые выводы

Я подозреваю, что если тестовая сеть будет работать достаточно долго, чтобы её токены становились дефицитными, скорее всего, она будет накапливать ценность. В таком случае единственный способ избежать накопления ценности в testnet — это внедрить культуру регулярных сбросов.

И для всех, кто использует инфраструктуру на testnet3, я настоятельно рекомендую начинать планировать перенос инфраструктуры на testnet4 этим летом или максимум осенью.

 


Подписывайтесь на BitNovosti в Telegram!
Делитесь вашим мнением об этой статье в комментариях ниже.

На основе источника

 

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here