July 2, 2020

Атаки на Сеть Лайтнинг

В первую половину 2020 года вышло достаточно много статей о сети Лайтнинг, протоколе второго уровня поверх протокола Биткоин. В целом можно было бы сказать, что Лайтнинг базируется на балансе инициатив не меньше Биткоина. В ней, конечное разрешение конфликтных интересов осуществляются при помощи транзакций в сети Биткоин. Нормальный порядок работы Лайтнинг не подразумевает взаимодействия с основным протоколом и за счёт этого формируется его основная выгода: осуществление многократных платежей между контрагентами через каналы. В основном публикуемые статьи далеки от каких-либо конкретных реализаций программ или реально проведённых атак. Большинство статей об утечках приватности фокусируются на моделях, в то время как помимо майннета доступен тестнет и необходимость использования моделей выглядит достаточно сомнительной, но объяснимой тем, что исследователи не имеют достаточного количества ресурсов для разработки конкретных эксплоитов или технологий защиты.

Уязвимости протокола

"Затмения" для Лайтнинга

Работа: Time-Dilation Attacks on the Lightning Network

"Затмения" (Eclipse) — это способ фальсификации состояния блокчейна Биткоина с помощью большого количества фальшивых полных узлов Биткоина. Например, ваш кошелёк работает с вашим полным узлом и обеспечивает работу вашей компании, которая торгует золотом. Предположим, что злоумышленник решил купить у вас золотые слитки за биткоины. С золотом всё в порядке, сделка на этапе оплаты биткоинами. Ваш контрагент установил на какой узел обращается ваш кошелёк и успешно провёл атаку затмения, т.е. смог окружить ваш узел контролируемыми узлами и обеспечил некую альтернативную реальность, в которой блокчейн имеет совершенно другую историю. Вам "отправлена" транзакция, ваш узел обменивается информацией с узлами атакующего и через какое-то время получает блок со своей транзакцией. Вы отпускаете золото, атакующий уходит с ним восвояси. После прекращения атаки и поиска новых пиров ваш узел сигнализирует о реорганизации последних N блоков блокчейна (положим, 6) и транзакции на ваш адрес там больше нет, а у вас — нет золота.

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

Атака "затмения" на уровне кошельков Биткоина представляла известную угрозу для SPV клиентов — кошельков с упрощённой верификацией платежа, т.е. тех, которые не верифицируют полную историю Биткоина. Для лёгких клиентов Neutrino, которые встроены в некоторые узлы Лайтнинг, она может быть реализована в 2-24 часов. Если узел Лайтнинг работает с Bitcoin Core атакующему придётся задерживать работу узла в течение 4-36 часов. В клиенте Core реализована защита, которая ограничивает задержку нового блока 20 минутами — это требует большего времени работы сети фальшивых клиентов атакующего.

Авторы отмечают, что подобная атака может быть проведена на любой протокол, в котором смарт-контракты имеют логику, зависимую от высоты блока или времени. Поэтому, несмотря на то, что описание атаки выглядит реалистичным, мы не считаем уровень угрозы достаточным для полного сворачивания деятельности рядового разработчика приложений с использованием Лайтнинг. В сети Биткоина работает больше узлов, чем в любом альткоине или платформе смарт-контрактов, поэтому наиболее вероятной является атака какого-либо "смарт-контракта" Ethereum. "Затмение" адресуется отдельно при разработке новых протоколов транспортного уровня (т.е. передачи данных между узлами Биткоина), поэтому работа узла Лайтнинг в связке с Core всегда будет иметь дополнительные степени защиты.

Блог о практической атаке "затмения".

Оптех о предыдущей аналогичной работе.

Flood & Loot

Работа: Flood & Loot: A Systemic Attack On The Lightning Network

В буквальном переводе — "наводняй и грабь".

  1. Атакующий создаёт большое количество каналов в сети. На этом этапе для него важно открыть каналы, когда комиссии сети малы для удешевления атаки и установки небольших резервов на закрытие каналов с честными узлами
  2. Подбирает время платежей так, чтобы допустимый интервал разрешения спора между узлами попал в нужный диапазон и комиссия в сети Биткоина начала расти
  3. Конечный узел принимает все платежи и открывает секрет платежа честным узлам, они направляют его узлу-отправителю, который намеренно выведен оффлайн. В соответствии с протоколом Лайтнинг секреты должны быть использованы для востребования средств в блокчейне Биткоина
  4. Честные узлы создают большое количество транзакций в блокчейне Биткоина и прибавляют данных в пуле неподтверждённых транзакций. Некоторые из них, предполагают авторы, не попадут в блокчейн сразу
  5. Те транзакции закрытия канала, которые "не успели" в блокчейн, атакущий старается заменить штрафной транзакцией с более высокой комиссией
