Майнеры-злоумышленники и атаки, которые они могут осуществить



Майнеры заведуют подтверждением транзакций и — ни много ни мало — поддержанием жизнедеятельности блокчейна. «Власть» майнера измеряется в хэшрейте — то есть в доле владения вычислительными мощностями сети. И чем она выше, тем с большей вероятностью майнер-злоумышленник сможет осуществить одну из следующих атак по типу двойного расходования.

Преступления в майнинге

Атака 51%

Атака 51% предполагает, что мощности, генерирующие атаку, больше мощности всей остальной сети. По сути, это означает централизацию вычислительных мощностей. Термин придуман по аналогии с контрольным пакетом акций.

Как это происходит

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

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

При этом атакующий майнер тратит биткоины в основной (видимой всем) цепи, которую в этот момент поддерживают все остальные майнеры. И его транзакция проходит, то есть подтверждается сетью. Однако он не включает эту транзакцию в собственную скрытую цепь, то есть в этой «параллельной реальности» он по-прежнему владеет своими биткоинами.

Протокол биткоина устроен по «демократическому» принципу, или по принципу большинства — то есть он считает приоритетной более длинную цепочку блоков. И тот, у кого сосредоточена бóльшая часть мощности хэширования, добавляет блоки быстрее всего. Когда его цепь становится более длинной, чем настоящая, она начинает считаться основной цепью. После этого блокчейн будет считать записи, хранящиеся в этой версии блокчейна, актуальными — соответственно, актуальным будет признан и баланс злоумышленника, на котором лежат как будто не потраченные биткоины. И теперь он может потратить те же биткоины снова — то есть произойдет двойное расходование.

Условие, согласно которому все ноды сети предпочтут продолжать более длинную цепочку, является одной из уязвимостей proof-of-work алгоритма, который используется в Bitcoin, Ethereum, Bitcoin Cash, Litecoin, Monero, Dash, Viacoin, Dogecoin, MonaCoin и многих других криптовалютах.

Но, как поясняет разработчик биткоина Питер Тодд, атаке 51% подвержены прежде всего молодые криптовалюты: «Proof-of-work опирается на способность “перерасходовать” атакующего, и у маленькой криптовалюты с собственной proof-of-work цепью меньше ресурсов, которые она может бросить на защиту, потому она менее защищена». То есть майнерам будут нужны меньшие мощности, чтобы получить «контрольный пакет» хэшрейта такой сети. Однако данная атака вряд ли принесет майнерам финансовую выгоду и, скорее, будет использоваться как способ устранения конкурента.

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

Так, в июле 2014 года майнинговый пул Ghash.io ненадолго получил контроль над 55% мощности сети Bitcoin. Однако пул добровольно согласился снизить собственные мощности и не превышать пороговое значение 40% в будущем.

Стоит отметить, что блокчейн-сети, использующие алгоритм proof-of-stake, подвержены угрозе атаки 51% намного меньше, поскольку при данном алгоритме поддержанием работоспособности блокчейна занимаются валидаторы, работа которых основана на их доле владения криптовалютой сети (англ. «stake»), а не на вычислительных мощностях их нод. Любая попытка атаки в этой системе становится невыгодной.

Недавние атаки 51%

Verge

Первая атака 51% на анонимную криптовалюту Verge произошла в апреле 2018 года, когда в течение нескольких часов майнеры-злоумышленники смогли получить порядка 250,000 монет Verge, что на тот момент составляло около $16,000. Этот случай стал своего рода прецедентом, поскольку данная атака стала возможной из-за бага в коде, а не из-за захвата вычислительных мощностей.

Этот баг позволил хакеру подделать временные метки, благодаря чему он смог добывать новый блок каждую секунду (а не каждые 30 секунд), причем по одному и тому же алгоритму Scrypt, хотя код Verge предполагает, что алгоритм должен меняться в каждом следующем блоке. Майнер-злоумышленник заполучил контроль над большей частью хэшрейта сети и в течение трех часов, в которые длилась атака, мог добыть 2674 блоков, что составляет 3.9 миллиона монет (как сообщил пользователь Bitcointalk под ником ocminer, атака началась на 2007365 блоке и закончилась на 2010039 блоке). Однако команда проекта заявила об ущербе в 250,000 Verge, отметив, что «не все блоки, добытые за те три часа, генерировались хакером».

