Прототип Cardano Leios устраняет атаку по времени в объявлениях Endorser Block
Разработчики Cardano исправили временную уязвимость в прототипе Leios, которая могла приводить к разрыву соединений между честными узлами. Проблема затрагивала прототипную логику объявлений Endorser Block и никогда не была частью текущего протокола основной сети Cardano.
By SongMarketCap
Прототип Leios для Cardano получил сетевое исправление после того, как разработчики выявили атаку по времени, связанную с объявлениями Endorser Block. При определенных условиях пул стейкинга с действительными операционными учетными данными мог отправить тщательно рассчитанное объявление, что приводило к разрыву соединения честного узла с другим честным пиром, чье представление о цепочке немного отставало.
Исправление было внесено в ветку leios-prototype репозитория Ouroboros Consensus 18 августа и отмечено командой Consensus организации Intersect 25 августа. Впоследствии Blink Labs реализовала соответствующую защиту в Dingo.
Разница во времени в Leios могла приводить к разрыву соединений честных пиров
Ouroboros Leios это запланированная архитектура масштабирования Cardano, предназначенная для увеличения пропускной способности транзакций при сохранении свойств безопасности базового консенсусного протокола.
Часть архитектуры использует Endorser Blocks, которые несут дополнительные данные транзакций вместе с ранжирующими блоками Cardano. Узлы могут объявлять Endorser Block до прибытия полного содержимого блока, что помогает эффективнее распространять информацию по сети.
Выявленная проблема касалась номера выпуска операционного сертификата, или OCIN, прикрепленного к таким объявлениям.
Два честных узла могут временно иметь разные неизменяемые концы цепочки. Более продвинутый узел может уже считать старый OCIN отозванным, в то время как восходящий пир, который еще не достиг того же неизменяемого состояния, все еще вправе считать его действительным.
Прежняя логика прототипа могла интерпретировать объявление с использованием этого старого OCIN как некорректное поведение и разрывать соединение с восходящим пиром.
В исходном обращении на GitHub описано, как атакующий пул стейкинга мог воспользоваться этой разницей во времени, отправив объявление незадолго до того, как его OCIN становился неизменяемым. Поскольку пул мог увеличить свой OCIN при добавлении нового заголовка в цепочку, такая последовательность могла использоваться для провоцирования разрывов соединений между честными узлами.
В обращении отмечалось, что это поведение необходимо исправить, прежде чем логику объявлений можно будет считать подходящей для основной сети.
Новая логика Leios предотвращает разрыв соединений
Внесенное исправление меняет реакцию узла Leios при получении объявления с OCIN, который его собственный неизменяемый конец цепочки уже считает отозванным.
Вместо завершения соединения с пиром узел принимает сообщение на уровне сетевого протокола. Поскольку принимающий узел уже знает, что OCIN устарел, объявление игнорируется, а не обрабатывается и не пересылается дальше.
Это изменение позволяет честному пиру временно отставать, не получая классификацию как злоумышленный.
Разработчики также задокументировали более узкий остаточный случай, связанный с утечкой исторических ключей KES. Утекший ключ все еще можно использовать для отправки небольшого числа дополнительных ложных объявлений Endorser Block ближайшим нисходящим пирам после отзыва.
Такие объявления не приводят к разрывам соединений и не распространяются дальше. В обсуждении разработки дополнительные затраты на обработку описываются как минимальные, а оставшееся поведение как нежелательное, но не блокирующее для текущего прототипа.
Нет первичных источниковых свидетельств того, что данный вектор атаки затрагивал основную сеть Cardano. Затронутый механизм объявлений относится к прототипу Leios, и исправление было внесено в его отдельную ветку разработки, а не в производственную ветку консенсуса.
Dingo принимает такую же защиту Leios
Blink Labs также применила модель обработки устаревшего OCIN в Dingo, своей независимой реализации узла Cardano.
Задача в Dingo была открыта 26 августа после того, как разработчики выявили, что корректно подписанное, но устаревшее объявление все еще может записываться и пересылаться. Запрос на слияние №3563 был принят 27 августа.
В обновленной реализации объявления с устаревшим или неизвестным эмитентом принимаются без закрытия соединения с пиром, но не записываются, не обрабатываются и не пересылаются. Актуальные объявления проходят обычную обработку, при этом регрессионные тесты охватывают несколько состояний OCIN.
Августовское обновление разработки от Intersect также сообщило о расширенной поддержке db-analyser для цепочек Leios. Инструмент теперь может воспроизводить данные цепочки Leios и измерять сертифицированные транзакции Endorser Block, их размер и время, необходимое для их чтения и применения. Это расширяет тестирование за пределы пропускной способности, затрагивая затраты на обработку реестра и поведение ресурсов.
Исправление обработки устаревших объявлений теперь охватывает две реализации. Ouroboros Consensus изменил поведение в исходном прототипе Leios 18 августа, а Dingo приняла соответствующую реализацию девятью днями позже, выравнивая то, как обе кодовые базы обрабатывают один и тот же пограничный сетевой случай до выхода Leios в промышленную эксплуатацию.