MSTR Cat

Блокчейн/Уровень IX · Скорость и зрелище/9.2 Честный рынок/Урок 2

Административные ключи и неизменность

Корень краж из контрактов и запечатанное хранилище, которое с ними покончит

МатериалыБлок-эксплорер с возможностью просмотра контрактов (например, Solscan или Etherscan)Документация SPL Token по полям полномочий (authority)Документация OpenZeppelin по обновлению проксиИсходный код смарт-контракта, прошедшего аудит

Любопытство

  1. Что такое право минта (mint authority) и что оно позволяет делать своему владельцу?
  2. Почему обновляемый прокси может быть одновременно механизмом безопасности и бэкдором?
  3. Если удаление админ-ключей устраняет атаки, но и мешает исправлениям, кто решает, какой риск принимает сообщество?

Исследование

    Часть IАдмин-ключи: корень кражи через контракты

  1. Многие раг-пуллы восходят к сохранённым полномочиям. Право минта позволяет его владельцу выпускать неограниченное количество токенов и продавать их на рынке когда угодно. Право заморозки или чёрный список не дают определённым холдерам перемещать свой баланс. Налог, который может устанавливать владелец, способен поднять комиссию на продажу до ста процентов, запирая ликвидность на месте. Каждое из этих полномочий — ключ, который кто-то держит, и каждое может быть обращено против тех самых людей, которым оно должно было служить.
  2. Обновляемые прокси отделяют хранилище от логики: состояние находится по одному адресу, а код исполняется с другого, который администратор может заменить в любой момент. Это позволяет выпускать патчи при обнаружении багов, но также означает, что правила токена могут измениться задним числом для каждого холдера. В DeFi-эксплойтах обновления прокси использовались для перенаправления средств или изменения поведения протокола после развёртывания. Токен Squid Game (ноябрь 2021 года) показывает, к чему ведёт сохранённый контроль: его контракт позволял покупать кому угодно, но не давал обычным холдерам продавать, и когда создатели вывели деньги, цена за считаные минуты упала почти до нуля.
  3. Компромисс носит структурный характер. Уберите ключ минта — и никто не сможет выпустить лишние токены; уберите возможность вывода ликвидности из пула — и никто не сможет вытащить резервы. Цена этого в том, что ни разработчик, ни аудитор, ни участник сообщества не смогут исправить баг, отреагировать на чрезвычайную ситуацию или скорректировать параметры при изменении условий. На открытом (permissionless) рынке каждое административное полномочие одновременно является поверхностью атаки и инструментом обслуживания. Какой стороне оно служит, зависит от того, действует ли держатель ключа добросовестно и хранит ли ключ в безопасности.
  4. Защита на уровне кошелька не может заменить грамотное проектирование контракта. Пользователь может отзывать апрувы токенов, не подписывать незнакомые транзакции и проверять адреса контрактов перед взаимодействием, но эти практики ничего не дают против активно используемого права минта или обновления прокси, меняющего правила посреди торгов. В SPL-токенах право минта всегда задаётся при создании и сохраняется, пока ему не присвоят значение None; право заморозки необязательно, и если его не задать, добавить его позже уже нельзя. В любом случае действующее полномочие работает независимо от осторожности пользователя.
  5. Документация OpenZeppelin по прокси прямо описывает архитектуру: контракт-имплементация содержит логику, а прокси хранит состояние и перенаправляет ему каждый вызов через delegatecall. Обновление означает перенаправление прокси на новый адрес имплементации. Так команды выпускают исправления, но это также значит, что любой держатель права на обновление может заменить весь набор правил одной транзакцией. Разница между патчем и кражей — исключительно в поведении, а не в технике.
  6. Изучение контракта токена показывает, какие ключи действуют. В EVM-сетях проверьте, есть ли в контракте роль владельца и стоит ли он за обновляемым прокси; в Solana проверьте права минта и заморозки, а также расширения Token-2022, такие как постоянный делегат (permanent delegate), хук перевода (transfer hook) или комиссия за перевод (transfer fee). Каждое отсутствующее или отозванное полномочие исключает свой класс атак. Оставшийся риск смещается к людям: фишинг, выдача себя за других и социальные манипуляции действуют полностью вне кода.
  7. Часть IIНеизменяемость и отсутствие административных ключей

  8. Многие смарт-контракты можно изменить после запуска. В Solana программы по умолчанию можно обновлять с помощью ключа upgrade authority; в EVM-сетях, таких как Ethereum, контракты неизменяемы, если только они не построены на прокси-паттернах, которые перенаправляют выполнение на заменяемый контракт-реализацию. Такая архитектура позволяет исправлять ошибки и добавлять функции, но она же означает, что код, с которым пользователи взаимодействуют сегодня, может отличаться от того, который они читали вчера.
  9. Риск изменяемости — это концентрация доверия. Если у разработчика есть административный ключ, он теоретически может в любой момент изменить эмиссию токена, заморозить аккаунты пользователей или вывести средства из пулов ликвидности. Это создаёт «режим бога», противоречащий децентрализованному духу блокчейна. Когда в июне 2016 года взломали The DAO, сообщество Ethereum обсуждало, проводить ли хардфорк, чтобы отменить кражу, — этот шаг разделил сеть на Ethereum и Ethereum Classic. Этот случай показал, что даже изменения на уровне сети несут серьёзные риски с точки зрения управления.
  10. Неизменяемость полностью устраняет этот риск. Если отозвать все административные полномочия — например, полномочия на выпуск (mint), заморозку (freeze) и обновление программы в Solana — или развернуть контракт без прокси и ролей владельца в EVM-сетях, контракт превращается в запечатанный сейф. После развёртывания никто не может изменить правила. Развёрнутый код достаточно один раз сверить с кодом, прошедшим аудит, — и он таким и останется. Это устраняет угрозу злоупотреблений со стороны инсайдеров, но вместе с тем навсегда фиксирует любые возможные ошибки.
  11. Цена неизменяемости — необратимость. Если в контракте есть критическая ошибка, патча не будет: исправить её можно только миграцией на новый контракт или форком сети. Это повышает ставки проверки до запуска. Командам приходится серьёзно вкладываться в формальную верификацию, масштабное фаззинг-тестирование и аудиты от нескольких независимых сторон до развёртывания. Нагрузка смещается с поддержки после запуска на тщательность до него. Один упущенный пограничный случай становится постоянной частью системы.
  12. Биткоин служит эталоном «достоверной нейтральности». Его правила меняются только при широком консенсусе тысяч независимых нод, а не по воле одной стороны. Не существует административного ключа, который мог бы изменить награду за блок или правила действительности транзакций. Именно эта жёсткость во многом объясняет, почему многие считают биткоин достоверно нейтральным: ни одна сторона не может переписать его правила.
  13. Для создателей токенов выбор неизменяемости — сигнал приверженности прозрачности. Пользователи могут проверить, что развёрнутый код нельзя изменить. Однако такой выбор означает согласие с тем, что ошибки необратимы. Компромисс очевиден: либо получить предсказуемость, которую пользователи могут проверить, либо сохранить гибкость ценой единой точки отказа и возможных злоупотреблений.