В результате Verge осуществили хардфорк сети, который должен был устранить уязвимость в коде, однако этого не произошло, в связи с чем через месяц сеть снова подверглась атаке 51%. «Поскольку с прошлой атаки никаких ключевых изменений не было внесено в работу сети (только временное решение), то в этот раз атакующая сторона смогла использовать два алгоритма вместо одного, чтобы провести форк сети для получения собственной выгоды и заработать миллионы», — написал тот же пользователь Bitcointalk. На этот раз потери исчислялись $1.7 миллиона в Verge.

В третий раз о возможной атаке стало известно 27 мая, когда в сети Verge были замечены «странные транзакции» с неправильными временными метками, что могло сигнализировать об угрозе двойной траты. 29 мая ocminer также подтвердил, что на сеть была совершена атака. Однако далеко не все пользователи согласились с этим предположением. По их мнению, поскольку активность сети Verge не показала снижения сложности ни по одному из пяти алгоритмов майнинга за тот период, а также не было скачков в скорости создания новых блоков, то с 22 мая новых атак на сеть не совершалось.

Bitcoin Gold

О том, что на криптовалюту осуществляется атака 51%, сообщил директор по коммуникациям Bitcoin Gold Эдвард Искра. 16 мая неизвестному хакеру удалось завладеть большей частью хэшрейта сети, в результате чего он получил контроль над транзакциями в блокчейне криптовалюты. Это позволило злоумышленнику проводить двойные траты с криптовалютой, внося монеты на различные криптобиржи и тут же отменяя транзакции, а также зачисляя эти же самые монеты на свой кошелек. Атака длилась три дня, в течение которых хакеру удалось накопить порядка 388,000 BTG на сумму $18 миллионов по тогдашнему курсу.

MonaCoin

Атака на японскую монету MonaCoin также произошла в мае и, по данным издания CCN, длилась с 13 по 15 мая. В результате, из-за уязвимости блокчейна криптовалюты, неизвестному майнеру удалось получить $90,000. Это стало возможным, поскольку сеть MonaCoin предусматривает достаточно быстрое нахождение новых блоков.

Так, один майнер в короткие сроки смог добыть не один, а сразу два блока, однако он оставил это в секрете. В результате произошло разветвление блокчейна, и в дальнейшем хакер опубликовал собственную, более длинную цепочку блоков, которую, по логике proof-of-work алгоритма, продолжили поддерживать другие участники сети. Таким образом, один майнер получил контроль над сетью MonaCoin, а все блоки, которые были найдены до публикации секретной цепочки, были признаны недействительными.

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

Сколько стоит атака 51%?

В конце мая в сети появился сайт Crypto51.app, рассчитывающий стоимость часа атаки 51% на криптовалюты с алгоритмом proof-of-work. По словам неизвестного крипто-энтузиаста, запустившего данный ресурс, таким образом он хочет привлечь внимание криптосообщества к надвигающейся угрозе со стороны недобросовестных майнеров.

Согласно сайту, если час атаки на блокчейны таких популярных криптовалют, как биткоин или эфир, будет стоить $711,075 и $291,419 соответственно, то атака на менее крупные сети обойдется злоумышленникам намного дешевле. Например, чтобы заполучить большую часть хэшрейта сети Bytecoin, потребуется $455, сети Ubiq — $363, а атака на блокчейн Mooncoin будет стоить всего $5. При этом данные суммы не берут в расчет вознаграждение майнеров за добавление новых блоков, которые могут сократить расходы атакующей стороны на 80%.

Атака-гонка

Атака-гонка, или race attack, представляет собой еще один тип двойного расходования.

Неопытные или спешащие продавцы могут отправить товар покупателю, как только увидят попытку перевода средств. Некоторые бизнесы сознательно практикуют так называемые «быстрые платежи», или «транзакции с нулевым подтверждением», так как, в зависимости от загруженности мемпула, транзакции могут ожидать подтверждения от нескольких минут до нескольких дней. Чаще всего такой подход используется при небольших переводах.

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

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

