Уязвимость Lightning Network: как пользователь протокола потерял 4 BTC

Уязвимость Lightning Network: как пользователь протокола потерял 4 BTC

На прошлой неделе пользователь Reddit рассказал, как он потерял 4 ВТС ($30 000) в сети Lightning Network, принудительно закрыв канал c использованием устаревшей резервной копии узла. Ранее в сентябре исследователи устранили ошибку протокола, позволяющую тратить несуществующие биткоины и выявили уязвимость сети перед обычной DoS-атакой. Сеть Lightning Network должна решить проблему масштабирования биткоина и обеспечить быстрые, дешевые и удобные микротранзакции. Однако примеры, подобные этим, показывают, что сеть далека от готовности, а пользователи должны действовать с осторожностью, пока разработка все еще находится на относительно ранней стадии. DeCenter разобрался в уязвимостях Lightning Network, мерах предосторожности для пользователей и перспективах развития сети.

Как работает Lightning Network

Lightning Network (LN) — платежный протокол второго уровня, «разворачивающийся» поверх основного блокчейна. Он проводит транзакции между пользователями напрямую, не записывая их в блокчейн. Вместо этого протокол создает специальные платежные каналы. Необходимые средства блокируются, пользователи обмениваются «долговыми расписками», не пересылая друг другу монеты, а в блокчейн записываются лишь результат транзакций после закрытия канала.

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

LN призван решить проблему низкой скорости транзакций и масштабируемости сети Bitcoin. Ведь этот протокол позволяет проводить транзакции почти моментально, экономить на комиссиях, а также сокращает объем блокчейна, совершая мелкие транзакции за его пределами. Кроме того, технология позволяет обменивать монеты разных блокчейнов без посредников в виде бирж. Энтузиасты уверены, что LN выведет биткоин на уровень MasterCard или Visa.

Протокол LN впервые представили в 2015 году. Однако он до сих пор он находится в стадии экспериментальной разработки. Поэтому, переводя средства через LN, пользователь вынужден действовать на свой страх и риск.

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

Как пользователь Reddit потерял 4 ВТС

На прошлой неделе пользователь Reddit под ником ZipoTm и владелец крупного узла lightning-casino.com опубликовал на форуме свой разговор с поддержкой Lightning Network о том, как он потерял 4 ВТС в сети LN. Пользователь решил остановить транзакции и принудительно закрыл канал, используя устаревшую резервную копию узла, что привело к потере средств.

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

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

Закрывая канал, он использовал резервную копию, датированную несколькими днями ранее, и его LND (самый популярный клиент для Lightning Network) не был синхронизирован с другими узлами. Скорее всего, это произошло из-за отключения энергии, случившегося за несколько дней до этого. Программный сбой не позволил ZipoTm воспользоваться более актуальной резервной копией. LN-узлы, с которыми у него были каналы, увидели, что он отправил в сеть транзакции из старых состояний канала. Технически это прямое нарушение контракта, и узлы просто забрали все его биткоины из этих каналов.

Случай с ZipoTm не уникален. Аналогичная история произошла в марте 2018 года. Пользователь LND сделал резервную копию сети с помощью устаревшей базы данных, после чего закрыл каналы. Система восстановления не смогла синхронизировать данные, и оценила это как вмешательство хакеров. В результате пользователь потерял 0.00299095 ВТС (правда, его друзья вернули их обратно).

Произошла ошибка или сработал протокол защиты?

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

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

«Думаю, случай с ZipoTm — пример технологической особенности LN и ошибки со стороны пользователя. Таким образом, ответственность за процесс делят между собой сеть и клиент, который, прежде всего, должен обеспечивать своевременный бэкап операций», — считает Валерий Петров, вице-президент РАКИБ.

Можно ли было избежать потери средств?

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

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

ZipoTm действовал опрометчиво и в сумме передаваемых средств. Чтобы обойти ограничение в 0.16 ВТС на узел, он явно запустил несколько десятков нод. Для экспериментальной технологии это слишком рискованно.

В оправдание собственной беспечности ZipoTm отметил, что не новичок в криптовалютах: «Я — системный администратор и немного разбираюсь в серверах. Уверен, что все владельцы больших нод столкнутся с этой проблемой».

Свою версию случившегося и оценку действий пользователя дала техническая команда криптобиржи EXMO. Эксперты предполагают, что ZipoTm использовал «revoked transaction close»: ситуацию, когда одна из сторон намеренно пытается обмануть другую, публикуя устаревшую транзакцию обязательства (предположительно, предыдущую версию, содержащую данные о транзакциях в ее пользу). Если какой-либо узел пытается обмануть сеть, передавая устаревшую транзакцию подтверждения (любой предыдущей транзакции подтверждения, кроме самой последней), другой узел в канале может использовать свой закрытый ключ отзыва, чтобы получить все средства из исходной транзакции финансирования канала. Доказать, что это случайно сделано, в данном случае невозможно, впрочем, как и обратное. Но предотвратить ошибку можно было, проверив, что LND синхронизирован.

