Ethereum: Хард-форк и проблемы с повторным воспроизведением

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

Ethereum: Хард-форк и проблемы с повторным воспроизведением

Повторное воспроизведение на скрещивающихся цепочках

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

Можно представить себе транзакцию из «основной» ветки, которая переходит в «старую» ветку, и наоборот.

Разрешаются ли форки?

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

Фактически, «вселенная» раздваивается, и часть людей остается в «старой вселенной». Может ли это произойти в Ethereum? xETHeREALx отметил существенную поддержку «старой» цепочки в сети. Если площадка обмена продолжит поддерживать «старую» цепочку, то будет существовать ликвидность и некоторая ценность монет этой ветки, что может стать основанием для дополнительной поддержки. Возможно, люди будут, как минимум, менять монеты «альтернативной вселенной» на биткоины и обратно на «реальный» эфир.

Новая реальность

Здесь мы попадаем на неизведанную территорию; насколько я знаю, до сих пор не было цепочки блоков с выразительным языком транзакций, которая имела бы форк с поддержкой обеих «версий» цепочки.

Что здесь может пойти не так? Хотелось бы выяснить это поскорее. Меня беспокоят несколько возможных углов атаки.

Воспроизведение

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

Если в результате обмена кто-либо получает средства в одной цепочке, повторное выведение средств в другой цепочке приводит к такому же расходованию. Таким же образом может быть скопирован любой вызов функции.
Пока мы проигнорируем поля одноразовых кодов (nonce) транзакций; я вернусь к этому вопросу в данной статье ниже.

Атака типа «обмен с выдерживанием»

Если осуществляется обмен в обеих цепочках, возникает реальная проблема: пусть пользователь A вкладывает средства в «старой» цепочке, а затем выводит их; тогда он может получить платеж в результате выведения и предложить его в «новой» цепочке. Вероятно, таким образом он удвоит свои деньги (за вычетом некоторой курсовой разницы между двумя эфирами). Это основное направление атаки, упомянутое в статье на reddit.

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

Счетчики nonce (одноразовые коды)

Ethereum не ведет учет результатов отдельных транзакций (txos), подобно Биткоину, но имеет механизм уникальной идентификации транзакций: каждая транзакция, выпущенная с определенного адреса, имеет счетчик nonce (одноразовый код) — значение, которое увеличивается на единицу при каждом выполнении транзакции.

Если транзакция выпускается со слишком малым значением nonce, например если уже предложена другая транзакция, то транзакция игнорируется и считается недействительной.

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

Что это означает для атаки на скрещивающиеся цепочки с целью выведения средств?

Работающая атака на скрещивающиеся цепочки с одноразовыми кодами nonce

Чтобы атака сработала, требуется следующее:

  1. Участник в обеих цепочках
  2. Способ увеличения значения счетчика nonce жертвы атаки
  3. Правильная синхронизация

Обратите внимание, что нам даже не требуется участвовать в обмене в «старой» цепочке: использовать обе цепочки нужно лишь атакующему. Представим себе следующих участников:

  • «Современная» площадка обмена, работающая только в основной цепочке
  • «Традиционная» площадка обмена, работающая только в старой цепочке
  • «Атакующий» в обеих цепочках

Как мы будем действовать?

  1. Атакующий выводит средства с помощью «современной» площадки обмена на адрес, который он контролирует в основной цепочке.
  2. Атакующий воспроизводит выведение и выполняет все операции выведения, необходимые для достижения правильного значения nonce в «традиционной» цепочке.
  3. Теперь у атакующего есть некоторое количество монет в обеих цепочках.
  4. Атакующий передает монеты на «традиционную» площадку обмена, продает их и возвращает средства в Биткоин.

Вселенные объединились, и атакующий получил дополнительные деньги.

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

Синхронизация и основополагающие принципы

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

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

Если такие атаки станут повсеместными, возможно, что «традиционные» монеты упадут в цене и на определенном этапе атака исчерпает сама себя.

И даже если нет, стоит ли нам беспокоиться о «традиционной» цепочке?

«Традиционная» цепочка заслуживает внимания: СПАМ

На ум приходит очень дешевая атака из «традиционной» цепочки на «современную»: это спам. «Традиционная» цепочка будет включать огромное число транзакций. Они могут быть включены в основную цепочку с пропуском любых транзакций, у которых имеются последовательные значения nonce. Так как «традиционные» участники обычно не участвуют в «современной» цепочке, эти транзакции будут оставаться в пуле транзакций, «засоряя» систему.

Это чрезвычайно простая и дешевая атака; другие участники сети будут создавать действительные транзакции для атакующего.

Снижение риска 1: прекратить принимать транзакции с будущими значениями nonce

Прежде всего, Geth должен прекратить принимать транзакции не по порядку; ответственность за них должен нести клиент. Схожий принцип уже давно работает в Биткоине, и, похоже, здесь может помочь лишь некоторое разумное управление инфраструктурой.

Снижение риска 2: управление счетчиками nonce или «хранение в холодильнике» (Cold Storage)

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

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

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

Требуются дополнительные исследования

Могу поспорить, что в отношении воспроизведения с вызовами функций на скрещивающихся цепочках есть еще много интересного и непонятного.

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

Ка обычно, я рад предложить свои услуги по аудиту и консультациям в сфере безопасности для цепочек блоков (блокчейнов) и умных контрактов: consulting@vessenes.com.

Peter Vessenes

Категория: 
Безопасность
10
Средняя: 10 (1 оценка)
0
Ваша оценка: Нет
1574 / 0
Аватар пользователя admin
Публикацию добавил: admin
Дата публикации: вт, 07/26/2016 - 09:48

Что еще почитать:

Комментарии:

Аватар пользователя admin

admin

Заранее прошу прощения за неточности перевода. Торопился со статьей пока тема актуальна )

вт, 07/26/2016 - 10:27

Аватар пользователя Джек

Джек

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

вт, 07/26/2016 - 10:51

Добавить комментарий