Стоимость децентрализации: изучение атак на сети киперов (keeper networks)

PowerPoolRU
4 min readJul 31

--

PowerPool считает, что “белый список( whitelisting)” киперов или заданий (Job) неудовлетворительный вариант для создания действительно децентрализованной и широко принимаемой сети автоматизации. Поэтому PowerAgent v2 создан как полностью децентрализованная сеть — любой может запустить кипер ноду и настроить задание автоматизации.

Однако, как и в любой децентрализованной системе, PowerAgent v2 потенциально может подвергаться злоупотреблениям или атакам. Злонамеренное поведение в сети, случайные ошибки при работе кипер ноды или регистрации задания в PowerAgent могут привести к непредвиденным последствиям для сети и экономической жизнеспособности кипер нод.

В этой статье мы хотели бы обсудить конкретные атаки на PowerAgent, которые были недавно обнаружены. Основная цель — обучить разработчиков и инженеров токенов, которые задают вопросы “а что, если?” при создании сложных систем в децентрализованной и безразрешительной среде.

Понимание системы и её возможных векторов атак

Исследуемая система

Вкратце, сеть PowerAgent от PowerPool работает следующим образом: в ней есть набор из N нод-исполнителей (Keepers) и M задач (Jobs). Ноды-исполнители вносят стэк CVP в контракт, чтобы иметь право выполнять автоматические задачи. Когда необходимо выполнить задачу, она случайным образом назначается одной из допустимых нод-исполнителей. Если нода-исполнитель не выполняет задачу в заданный временной интервал, вместо неё выполняет задачу “слэшер”. Если слэшер успешно выполняет задачу, то происходит сокращение стека CVP у кипера который не исполнил задачу, и транзакция выполняется.

Задача (Job) может содержать Резольвер (Resolver) — условие, которое приводит к результату “0” или “1”, разрешающему или запрещающему выполнение задачи. Когда Резольвер возвращает “1” (означает, что задачу нужно выполнить сейчас сетью), он также предоставляет CallData, который должен быть передан вызовом в целевой контракт задачи выбранной нодой-исполнителем.

Что произойдет, если логика Resolver (разрешителя) будет вредоносной по своей природе и нацелена на на сбой Keeper сети?

Исследование векторов атаки

Однако как это может произойти? Мы видим две основные возможности:

  1. Регистрация Резольвера (или просто алгоритма), который не может быть выполнен в цепочке блоков из-за превышения лимита газа или находится в “белом списке” исполнителей.
  2. Регистрация Резольверов, которые могут быть выполнены в цепочке блоков, но предоставляют CallData, которые всегда отменяет транзакцию, когда Keepers пытаются её выполнить.

Проблема №1 возникает из возможности зарегистрировать Резольвер, который никогда не может быть выполнен в цепочке блоков (но он не содержит ошибок логики и теоретически выглядит “готовым к выполнению” в офф-чейн режиме). Это может произойти потому, что он содержит интенсивные вычисления, которые потребляют больше газа, чем возможно использовать в блоке (например, вычисление числа 𝛑 до 100-го знака с помощью метода Монте-Карло). Мы назвали это “злоупотреблением вычислений”. Еще одним примером является добавление в “белый список” возможного исполнителя, что явно приводит к невозможности его выполнения любым из зарегистрированных киперов.

Проблема №2 возникает, когда регистрируются некорректные Резольверы, которые возвращают неправильные данные для вызова (CallData).

Примеры ошибок в данных для вызова (CallData), которые приводят к невыполнению транзакции:

  1. Неверное форматирование (обратный адрес в байтовом формате и т. д.)
  2. Некорректно запрограммированные байты данных.

Оба этих типа задач-резолверов не могут быть выполнены ни с помощью исполнителя (Keeper), ни с помощью слэшера (Slasher). Эти задачи останутся назначенными выбранному исполнителю (Keeper), но никогда не смогут быть правильно выполнены. В результате этот исполнитель (Keeper) не сможет вывести свой CVP стэк, так как сеть считает его ответственным за выполнение задачи.

Конечно, эти ошибки не являются критическими, так как никто на самом деле не может получить финансовую выгоду от них. Однако они могут вызвать неудобства для Keeper’ов и в целом для сети. Вот почему мы решили внести быстрое исправление, которое позволит Keeper’ам выводить свой CVP стэк, если такие проблемы когда-либо возникнут.

В одном из последних обновлений PowerAgent v2, мы разрешили владельцу контракта вручную отключать определенные Jobs в качестве решения MVP. Если наш персонал обнаруживает такие проблемные Jobs вне цепи (off-chain), он отключает их, чтобы позволить Keeper’ам вывести свои застеканные токены CVP. В будущем этот процесс будет автоматизирован с помощью специального смарт-контракта.

Возможно, для постоянного, “надежного” решения по крайней мере для первого типа проблемы, описанной выше, можно использовать технологии ZK proofing (доказательства нулевого разглашения) для Resolvers. Это позволит выполнять все их вычисления вне цепи (off-chain), и на блокчейн будут отправляться только ZK-доказательства их выполнения. Это полностью исключит все проблемы, связанные с невозможностью выполнения Resolvers on-chain. Команда PowerPool в настоящее время работает над внедрением функции zkResolvers в будущем.

Программа вознаграждения за обнаружение ошибок (Bug Bounty) в PowerAgent v2

PowerPool собирается запустить программу вознаграждения за обнаружение ошибок PowerAgent v2 Bug Bounty, чтобы побудить пользователей активно искать возможности таких атак и других проблем в архитектуре. Люди или команды хакеров смогут получать вознаграждения за сообщение о значительных багах, ошибках и злоупотреблениях команде PowerPool. Эти вознаграждения будут предоставляться в формате USDC и варьироваться от $500 до $5000 в зависимости от серьезности проблемы.

Следите за новостями в официальном Twitter PowerPool, чтобы быть в курсе о программе вознаграждений за обнаружение ошибок (Bug Bounty).

--

--

PowerPoolRU

Официальные переводы оригинальных статей PowerPool (https://medium.com/@powerpoolcvp)