К сожалению, сейчас вернуть средства нельзя. «Теоретически возможность вернуть средства существует, но потребует технологической доработки, либо решений на стороне клиента, либо самой сети Lightning Network. На данный момент случившееся, по сути, эквивалентно такой операции, как перевод средств на ошибочный криптокошелек — операция уже записана в блокчейн и отменить ее невозможно. Единственное, что можно предложить — это разработать дополнительный механизм, который позволил бы подтверждать факт сделок, информация о которых была потеряна, и затем по согласованию обеих сторон совершать дополнительную корректирующую проводку. Однако это потребует не только технической проработки, но и согласованного решения со стороны всех клиентов», — уточнил Валерий Петров.

Уязвимость, позволяющая тратить поддельные биткоины

Еще в конце июня 2019 года разработчик Lightning Labs Расти Рассел обнаружил в протоколе LN ошибку, позволяющую тратить в сети несуществующие в блокчейне биткоины. Ошибку исправили в сентябре, а до этого информацию о ней держали в тайне. Неизвестно, успели ли воспользоваться ошибкой злоумышленники, хотя есть данные, что такое произошло несколько раз в начале сентября этого года. Масштабы потерь неизвестны.

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

Перед ошибкой были уязвимы следующие релизы LN:

c-lightning v.0.7.0 и младше

lnd v.0.7.0 и младше

eclair v.0.3.0 и младше

Lightning Labs и Acinq выпустили инструменты, позволяющие проверить, затронула ли вас атака.

Уязвимость перед DoS-атакой

Также в сентябре 2019 года ученые из Еврейского университета Иерусалима опубликовали результаты исследования, согласно которым LN может быть уязвима перед обычной DoS-атакой. Пока эта угроза теоретическая — о подтвержденных случаях ее использования ничего не известно.

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

Таким образом злоумышленники могут захватить значительную часть платежей сети в определенный момент времени. Авторы исследования считают, что достаточно всего 5 новых узлов, чтобы привлечь 65%−75% трафика. Подобную атаку легко провести. Создание 20 новых каналов, парализующих 80% транзакций, обойдется примерно в $2000. Однако заработать на атаке напрямую не получится.

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

Как не потерять средства в Lightning Network

Помните, что пользуясь технологиями, находящимися на ранней стадии и не готовыми к массовому использованию, вы рискуете собственными деньгами. Разработчики Lightning Labs открыто предупреждают пользователей: «Сейчас подходящее время напомнить людям, что мы ввели ограничения для того, чтобы снизить широко распространенную потерю средств на раннем этапе [развития сети]. Ошибки еще будут. Не вносите на Lightning больше средств, чем можете позволить себе потерять».

Спросили техническую команду криптобиржи EXMO о том, какие меры предосторожности следует соблюдать пользователям, доверяющим LN. Они просты:

Пользуйтесь свежими версиями ПО;

Разберитесь в том, как работает технология;

Не делайте того, чего не понимаете;

Не доверяйте LN крупные транзакции;

Будьте внимательны с резервным копированием и используйте только актуальные динамические копии;

Следите за постоянной синхронизацией с блокчейном Bitcoin;

Следите за своевременным открытием/закрытием каналов;

Используйте возможность заморозки монет на некоторое (согласованное) время.

Перспективы развития Lightning Network

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

LN сложен даже для искушенного криптопользователя. Случай с ZipoTm — яркий тому пример. Чтобы технология стала массовой, она должна стать гораздо более удобной, понятной, простой и надежной. Значительно «прокачать» надо и техническую грамотность пользователей.

Радует, что разработчики прекрасно понимают технические ограничения и неудобства протокола. 19−20 октября в Берлине прошла конференция The Lightning Conference для разработчиков, энтузиастов и стартапов, работающих в LN. В ходе конференции планами по развитию сети поделился Джон Карвальо, CCO криптовалютной платежной платформы Bitrefill. Он считает, что протокол продолжит развиваться в области решения проблем масштабируемости и конфиденциальности, нас ждет крупномасштабное внедрение LN в реальную экономику и построение на основе протокола целой экосистемы приложений. Bitrefill также возлагает много надежд на собственный сервис Thor Turbo, позволяющий пользователям мгновенно открывать каналы, не дожидаясь выхода в сеть получателя, а получателям — принимать биткоины даже в офлайн-режиме. Площадка также разрабатывает блокчейн-решение «третьего уровня» (проект Spectrum) с использованием токенов RGB.

Проблему офлайн-платежей в LN стремится решить и стартап Breez. Он разрабатывает новый протокол Lightning Rod, который позволит отправлять биткоины между двумя узлами Lightning Network, не находящимися в сети. Протокол маршрутизирует платеж LN через промежуточный узел. Этот узел всегда находится в сети и может безопасно пересылать платеж без необходимости того, чтобы плательщик и получатель платежа поддерживали активное подключение к сети. Это позволяет проводить их в автономном режиме. Breez выпустила протокол с открытым исходным кодом и планирует добавить новые функции в свои платежные приложения iOS и Android до конца этого года.

Разработчики отметили, что главные усилия будут направлены на создание собственной инфраструктуры Lightning Network, улучшение юзабилити, упрощение интерфейсов и кошельков. Протокол развивается и с каждым днем становится все более зрелым. Однако, пока не ясно, сможет ли он когда-нибудь стать по-настоящему массовым среди криптопользователей.

А вы пользуетесь Lightning Network? Как вы думаете, LN когда-нибудь будет готов к публичному использованию? Дайте нам знать в комментариях ниже.

Подписаться
на DeCenter в Telegram