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

Повторное воспроизведение на скрещивающихся цепочках
Проще говоря, если одна ветка содержит действительную транзакцию, проблема заключается в том, что транзакция может быть «воспроизведена» в другой ветке и это может привести к хаосу.
Можно представить себе транзакцию из «основной» ветки, которая переходит в «старую» ветку, и наоборот.
Разрешаются ли форки?
В случае типичного форка они разрешаются быстро. Когда хард-форк вызывает социальные проблемы, может оказаться так, что меньшинство использует определенную ветку в течение некоторого времени или все время.
Фактически, «вселенная» раздваивается, и часть людей остается в «старой вселенной». Может ли это произойти в Ethereum? xETHeREALx отметил существенную поддержку «старой» цепочки в сети. Если площадка обмена продолжит поддерживать «старую» цепочку, то будет существовать ликвидность и некоторая ценность монет этой ветки, что может стать основанием для дополнительной поддержки. Возможно, люди будут, как минимум, менять монеты «альтернативной вселенной» на биткоины и обратно на «реальный» эфир.
Новая реальность
Здесь мы попадаем на неизведанную территорию; насколько я знаю, до сих пор не было цепочки блоков с выразительным языком транзакций, которая имела бы форк с поддержкой обеих «версий» цепочки.
Что здесь может пойти не так? Хотелось бы выяснить это поскорее. Меня беспокоят несколько возможных углов атаки.
Воспроизведение
Атака с повторным воспроизведением проста: берем действительную транзакцию в одной цепочке и предлагаем ее в другой. Так как невозможно определить, из какой цепочки пришла транзакция, в предельном случае обе транзакции будут работать одинаково.
Если в результате обмена кто-либо получает средства в одной цепочке, повторное выведение средств в другой цепочке приводит к такому же расходованию. Таким же образом может быть скопирован любой вызов функции.
Пока мы проигнорируем поля одноразовых кодов (nonce) транзакций; я вернусь к этому вопросу в данной статье ниже.
Атака типа «обмен с выдерживанием»
Если осуществляется обмен в обеих цепочках, возникает реальная проблема: пусть пользователь A вкладывает средства в «старой» цепочке, а затем выводит их; тогда он может получить платеж в результате выведения и предложить его в «новой» цепочке. Вероятно, таким образом он удвоит свои деньги (за вычетом некоторой курсовой разницы между двумя эфирами). Это основное направление атаки, упомянутое в статье на reddit.
Однако это не единственная операция, вызывающая беспокойство; по сути, так как допустимо воспроизведение произвольных вызовов функций, с участниками обеих цепочек могут происходить разнообразные забавные вещи.
Счетчики nonce (одноразовые коды)
Ethereum не ведет учет результатов отдельных транзакций (txos), подобно Биткоину, но имеет механизм уникальной идентификации транзакций: каждая транзакция, выпущенная с определенного адреса, имеет счетчик nonce (одноразовый код) — значение, которое увеличивается на единицу при каждом выполнении транзакции.
Если транзакция выпускается со слишком малым значением nonce, например если уже предложена другая транзакция, то транзакция игнорируется и считается недействительной.
Если же транзакция выпускается со слишком большим значением nonce, например если не наблюдалось некоторых промежуточных транзакций, то она удерживается в пуле транзакций, пока не подойдет ее очередь.
Что это означает для атаки на скрещивающиеся цепочки с целью выведения средств?
Работающая атака на скрещивающиеся цепочки с одноразовыми кодами nonce
Чтобы атака сработала, требуется следующее:
- Участник в обеих цепочках
- Способ увеличения значения счетчика nonce жертвы атаки
- Правильная синхронизация
Обратите внимание, что нам даже не требуется участвовать в обмене в «старой» цепочке: использовать обе цепочки нужно лишь атакующему. Представим себе следующих участников:
- «Современная» площадка обмена, работающая только в основной цепочке
- «Традиционная» площадка обмена, работающая только в старой цепочке
- «Атакующий» в обеих цепочках
Как мы будем действовать?
- Атакующий выводит средства с помощью «современной» площадки обмена на адрес, который он контролирует в основной цепочке.
- Атакующий воспроизводит выведение и выполняет все операции выведения, необходимые для достижения правильного значения nonce в «традиционной» цепочке.
- Теперь у атакующего есть некоторое количество монет в обеих цепочках.
- Атакующий передает монеты на «традиционную» площадку обмена, продает их и возвращает средства в Биткоин.
Вселенные объединились, и атакующий получил дополнительные деньги.
Обратите внимание, что управление одноразовыми кодами nonce несколько запутано; если атакующий не может довести nonce до правильного значения, транзакция удерживается в пуле. Если «современная» площадка обмена примет участие в «традиционной» цепочке, то значения счетчиков nonce могут быть увеличены после выведения средств.
Синхронизация и основополагающие принципы
Нарушения синхронизации в распределенных системах весьма неприятны. Сейчас площадки цифрового обмена валют не решают такие проблемы; они рассматривают цепочку с задержкой как фактически неизменную и продолжает заниматься своими делами. Без сомнений, здесь есть о чем беспокоиться.
С другой стороны, стоит ли участникам волноваться о том, что происходит с их монетами в старой «альтернативной вселенной»? Возможно, что нет: они привержены «современной» цепочке, и все, что сеет хаос в «традиционной» цепочке, лишь повышает ценность «современной» цепочки.
Если такие атаки станут повсеместными, возможно, что «традиционные» монеты упадут в цене и на определенном этапе атака исчерпает сама себя.
И даже если нет, стоит ли нам беспокоиться о «традиционной» цепочке?
«Традиционная» цепочка заслуживает внимания: СПАМ
На ум приходит очень дешевая атака из «традиционной» цепочки на «современную»: это спам. «Традиционная» цепочка будет включать огромное число транзакций. Они могут быть включены в основную цепочку с пропуском любых транзакций, у которых имеются последовательные значения nonce. Так как «традиционные» участники обычно не участвуют в «современной» цепочке, эти транзакции будут оставаться в пуле транзакций, «засоряя» систему.
Это чрезвычайно простая и дешевая атака; другие участники сети будут создавать действительные транзакции для атакующего.
Снижение риска 1: прекратить принимать транзакции с будущими значениями nonce
Прежде всего, Geth должен прекратить принимать транзакции не по порядку; ответственность за них должен нести клиент. Схожий принцип уже давно работает в Биткоине, и, похоже, здесь может помочь лишь некоторое разумное управление инфраструктурой.
Снижение риска 2: управление счетчиками nonce или «хранение в холодильнике» (Cold Storage)
Если однажды площадка обмена заявит о своих правах на монеты в «традиционной» цепочке, для нее будет иметь смысл массово увеличить значения nonce, по крайней мере на год использования. Вероятно, это будет осуществляться путем расходования средств или выполнения каких-либо недорогих транзакций. Это потребует расходования газа, но оставит открытые возможности на будущее.
Либо площадки обмена могут создать адрес «традиционного» «холодильника» и отправлять все туда, делая тем самым воспроизведение выведения средств неэффективным.
Это выглядит как очень хорошая идея, если есть какой-либо шанс на то, что второстепенная ветка будет использоваться.
Требуются дополнительные исследования
Могу поспорить, что в отношении воспроизведения с вызовами функций на скрещивающихся цепочках есть еще много интересного и непонятного.
Я призываю сообщество Ethereum занять единую позицию и отказаться от старой ветки, особенно это касается площадок обмена и других групп, которые могут иметь финансовые стимулы держаться за эту ветку.
Ка обычно, я рад предложить свои услуги по аудиту и консультациям в сфере безопасности для цепочек блоков (блокчейнов) и умных контрактов: [email protected].
Peter Vessenes
Комментарии:
admin
#
Заранее прошу прощения за неточности перевода. Торопился со статьей пока тема актуальна )
вт, 07/26/2016 - 10:27
Джек
#
Походу, Эфир рушится под тяжестью всех ошибок, которыми создатели его щедро наградили.
вт, 07/26/2016 - 10:51