Так осуществляются платежи Лайтнинг -- через цепочку узлов. Здесь изображена иллюстрация подготовки атаки

Авторы статьи смогли создать специальный клиент сети и протестировать его в регнете — особой форме не p2p тестнета, в которой можно контролировать выход нового блока специальной командой.

Одна из проблем работы заключается в факте, что не все клиенты позволяют открывать несколько каналов между собой. C-lightning допускает открытие только одного канала с одной и той же контр-нодой. Это ограничивает масштабируемость атаки.

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

Перегрузка сети

Работа: Congestion Attacks in Payment Channel Networks

На эту атаку ссылаются авторы Flood & Loot, поскольку они рассматривают защитный механизм против Flood & Loot, который негативно влияет на сопротивление атаки типа "отказ в обслуживании". Если в случае Flood & Loot потенциальная жертва решила снизить количество не законченных платежей, которые должны разрешиться ончейн, то её узел может стать объектом DDOS атаки. В этом случае также атакующий должен создать много каналов, и не завершить платежи в них, по оценке менее 0.5 биткоина могут парализовать работу сети валовым объёмом порядка 700 биткоинов.

Цена атаки

Авторы также разработали форк клиента для подтверждения своих исследований: способности управления количеством незаконченных платежей и целенаправленной блокировки канала, атаки хаба.

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

Интересно, что авторы статьи предлагаю способ решения проблем через снижение времени нормативного платежа через цепочку узлов, т.е. таким способом, который может облегчить атаку Flood & Loot. Упоминается атака в марте 2018, когда сеть была совсем маленькой и эксплуатировалась менее полугода в основной сети. Тогда были парализованы порядка 200 узлов.

MAD-HTLC

Работа: MAD-HTLC: Because HTLC is Crazy-Cheap to Attack

То, что мы подразумевали под "секретом" и "завершением платежа" относилось к понятию Hash TimeLock Contracts (HTLC) — типу смарт-контрактов, которые до Лайтнинга в основном связывали с Атомарными свопами. В работе Лайтнинг они играют основополагающую роль, поскольку позволяют развести во времени возвращение денег на контролируемый адрес, если оппонент не знает секрет (случайное число), и получить деньги прямо сейчас, если секрет известен. Т.е. если в сделке что-то идёт не так — секрет не разглашается, в то же время, оппонент может подтвердить, что секрет верен, используя операцию взятия хэша от этого секрета.

Работу с броским названием изучать труднее всего — в ней присутствует всё, что только можно встретить в статьях по Computer Science. Основное утверждение, которое стремятся обосновать авторы, сводится к тому, что рациональный майнер должен поддерживать модифицированную Биткоин-ноду, которая позволит пользователю подкупать его (майнера) через специальную транзакцию с таймлоком, которая не может быть подтверждена раньше момента в будущем. В результате этой взятки, майнер не подтвердит никакую транзакцию, которая могла бы быть добавлена в блокчейн немедленно, но которая конфликтует с взяткой (в то же время как первая транзакция должна платить большую комиссию).

Если это утверждение верно, то если Алиса и Боб заключают HTLC контракт с разрешением конфликта после таймаута, Боб может "подкупить" майнеров, чтобы транзакция Алисы не была добавлена в блок, а деньги ушли обратно на адрес Боба. Так как Алиса уже отправила в сеть транзакцию, Боб может извлечь из неё секрет и воспользоваться им, скажем в Атомарном свопе, например в Лайткоине. Авторы утверждают, что такая атака могла бы нарушить порядок работы сети Лайтнинг, и это можно предположить, если имеется в виду закрытие канала со "старыми" балансами, в которой больше средств находится у Боба.

Решение авторов — Mutually Assured Destruction HTLC (MAD-HTLCs) — взаимно-деструктивные контракты HTLC, которые потребуют от Боба специального бонда, заблокированного хэшем. Этот хэш потребуется при разблокировке таймаут контракта с Алисой, т.е. Алиса сможет потратить его в свою пользу. Когда Алиса и Боб разгласят секреты, майнеры смогут потратить их деньги в свою пользу, уничтожая инициативы атаки у Боба и Алисы. Недостаток, по мнению авторов, это дополнительная капитальная нагрузка на сделку в размере бонда. В случае, если Боб является майнером, MAD-HTLC не решает никакой проблемы.

