Игра Нод | Глава Вторая

Централизация близко. Боги услышали наши мольбы и перестали потворствовать пополнению армии Короля Ночи. Лорды Вестероса откликнулись на призыв Джона Сноуда и прибыли на первый военный Совет в Винтерфелл. Во время обсуждения стратегии борьбы с армией мертвых лизеров двери Зала Заседаний внезапно распахнулись и перед Лордами возник Брандон Старк. Его встревоженный взор был устремлён к Джону:

-Джон, у меня были видения.
-Бран, это может подождать до окончания Совета? - Джон был сильно озабочен тревогами Лордов, а также тем фактом, что не все Лорды воспринимали надвигающуюся угрозу всерьёз.
-Боюсь, что нет, Джон... Ты должен это знать. Я видел падение Вестероса. Я видел крах этого мира и торжество Короля Ночи. У нас очень мало времени, Джон. Стена разрушена.
В Зале воцарилась леденящая тишина.
-Говори, Бран. Что ты видел?

Внимание! Вся информация, которая изложена ниже, является результатом скоординированной работы людей, которым небезразлична дальнейшая судьба Waves Platform. Мы не стремимся причинить какой-либо вред экосистеме, но ставим своей целью укрепить её и улучшить.

Суть

С момента начала Игры Нод было создано несколько инициативных групп с разными задачами. Одной из этих групп была поставлена задача продемонстрировать на практике возможный и самый опасный вектор атаки на блокчейн Waves Platform. Это означает следующее:

  • Мы не проводили атаку на основной блокчейн Waves MAINNET.
  • Мы не просто доказали, что атака возможна, мы провели её на практически полной копии MAINNET, которую создали внутри этой рабочей группы.
  • Для демонстрации атаки была использована актуальная версия ноды 0.13.4. Именно на этой версии работает MAINNET.
  • Для осуществления атаки не нужны навыки программирования. Вся атака была проведена без каких-либо изменений в коде.
  • Для проведения атаки желательно, но необязательно, иметь доступ к конфигурациям нод, через которые осуществляется атака. Ноды могут быть использованы "вслепую", без ведома их владельцев.
  • Успешная атака может быть использована для получения огромных прибылей атакующими и полного обрушения курса Waves. Если подобная атака действительно произойдёт в MAINNET, все ваши Waves не будут стоить ни цента.
  • Всё это возможно только потому, что сеть Waves имеет критически высокий уровень централизации. Именно борьба с централизацией является для нас наивысшим приоритетом. Поэтому мы не стремимся атаковать MAINNET, не продаём свои знания и опыт, но призываем вас не допустить подобную атаку в будущем.

Краткое изложение

Для тех, кто не обладает глубокими техническими знаниями, но обладает монетами Waves, мы рассказываем кратко суть атаки.

На данный момент существует порядка 90 генерирующих блоки нод (серверов), которые образуют собой единую сеть, тот самый блокчейн. Каждая из этих нод обладает определенным генерирующим балансом, в зависимости от размера которого, она получает право на запись блоков в сеть. Чем больше генерирующий баланс ноды, тем больше эта нода записывает блоков в сеть. На текущий момент, 3 топ ноды записывают в сумме около 60% всех блоков, что делает эти ноды потенциально опасными, так как их временное отключение от основной сети (по умолчанию до 100 блоков или примерно полтора часа) всё равно сохраняет право на основную сеть за ними.

За эти полтора часа злоумышленники могут вывести на внешнюю биржу (или любую другую внешнюю платформу, где можно быстро потратить Waves), например Бинанс, несколько десятков или сотен тысяч Waves. Далее атакующие могут продать все свои Waves на всех биржах и площадках, через которые они атакуют. Опустошив ликвидность маркетов, злоумышленники могут быстро инициировать вывод BTC, ETH и так далее с этих площадок в свои кошельки. На всё это нужно около 30-40 минут. Как только средства будут выведены, атакующие ноды будут включены в основную сеть и все транзакции, которые были проведены с Waves, будут отменены внутри платформы. Злоумышленники получат назад свои Waves, а также останутся при своих BTC, ETH и так далее, что они успели заполучить вне платформы.

Курс Waves будет обрушен, как и репутация. И, возможно, мы станем свидетелями появления Waves Classic.

Пояснения

Блокчейн = способ управления

Прежде чем вдаваться в детали касательно «атаки 51%», очень важно понимать, что блокчейн протокол – это по сути своей форма управления. Блокчейн управляет регистром данных, например, данных о транзакциях. Программное обеспечение блокчейна обеспечивает управление этими данными, и поэтому для разрешения различных вопросов пропадает необходимость в третьей, независимой, стороне в лице правительства или банка. Большинство блокчейн-решений является децентрализованными. Протокол блокчейн платформы Waves основан на демократии. Это означает, что большинство участников сети (владельцев нод) принимают решение о том, какая версия блокчейна (цепочки блоков) является истинной и представляет правду.

В чем заключается суть «атаки 51%»