В целях безопасности продавцам советуют не позволять входящие подключения к нодам и не принимать прямые платежи от покупателей, а также — это правило действует для всех биткоин-транзакций — дожидаться нескольких подтверждений сети, в зависимости от суммы перевода. Количество подтверждений также отражается в эксплорере и означает количество блоков, которые были включены в цепь с момента добычи блока, содержащего вашу транзакцию (включая этот блок). Одно подтверждение оставляет большой простор для атаки двойного расходования и может использоваться только для мелких биткоин-платежей до $1000 (сумма, ради которой хакеру невыгодно предпринимать попытку атаки). При этом каждое подтверждение экспоненциально уменьшает риск отмены транзакции: ожидание 3 подтверждений сети считается безопасным для транзакций от $1000 до $10,000 и является стандартом многих бирж при внесении депозита, 6 подтверждений — необходимый показатель для переводов от $10,000 до $1,000,000, а для еще более крупных сумм советуют дожидаться 60 подтверждений сети.

Атака Финни

О возможности такой атаки предположил Хэл Финни, программист и получатель первой биткоин-транзакции, и атака была названа в его честь.

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

Если принять время с момента нахождения блока и до принятия продавцом «обманного» платежа за t, а среднее время добычи нового блока за T, вероятность того, что в это время в сети появится еще один блок, рассчитывается по формуле t/T и, если это произойдет, то атака не удастся, а майнер потеряет награду за блок в размере D. Таким образом, средняя стоимость такой атаки составляет (t/T)xD.

Чтобы обезопасить себя от подобной атаки и убедиться, что она экономически невыгодна хакеру, продавец должен выждать время (t), равное: VxT/B, где V — сумма перевода. Однако этот расчет будет недействителен, если хакер использует один и тот же блок для осуществления сразу нескольких подобных атак. Классический совет для повышения безопасности — дожидаться как можно большего количества подтверждений транзакции.

При этом чем выше хэшрейт, находящийся в распоряжении хакера, тем вероятнее для него успешный исход атаки (и в этом случае ему не требуется владение 51% вычислительных мощностей).

«Хакер не просто совершает скрытую транзакцию — он делает оффлайн-транзакцию, которая встанет в очередь уже после подключения кошелька к блокчейну. В то же время вторая транзакция является младшей по времени. И такие атаки производятся только в крупных масштабах. Потому что обмануть магазин даже на 1 биткоин с помощью такой атаки совершенно невыгодно. А для пущей верности хакеры рассчитывают собственную удачу (с помощью которой они скорее всего найдут нужный им блок), исходя из информации о прошлых блоках, о количестве майнеров с хэшрейтом не менее 40−50%, а также о том, кто добыл последние несколько блоков. Тогда можно посчитать по формулам Байеса или еще каким-либо вероятностным уравнениям коэффициент удачи их мощностей», — пояснил Юрий Кудлович, эксперт в области инновационных технологий.

Атака Vector76

Атака была названа в честь пользователя Bitcointalk под ником vector76, который описал этот тип двойного расходования в 2011 году. Также известна как «атака одного подтверждения» и представляет собой комбинацию атаки-гонки и атаки Финни.

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

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

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

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

«Предположим сценарий, при котором нечестный майнер имеет доступ примерно к 175 TH/s (терахэш в секунду, единица измерения хэшрейта. — DeCenter). При текущем уровне сложности майнер предположительно добудет блок за неделю [и] заработает… около 25 биткоинов. Таким образом, атака Vector76, будет прибыльной, пока из этого сервиса с одним подтверждением сети можно вывести более 25 биткоинов», — написал пользователь Reddit под ником sgornik для разъяснения атаки. При этом, учитывая, что пост был написан 3 года назад, критерии прибыльности изменились. После очередного халвинга награда за добытый блок сократилась вдвое, то есть в сегодняшней ситуации выгодным будет вывод в размере, превышающем 12.5 биткоина.

Схема атаки

Майнер управляет полной нодой (нода A), которая подсоединяется только к ноде провайдера кошелька. Также хакер управляет второй полной нодой, и эта нода В подключена к одному или нескольким хорошо подсоединенным пирам.

