Предотвращение непредвиденного RAM потребления

Оригинал: https://medium.com/eosio/preventing-unexpected-ram-consumption-8029a9342659

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

Обзор

  1. Токены не украдены
  2. Должным образом внедренные контракты - неуязвимые
  3. Процессы управления могут исправить код ведущий себя против намерений сторон
  4. Блок-продюсер - только вариант смягчающий последствия существующий для защиты
  5. Долгосрочное усовершенствование может сделать поведение по умолчанию безопаснее.

Токены не были утрачены

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

Лучшие меры защиты для предотвращения злоупотреблений

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

Разработчики, которые программно отправляют токены на счета ненадежным третьими лицам должны транслировать перевод через аккаунт на котором нет свободных RAM ресурсов. Это касается как централизованных бирж, которые проводят процесс снятия для пользователей так и децентрализованных бирж, которые осуществляют это посредством смарт-контрактов. Существуют несколько доверительных ретранслируемых контрактов для перевода.

Многие провайдеры кошельков уже приняли меры, чтобы предупреждать пользователей, когда транзакция может потреблять RAM.

Высвобождение потребляемого RAM через процесс управления

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

Если арбитраж находит поведение кода против намерений сторон, которые с ним взаимодействовали, то выбранные продюсеры могут обновить код таким образом, чтобы в результате как можно ближе соответствовать первоначальному замыслу сторон. В этом случае код будет обновлен так, чтобы освободить непредвиденно потребляемый RAM и не потреблять RAM в будущем.

Почему это особенность EOSIO?

Есть много веских прецедентов для компонентов когда злоупотребляли пользованием RAM. Наиболее распространенным случаем использования является игровой контракт, который хочет принять депозиты денежных средств пользователя. Биржа реализует код для обработки уведомления о переводе от токен контракта и затем кредитует отправителя с балансом на бирже. В этом случае биржа и пользователь, делающий депозит может приемлимо уполномочить биржевой контракт потреблять RAM пользователя, для хранения его баланса. Биржа не обязательно захочет хранить баланс пользователя на своем собственном RAM, потому что это может открыть возможности для разных атак, при которых много счетов отправляют dust balances бирже.

EOSIO имеет связанную функцию, встроенные действия, которые позволяют контракту вызвать код другого контракта как часть поточной трансакции. В отличие от функции уведомления действия, встроенные действия ограничиваются выделением ресурсов контракта, генерирующего встроенную функцию. Уведомления действия отправляют разрешение первоначального действия на локализатора ресурсов.

Защита от неожиданного поведения при продвижение вперед

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

С продвижением вперед мы предлагаем чтоб управляющие уведомлением имели право пользоваться только RAM контракта, получающего уведомление. Это сделает безопасным отправление токенов любому контракту не беспокоясь что он использует ваш RAM неожиданным способом. Брижи могут проводить процесс снятия безопасно без изучения контрактов размещенных на счетах пользователей перед проведением запросов о снятии.

Под этим предложенным изменением будет подразумеваться, что существующие контракты вынуждены получить прямое разрешение на использование имеющегося RAM пользователя. Биржевой контракт попросит пользователя “открыть счет чтобы зарезервировать место для хранения их баланса” перед тем как принять депозит от пользователя. Входящее уведомление о депозите просто увеличит предварительно выделенную RAM, а не выделяя новую RAM.

Предложенный способ обновления

Мы готовим продюсеров для обновления, которое изменит поведение по умолчанию, чтобы защитить получателя уведомления о действии (например уведомления о перемещении токена) от непредвиденного потребления RAM отправителя. Если все блок-продюсеры примут это обновление, то стратегии по уменьшению злонамеренных действий будут не нужны. К сожалению данная возможность может разорвать действующие контракты до тех пор, пока они не обновляться таким образом, чтобы не полагаться на RAM размещение на аккаунте пользователя во время действия уведомлений обработчиков.

К счастью, процесс обновления контрактов для принятия нового лучшего подхода должен быть сравнительно прост.

Обновления будут приняты всеми нодами в рамках следующего референдума.

Вывод

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

Перевод CryptoLions

photo_122x122.jpg

Website

Telegram

Steemit

Twitter

GitHub

Meetup

eosblockproducerscryptolions
5
0 GOLOS
0
В избранное
cryptolions
На Golos с 2018 M06
5
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (1)
Сортировать по:
Сначала старые