Попробуем разобраться. Когда какая-либо транзакция подписывается владельцем Waves, она помещается в пул неподтвержденных транзакций. Генерирующие ноды выбирают транзакции из этого пула для того, чтобы сформировать блок транзакций. Затем, чтобы добавить этот блок транзакций в блокчейн цепочку, нода должна получить право на генерирование нового блока. Чем больше у ноды генерирующий баланс, тем выше вероятность, то есть ее шансы, на то, что данная нода сгенерирует новый блок. Как только нода генерирует блок и помещает туда транзакции (в микроблоках), она транслирует эту информацию на все другие генерирующие ноды. Ноды примут этот блок только в том случае, если все транзакции внутри блока действительны согласно уже существующей цепочке записей транзакций в блокчейне. Обратите внимание, что недобросовестная нода (нода, которой владеет злоумышленник) никогда не сможет создать транзакцию от лица другого человека, поскольку для этого ей потребуется цифровая подпись этого человека (приватный ключ). Поэтому отправка Waves с чужого счета просто невозможна без доступа к соответствующему приватному ключу.

«Атака 51%» в сети Waves

Отказ от ответственности: для проведения атаки мы создали отдельную, свою собственную приватную блокчейн сеть, взяв за основу версию 0.13.4 платформы Waves. Также мы воспроизвели пропорционально балансы лизинговых пулов, основываясь на данных, взятых из WavesMAINNET.

Общие замечания:

  • Абсолютно никаких изменений кода в кодовой базе платформы не происходило.
  • Чтобы воспроизвести текущее распределение генерирующих балансов сети MAINNET во время атаки, использовались только лизинговые Waves.
  • Атакующий не рискует своими деньгами, поскольку использует лизинговые Waves, то есть те, которые были отправлены в лизинг на его ноду. Это стало возможным, поскольку команда Waves использует алгоритм LPoS (Leased Proof-of-Stake), а не обычный PoS (Proof-of-Stake).
  • Один из способов проведения атаки – это умышленный сговор владельцев нод. Это может быть как один человек, так и несколько. Это не имеет значения. Единственное, что требуется для данной атаки, — это, чтобы ноды злоумышленников имели суммарный генерирующий баланс больше или равный 51% от общей генерирующей мощности сети. В случае с Waves достаточно всего трех топовых нод.
  • В то же время атаку можно осуществить и без сговора владельцев нод и даже без какого-либо их участия. Атака может быть произведена исключительно с помощью сетевых утилит. Атаку может провести сетевой провайдер, либо она может быть осуществлена с использованием криптографической атаки посредника ("человек посередине").

Начальные условия:

  1. Приватная блокчейн сеть, построенная на базе платформы Waves версии 0.13.4.
  2. Один Waves кошелек подключен к основной сети Waves.
  3. Другой Waves кошелек подключен к ноде, которая была использована для атаки.
  4. 15 генерирующих нод с суммарным генерирующим балансом равным 42 000 000 Waves.
  5. 3 топовые ноды имеют в сумме 60% генерирующей мощности или 25 200 000 Waves.
  6. 3 топовые ноды находятся под контролем одного человека или организации.
  7. Кошелек A и Кошелек B принадлежат злоумышленнику.
  8. Кошелек C - это некий внешний адрес (например, биржа, где есть маркеты с Waves, или любая другая торговая платформа, позволяющая производить оплату в Waves), который будет использовать для того, чтобы вывести средства с платформы Waves.

Сценарий атаки

Шаг 1: Разделение цепочки

Три топовые ноды были отсоединены от основной сети на определенном этапе, скажем, в момент, когда длина цепи блокчейн составляла 3045 (Height = 3045). Однако эти три топовые ноды продолжили коммуницировать между собой. Таким образом, блокчейн разделился на две отдельные цепочки: поддельную и оригинальную.

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

Шаг 2: Создание транзакции «двойного расходования»

Атакующий совершает две транзакции:

  1. Одну в поддельной цепочке: TX1 - перевод всех Waves из кошелька A на кошелек B.
  2. Другую в оригинальной цепочке: TX2 - перевод всех Waves из кошелька A на кошелек C.
    Таким образом, у нас теперь есть транзакция TX1 в блоке #3046 в поддельном блокчейне, и транзакция TX2 в блоке #3047 в настоящем блокчейне.

Иными словами, злоумышленник дважды потратил одну и ту же сумму с Кошелька А, но сделал это в разных блокчейн цепочках.

Блокчейн спроектирован таким образом, чтобы следовать принципу демократического управления, так же известному как “принцип большинства”. В блокчейне делается это за счет того, что блокчейн всегда выбирает более длинную цепочку в качестве источника правды. Ведь, в конце концов, большинство добавляет новые блоки к своей версии блокчейна быстрее, чем это делает меньшинство. Именно так блокчейн определяет, какая цепочка является истинной, а какая ложной. И, в свою очередь, так определяется на чём основаны балансы всех кошельков.

Шаг 3: Слияние цепочек

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

Цепочка злоумышленника теперь становится правдивым блокчейном, а все транзакции, которые отсутствуют в ней, будут применены в новых блоках. Однако транзакция с Кошелька A на Кошелек C не может быть осуществлена, так как деньги находятся уже вне текущего блокчейна. Также, все Waves уже были отправлены на Кошелек B, и Кошелек A пуст. Поскольку и Кошелек A, и Кошелек B принадлежат атакующему, то он вновь становится владельцем тех же самых Waves. Теперь он может потратить их еще раз. Важно, что все Waves, которые были посланы на Кошелек C должны быть выведены из текущей сети перед слиянием, то есть, отправлены, например, на какую-то другую биржу.

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

Следите за новостями, следующая глава Игры Нод уже в пути.

Next PostPrevious Post