Анонимный разработчик ZmnSCPxj отметил, что Алиса уже может использовать подход "выжженой земли" и потратить все свои средства на комиссию майнерам, т.е. Бобу ничего не достанется. Вызывает сомнение экономический анализ атаки и реальный стимул сотрудничества майнера с атакующим. В конечном итоге добыча нового блока — это вероятное событие и ни один майнер не может гарантировать, что он добудет следующий блок или заданный блок, в то время как транзакция Алисы может быть добыта в целом кем угодно в сети, она действительно может попробовать использовать метод "ускорения" транзакции "потомок платит за родителя", т.е. потратить всё на комиссии с выхода, формируемого скомпрометированным HTLC контрактом.

Уязвимости приватности

Тайминг атаки

Работа: Counting Down Thunder: Timing Attacks on Privacy in Payment Channel Networks

Работа исследует уязвимости приватности, когда атакующая сторона находится на пути платежа и информацию о состоянии каналов и величину заморозки HTLC контракта, возрастающую по мере удлинения пути платежа и равную 0 в конце (т.е. мы знаем точно например получателя). В общем случае, внутри сети Лайтнинг работает луковая маршрутизация — т.е. начало и конец маршрута для промежуточного узла не известны. Однако в описываемом типе атаки используется информация о количестве и времени заморозки контракта HTLC для получения неявной информации и сокращения множества анонимности отправителей и получателей.

Обмен сообщениями о состояниях канала при роутинге платежа

Проверку концепции авторы выполнили на основе плагина c-lightning и в общем в статье убедительно демонстрируется наличие уязвимости. Решение данной проблемы предлагалось разработчиками клиентов Лайтнинг в форме "теневого роутинга", т.е. приданию интервалам блокировки HTLC случайного значения. Технология разбиения крупных платежей на мелкие и отдельного роутинга в данном случае не сильно помогает защититься от атаки, но снижает вероятность попадания платежей на прослушиваемые маршруты.

Три Атаки на Приватность

Работа: An Empirical Analysis of Privacy in the Lightning Network

Одна из работ февраля-марта, которая занималась несколькими направлениями: определением состояний каналов, т.е. балансами контрагентов и деанонимизацией отправителя и получателя. Описываемые атаки использовали публичную информацию и относились только к публичным каналам (которые делают маршрутизацию платежей), проведённая атака была осуществлена на тестнете, майннете, две другие — на симуляторе, по причинам экономическим и этическим. В тестнете авторы смогли создать каналы с 132 узлами, пытаясь атаковать 4585 каналов, они смогли получить информацию о 619 каналах с 47.68 BTC суммарной ёмкости. Они связали такой низкий процент успеха с проблемами работы клиентов и зомби-каналами. В майннете из 1 293 были разведаны балансы 678 суммарной ёмкостью 6.06 BTC по причинам, аналогичным атаке в тестнете. Разведка платежа, также как и разведка получателя и отправителя использует информацию, добытую о состоянии каналов и снепшоты — "снимки" состояния балансов для отслеживания изменений каналов и определения направления платежа, в таком случае направление движения можно определять вычислительным образом.

Заключение

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

Любая технология в Лайтнинге может быть разработана очень быстро и быстро внедрена. Например в кошельке Bitcoin Lightning Wallet используются хост-каналы, "виртуальные" каналы, которые не создаются транзакцией в Биткоине а используют реальный канал "хоста", будучи оконечным узлом в графе сети Лайтнинг. Пользователь может создать такой канал, пополнить его через какой-либо сервис, потратить деньги и уничтожить идентичность. Даже если информация об отправителе будет сохранена на каком-либо узле атакующего, это не будет иметь никакого смысла (для него).

Отдельной технологией являются каналы с нулевым знанием zkchannels, которые созданы на базе LND, в основном для zCash и пока сильно ограничены в функциональности, но если будут реализованы — то позволят реализовать каналы с особыми свойствами, когда даже контр-нода Лайтнинг не знает точного состояния канала.

Разработчик BLW кошелька и клиента на Scala Антон Кумайгородский так прокомментировал Flood & Loot уязвимость (и это может быть справедливо для других статей):

По-видимому, большинство этих статей это "мы берём известный компромисс (сети Лайтнинг) и потом майнеры вступают в игру

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

Поддержите автора! Шлите ваши 1000 сатоши, используя эту LNURL ссылку

LNURL1DP68GURN8GHJ7MRWW3UXYMM59E3XJEMNW4HZU7RE0GHKCMN4WFKZ7URP0YLH2UM9WFHXZMT9843NXUPSWFESSLK458

Используя страничку, либо просто пользователю @c3p0rs через @lntxbot.

Если вы ещё не знаете как использовать сатоши в Лайтнинг сети, прочитайте руководство для кошелька BLW или исследуйте Телеграм-бот @lntxbot.