Хакер создает две транзакции, которые расходуют одни и те же монеты. Первая транзакция отправляет монеты (например, 20 биткоинов) на депозитный адрес хакера, предоставляемый тем самым провайдером кошелька. Вторая отправляет незначительное количество биткоина (например, 0.01 биткоина) на биткоин-адрес в другом кошельке хакера. Ни одна из этих транзакций пока не транслируется в сеть.

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

Таким образом, о транзакции, пересылавшей 20 биткоинов, знает только нода А, принадлежащая хакеру, и нода провайдера кошелька (поскольку они соединены). Нода кошелька попытается передать транзакцию своим пирам, но в то же время транзакция в 0.01 биткоина, скорее всего, уже достигла всех нод сети Bitcoin, потому что была отправлена на ноду B, которая подключена к хорошо подсоединенным пирам.

Эти ноды, уже знающие о транзакции в 0.01 биткоина, отклонят транзакцию в 20 биткоинов как двойную трату. В конце концов какой-то другой майнер добудет блок и включит в него одну из двух этих транзакций — вероятнее всего, 0.01 биткоин, поскольку она была быстрее передана по сети. Как только хакер увидит добытый блок на ноде B, он транслирует в сеть скрываемый до этого блок с ноды A, которая подсоединена к ноде провайдера кошелька.

Если все будет выполнено правильно, результат будет таков: провайдер увидит блок с транзакцией, пересылающей депозит в 20 биткоинов, которая к тому моменту уже получила одно подтверждение, и переведет на аккаунт хакера 20 биткоинов (скорее всего, уже другими монетами).

Тем временем в сети Bitcoin будет добыт еще один блок, и блокчейн, вероятнее всего, зная о транзакции в 0.01 биткоин, отклонит транзакцию в 20 биткоинов. Когда нода провайдера кошелька увидит этот следующий блок, она откажется от блока, добытого хакером и содержащего 20 биткоинов, поскольку цепь с этим блоком окажется более короткой.

В случае удачи кошелек позволит вывод 20 биткоинов, даже если транзакция с таким депозитом была в какой-то момент отменена. Таким образом, хакер получит 20 биткоинов от провайдера кошелька и сохранит 0.01 биткоина, отправленные на его собственный кошелек.

Если что-то пойдет не так и каким-то образом транзакция в 20 биткоинов будет передана в сеть успешнее, а блок с ней будет добыт, хакер просто выведет 20 биткоинов со своего аккаунта у провайдера кошелька. При таком исходе он все равно сохраняет 20 биткоинов и единственный минус в том, что он потратит неделю на добычу блока, израсходовав вычислительные мощности и ничего за это не получив.

Другой возможный итог неудачной атаки: блок, добытый хакером, успешно передается в сеть и майнеры продолжают поддерживать цепь с этим блоком, которая в итоге становится самой длинной, а значит — основной. В этом случае транзакция в 20 биткоинов уже не будет считаться двойной тратой, но зато хакер получит награду в 12.5 биткоина за добытый блок.

Пользователь Reddit под ником sgornick отмечает, что шансы на то, что атака Vector76 будет прибыльной, велики. Но тем не менее это редкий вид атак — вероятно, потому что для сегодняшних провайдеров кошельков не выполняются три обязательных условия, делающих эту атаку возможной, то есть кошельки обычно не позволяют депозиты после всего одного подтверждения сети и входящие подключения, а также не используют статичные IP-адреса.

Атака альтернативной истории

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

Хакер направляет продавцу транзакцию, оплачивая какой-то товар. Одновременно он тайно майнит альтернативную цепь, в которую также включен блок с этой транзакцией. Дождавшись определенного количества подтверждений (n), продавец направляет товар хакеру. Если к этому моменту хакер добыл более n блоков, он транслирует свой форк в публичную сеть и сохраняет свои монеты (поскольку цепь с «честной» транзакцией стала короче и сеть отбросила ее, одновременно аннулировав все включенные в нее транзакции).

Если же хакер еще не успел сделать свою цепь длиннее, он может попытаться «нагнать» основную цепь. Если это не удается, его платеж продавцу проходит и, помимо этого, он терпит убытки, сопряженные с процессом майнинга.

Вероятность успеха такой атаки зависит от двух показателей: доли хэшрейта, которая находится в распоряжении майнера, и количества подтверждений, которые ждет продавец.




Загрузка комментариев…