В Ethereum есть два типа аккаунтов. Обычные кошельки — внешне управляемые аккаунты (EOA) — контролируются закрытым ключом и в основном используются для отправки транзакций. Аккаунты смарт-контрактов могут выполнять код, что позволяет, например, устанавливать лимиты расходов, восстанавливать доступ и платить комиссии токенами, отличными от ETH. Однако большинство пользователей не переходило на такие аккаунты.
EIP-7702 призван сократить этот разрыв: вместо перехода на новый кошелёк обычный EOA может временно использовать код смарт-контракта, сохраняя свой адрес и средства. Эта функция стала частью атаки, в ходе которой из горячего кошелька Binance вывели криптовалюту на $6,4 млрд.
Что такое EIP-7702
EIP-7702 — предложение по улучшению Ethereum под названием «Set Code for EOAs» («Установка кода для EOA»). Его написали сооснователь Ethereum Виталик Бутерин и разработчики Сэм Уилсон, Ансгар Дитрихс и lightclient.
Предложение вошло в крупное обновление Ethereum Pectra. Разработчик основной команды Ethereum Престон Ван Лун назвал EIP-7702 основой для дальнейшего развития абстракции аккаунтов. По его словам, обновление создаёт инфраструктуру для этой функции, хотя пользователи не получают полной абстракции аккаунтов сразу.
EIP-7702 меняет основной протокол Ethereum. Это не токен и не отдельный блокчейн, поэтому покупать здесь нечего.
Как работает EIP-7702
EIP-7702 добавляет новый тип транзакции — транзакцию установки кода. Она содержит список разрешений, каждое из которых подписано закрытым ключом обновляемого аккаунта. В разрешении указывается адрес смарт-контракта, код которого аккаунт намерен использовать.
После обработки транзакции в аккаунте сохраняется небольшой указатель на этот контракт — индикатор делегирования. Когда кто-либо обращается к аккаунту, Ethereum запускает код контракта так, будто он принадлежит самому аккаунту. Этот код получает полный доступ к его средствам.
Делегирование действует, пока владелец аккаунта не подпишет новое разрешение: на другой контракт или на удаление указателя, которое возвращает аккаунт к обычному режиму EOA.
Для обозначения делегированных аккаунтов EIP-7702 использует байт 0xef. В предыдущих обновлениях это значение кода было запрещено, чтобы его можно было зарезервировать для специальных задач.
Что даёт EIP-7702
Спецификация выделяет три основные возможности:
- Пакетная обработка. Несколько действий, например одобрение токена и его обмен, можно объединить в одну транзакцию.
- Оплата комиссий другим аккаунтом. Например, приложение может оплатить комиссию за пользователя. Пользователь при этом может возместить расходы другим токеном.
- Ограничение полномочий. Можно создавать ключи с ограниченными правами — например, разрешить тратить только определённый токен или не более 1% баланса в день.
Риски безопасности
Эти возможности сопряжены с рисками: делегированный код получает неограниченный доступ к аккаунту. В спецификации предупреждается, что приложения не должны просить пользователей подписывать разрешение EIP-7702, а кошельки не должны предлагать для этого интерфейс. «Безопасного способа предоставить такой интерфейс нет», — говорится в спецификации.
Злоумышленники быстро воспользовались новой функцией. После запуска Pectra торговая компания Wintermute обнаружила, что более 80% делегирований EIP-7702 указывали на копии одного и того же вредоносного контракта-«сборщика». Он автоматически опустошает кошельки, закрытые ключи от которых утекли.
Связь EIP-7702 со взломом Binance
В результате атаки из кошельков Binance в десяти блокчейнах вывели около $6,4 млрд; большую часть средств переместили примерно за 20 минут. Компании TRM Labs и Chainalysis связали кражу с TraderTraitor — северокорейской хакерской группировкой, которую также связывают с кражей $1,5 млрд у Bybit.
В сети Ethereum злоумышленник использовал делегирование EIP-7702, чтобы превратить горячий кошелёк Binance в контролируемый им контракт-«сборщик». По данным TRM Labs, заранее были подписаны 50 разрешений. Операционный кошелёк, пополненный через криптомиксер Tornado Cash, отправил эти разрешения. Они позволили горячему кошельку запустить код, развёрнутый злоумышленником. Затем тот обратился к кошельку и перевёл его активы на подконтрольные ему адреса.
Для делегирования EIP-7702 требуется действительная подпись владельца обновляемого аккаунта. На остальных девяти блокчейнах кошельки Binance также переводили средства злоумышленнику — обычными транзакциями с подписями. По оценке TRM, это указывает на компрометацию системы подписи горячих кошельков Binance, а не на уязвимость самого Ethereum.
Binance сообщила, что расследование началось после компрометации ноутбука инженера. В компании также заявили, что обнаружили «дополнительные точки взлома».
Что будет с EIP-7702
EIP-7702 — первый шаг к полной абстракции аккаунтов, давней цели разработчиков Ethereum: сделать любой аккаунт таким же гибким, как смарт-контракт. Авторы заложили совместимость предложения с этой перспективной моделью, чтобы созданные на его основе кошельки могли продолжать работать по мере развития модели аккаунтов Ethereum.
Следующий этап может быть связан с Hegotá — обновлением, которое в дорожной карте Ethereum запланировано после Glamsterdam. Бутерин говорил о предложении EIP-8141, которое, по его формулировке, объединяет решения оставшихся задач абстракции аккаунтов. Он также отмечал, что разработчики обсуждают возможность подключить к новой системе уже существующие аккаунты: это позволит им изначально поддерживать пакетные транзакции и оплату комиссий другими пользователями.
Эти изменения входят в более масштабную перестройку Ethereum. Бутерин описывал новый проект долгосрочной дорожной карты как крупнейшее обновление сети со времён перехода на механизм консенсуса Proof of Stake.