Ключевые факты

  • Право минта (mint authority) позволяет его владельцу создавать новые токены; если оно сохранено, его можно использовать для размытия долей всех текущих холдеров.
  • Токен Squid Game (2021) позволял покупать кому угодно, но не давал обычным холдерам продавать.
  • Обновляемые прокси хранят состояние отдельно от логики, что позволяет админ-ключу как выпускать патчи, так и менять правила задним числом.
  • Контролируемый владельцем налог на продажу, выставленный на сто процентов, работает как ханипот (honeypot): холдеры не могут выйти, не заплатив эту комиссию.
  • Отказ от прав минта, заморозки и обновления при развёртывании устраняет эти классы атак, но также лишает любой возможности обслуживания в будущем.
  • Право минта SPL-токена остаётся активным, пока ему не присвоят значение None; право заморозки, если оно задано при создании, действует до отзыва.
  • В Solana программа становится неизменяемой после отзыва её upgrade authority; полномочия на выпуск (mint) и заморозку (freeze) токена можно отозвать отдельно.
  • Контракты EVM, развернутые без использования паттерна прокси, не могут быть обновлены после развертывания.
  • Взлом The DAO в июне 2016 года привёл к хардфорку, который разделил Ethereum на две сети.
  • Правила биткоина меняются только при широком консенсусе распределённых нод, а не с помощью административных ключей.
  • Неизменяемость устраняет риск злоупотреблений со стороны инсайдеров, но делает исправление ошибок после запуска невозможным.
  • Формальная верификация и обширное тестирование критически важны для неизменяемых контрактов, поскольку их нельзя изменить.

Упражнение девять, шесть, три, один

9СобратьПеречислите 9 токен-контрактов или развёртываний протоколов. Для каждого укажите, закреплены ли право минта, право заморозки и прокси обновления за каким-либо адресом или от них отказались.
6СгруппироватьСгруппируйте 9 в 6 по тому, какие административные полномочия сохранил каждый из них.
3Выделить главноеСведите 6 групп к 3 категориям по тому, может ли какое-либо из сохранённых полномочий быть обращено против холдеров без возможности социальной или правовой защиты.
1КристаллизоватьНапишите одно предложение о том, что — если вообще что-то — технически отличает полномочие для обслуживания от поверхности атаки.

Проверка фактов

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

Открыть в интерактивной академии →

EN PT ES ZH JA KO DE FR MS