
Почему мосты всё время взламывают и чем на самом деле является мостовой токен
Изрядную часть 2021 и 2022 годов межсетевые мосты были самой стабильно обворовываемой вещью во всей криптовалютной сфере. Не биржи, не кошельки, не умные контракты вообще — именно мосты.
Ronin потерял около 625 миллионов долларов. Poly Network — более 600 миллионов. Wormhole — порядка 320 миллионов. Nomad — почти 200 миллионов. Это больше полутора миллиардов долларов в четырёх инцидентах, а список длиннее четырёх.
Ни один из них не был отказом биткоина, Ethereum или какой-либо нижележащей сети. Понять почему — самое полезное, что можно узнать о мостах, потому что это ровно и говорит вам, чему вы доверяетесь, когда пользуетесь одним из них.
Сети не умеют разговаривать друг с другом
Коренная проблема проста и её часто пропускают. Биткоин понятия не имеет, что существует Ethereum. Каждая сеть проверяет только собственные транзакции и не располагает механизмом наблюдать за состоянием другой. Встроенного способа узнать, что произошло на соседней сети, нет.
Поэтому «отправить BTC в Ethereum» невозможно в буквальном смысле. Ваши биткоины не могут покинуть биткоин.
На деле происходит подмена. Вы отправляете настоящие BTC на адрес, подконтрольный мосту. Мост это замечает, и нечто в Ethereum выпускает вам токен, который представляет эти BTC. Когда вы хотите выйти, вы сжигаете токен, и мост освобождает оригинал.
Ключевое следствие: мостовой токен — не актив. Это требование к кассе с этим активом, которую держит тот, кто управляет мостом. Его ценность целиком опирается на то, что касса всё ещё на месте, а оператор по-прежнему исполняет погашения. Если кассу опустошили, ваш обёрнутый токен — квитанция ни на что, и именно это обнаружили держатели в каждом из перечисленных инцидентов.
Кто-то должен решить, что депозит состоялся
Поскольку ни одна сеть не видит другую, некая третья сторона обязана наблюдать за сетью A и засвидетельствовать сети B, что депозит был. Этот механизм свидетельствования и есть мост, и именно через него исчезают все деньги.
Конструкции различаются тем, сколько доверия они требуют:
Мультиподпись или набор валидаторов — фиксированная группа подписантов, чей кворум разрешает выдачу. Просто, быстро и ровно настолько прочно, каково наименьшее число ключей, способное двинуть средства.
Оптимистичная модель — сообщения считаются верными, если их не оспорили в отведённое окно. Дёшево, но зависит от того, что кто-то действительно смотрит, и от корректности логики оспаривания.
Лёгкие клиенты и доказательства — сеть назначения проверяет криптографические доказательства состояния исходной сети. Самый прочный подход и самый дорогой, поэтому он встречается реже, чем следовало бы.
Всё остальное — вариации. Важно, что почти всегда между кассой и атакующим стоит небольшой набор сторон или единственная проверочная функция.
Четыре провала и чему учит каждый
Ronin — скомпрометированы были ключи, а не код. Мост использовал девять валидаторов, из которых пятеро должны были разрешить вывод. Атакующий получил четыре ключа целевым фишингом, а до пятого добрался через третью сторону, которой когда-то выдали доступ к подписи и никогда его не отозвали. Пять из девяти, кворум набран, средства выданы. Криптографически ничего не сломали. Проверка подписей отработала безупречно — просто она проверила подписи атакующего.
Урок не в том, что «мультиподпись плоха». Он в том, что кворум значим ровно настолько, насколько независимы его подписанты. Четыре ключа в одной компании плюс забытое разрешение — это не пять из девяти, а скорее один из двух в костюме.
Poly Network — контракт уговорили сменить собственного стража. Атакующий нашёл путь межсетевого вызова, позволивший изменить роль keeper — то, что решает, какие сообщения законны, — на подконтрольный ему адрес. После этого каждый мошеннический вывод был, с точки зрения контракта, должным образом разрешён.
Урок: самая опасная функция в мосте редко та, что двигает деньги. Это та, что решает, кому это позволено.
Wormhole — изъян был в самой проверке подписи. Процедуру проверки удавалось обмануть и заставить принять поддельный набор подписей стражей, что позволило атакующему начеканить на Solana 120 000 wETH, ничем не обеспеченных на Ethereum.
Урок: «проверено подписями» ничего не значит без корректного проверяющего. Криптография была в порядке; код вокруг неё — нет.
Nomad — изменение конфигурации открыло дверь всем. Рутинное обновление оставило доверенный корень равным нулю, из-за чего практически любое сообщение выглядело доказанным. Эксплойт не требовал особых навыков: люди копировали транзакцию первого атакующего, подставляли свой адрес и повторяли. Это превратилось в коллективное опустошение.
Урок, и он неудобный: это была не экзотическая атака. Это была ошибка развёртывания. Большинство потерь на мостах выглядят скорее как загубленная эксплуатация, чем как побеждённая криптография.
Что это значит для вас
Мостовые активы несут риск моста, а не сети. Держать обёрнутый BTC на другой сети — не то же самое, что держать BTC. Это держать требование, обеспеченное тем, что у этого моста окажется самым слабым звеном. Это может быть вполне приемлемо, но должно быть решением, а не допущением.
Предпочитайте не пользоваться мостом, когда есть альтернатива. Если вы можете купить актив непосредственно на целевой сети или использовать централизованную биржу как точку перехода, вы обменяли риск моста на другой и зачастую лучше изученный риск. Ни один вариант не безрисковый; они просто ломаются по-разному, и сценарии отказа бирж хотя бы хорошо описаны.
Не оставляйте ценность припаркованной в мостовой форме. Риск моста накапливается со временем. Перейти, сделать то, зачем шли, и вернуться — это короткая экспозиция. Держать обёрнутый актив год — экспозиция длиной в год.
Судите о мосте по его модели доверия, а не по интерфейсу. Сколько подписантов способны двинуть средства? Это независимые организации или одна команда? Проходил ли код аудит и — что показательнее — выдержал ли он время и объёмы? Нарядный интерфейс не говорит вам ничего.
Соразмеряйте позицию доверию. Простое правило: не переводите через мост больше, чем готовы потерять, если оператор исчезнет, потому что в худшем случае это одно и то же.
Где здесь стоит SSP
SSP поддерживает перемещение активов между EVM-сетями, и стоит быть точным в том, что это защищает, а что нет.
Наши два из двух защищают ваши ключи и ваши одобрения. Никто не начнёт мостовую транзакцию без того, чтобы оба ваших устройства её подписали, и на каждом вы увидите, что именно одобряете. Это свойство соблюдается полностью.
Чего оно не может — сделать безопасным сам мост. Как только ваши активы оказались в контракте моста, ими управляют правила этого контракта и управление ключами того оператора, а не ваша мультиподпись. Одобрение на двух устройствах — превосходная защита от того, чтобы кто-то двинул ваши средства без разрешения. И совершенно никакая защита от того, что средства заберут из места, куда вы сами их сознательно отправили.
Это не то ограничение, которое можно обойти инженерными средствами, и делать вид, что можно, было бы нечестно. Мосты — одно из тех мест в криптовалютах, где честный ответ звучит так: безопасность почти целиком зависит от кого-то другого, а правильная реакция — внимательно посмотреть, кто этот кто-то, прежде чем переходить.


