Хороший, плохой и злой баг Bitcoin

Хороший, плохой и злой баг Bitcoin

Более года все версии Bitcoin Core содержали одну из самых ужасных ошибок в истории Bitcoin. В этой статье мы раскроем хорошие, плохие и злые (отсылка к фильму 1966 года "The Good, the Bad and the Ugly" - прим. переводчика) подробности об одной из самых неприятных ошибок Bitcoin Core на сегодняшний день.

Плохо, конечно, само существование ошибки, теперь зарегистрированной как CVE-2018-17144 в банке данных уязвимостей "Common Vulnerabilities and Exposures".

Ошибка появилась как часть апдейта Bitcoin Core 0.14.0, выпущенного в марте 2017 года для повышения производительности и связанного с маршрутизацией блоков. Вкратце, ошибка не давала узлам сети отвергать блоки, содержащие транзакцию, которая тратит одни и те же средства ("входы") несколько раз, что допускает нерегулярную форму двойных трат. Это при том, что одна из задач, решавшихся при разработке Bitcoin - предотвращение двойного расходования средств.

Эта серьезная проблема могла бы проявиться по-разному. Во-первых, версии Bitcoin Core с 0.14.0 по 0.14.2 (а в некоторых случаях и более новые версии) приняли бы блок, но в то же время признали бы, что что-то не так. Тем не менее, они не смогли бы точно сказать, что именно не так. В результате узел бы перестал работать и отключился. Таким образом, если бы недопустимый блок пробился к таким узлам - это могло бы вызвать крах сети. А это плохо...

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

Технически, ошибка также могла привести к ветвлению блокчейна между затронутыми узлами (Bitcoin Core 0.15.0 до 0.16.2 и его форками) и незатронутыми узлами (в частности, Bitcoin Core 0.13.2 и более старыми, а также их форками). Однако это маловероятно, поскольку последняя категория, вероятно, не имела бы достаточного хэшрейта, чтобы создать хотя бы один блок в течение нескольких дней, не говоря уже о нескольких блоках. Поэтому, такие узлы просто остановились бы, ожидая действительного блока.

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

Теперь хорошие новости. Первая и главная хорошая новость заключается в том, что эта ошибка никогда не была использована.

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

Это означает, что майнер должен был бы сознательно рискнуть потерять вознаграждение за добытый блок в размере около 80 000 долларов. Подобная атака была бы замечена довольно быстро так как все происходит в публичном блокчейне. Достаточно быстро отчеты о сбоях заполнили бы чаты и форумы. В этот момент было бы выявлено, что некорректный блок фактически был вызван ошибкой.

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

Третья часть хороших новостей заключается в том, что разработчик с ником awemany ответственно раскрыл ошибку в первую очередь именно разработчикам, работающим над Bitcoin Core (а также над Bitcoin ABC и Bitcoin Unlimited). Первоначально ошибка была принята за ошибку отказа в обслуживании (DoS). Но, при дальнейшем рассмотрении, сотрудник Bitcoin Core и Chaincode Labs Мэтт Коралло (Matt Corallo) обнаружил, что эта же ошибка являлась еще и уязвимостью влияния на сеть. Ошибка была исправлена уже на следующий день и были выпущены версии Bitcoin Core 0.16.3 и релиз кандидат Bitcoin Core, 0.17.0. Между тем, группа участников Bitcoin Core, которая знала о проблеме, обратилась к ключевым игрокам в экосистеме Bitcoin и попросила их перейти на Bitcoin Core 0.16.3.

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

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

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

Однако, не все разделяли этот подход. Поскольку ошибка попала под пристальное внимание, все больше людей начали самостоятельно выяснять, что ошибка была более серьезной, чем просто DoS-уязвимость. Некоторые из них раскрывали полные детали уязвимости, поставив сеть Bitcoin под угрозу атаки. После того как информация об об этой уязвимости была опубликована в Hacker News (хотя позже она была убрана), стало бессмысленно дальше держать ее в секрете.

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

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

По материалам Bitcoin Magazine

Читайте также

40872022-02-04

“Примерный сын” подсыпал наркотики в чай отцу и украл его BTC

Спор отца и сына по поводу инвестиционной стратегии привел к серьезному вреду для здоровья и тюремном сроку.

Bitcoin
16272021-10-20

​​Компания Chainalysis купила Bitcoin

Chainalysis объявила о расширении своего давнего партнерства с NYDIG, в рамках которого компания конвертирует часть своих резервов в биткоин.

Bitcoin

Последние статьи из раздела Bitcoin

Свежее видео на канале

Выбор редакции

645202020-10-30

Топ 10 крипто кошельков в 2020 году

По мере роста популярности криптовалют растет и спрос на качественные и безопасные криптовалютные кошельки.

Кошельки
568162017-12-10

Bitcoin: пирамида или нет?

С января 2009 года, когда был сгенерирован первый генезиз-блок bitcoin-сети, прошло уже девять лет, но до сих пор всякого рода "эксперты" ломают копья в спорах: являются ли криптовалюты финансовой пирамидой или нет. Быстрый рост доходности bitcoin и прибыли тех, кто раньше стал участником этой системы, пугает схожестью с пирамидами 90-х.

Bitcoin
535862018-04-28

on-chain и off-chain управление: за и против

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

Blockchain
417952021-05-08

Какие альткоины принесут своим держателям доход в 2021 году?

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

Альткоины
382102018-05-12

Эволюция человека и денег

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

Это интересно
182312024-02-03

Сканер блоков (Blockchain explorer) своими руками: Зачем он нужен?

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

Обучение, Bitcoin, Ethereum, Технологии