Этология: сафари-тур в темный лес Ethereum

Чудовища из темного леса Ethereum - вовсе не шутка. Это боты фронтраннеры анализируют запросы и функции смарт-контрактов, с которыми раньше не имели никакого дела, чтобы извлекать из них прибыль.

Чтобы лучше понять ботов и выяснить масштаб проблемы, мы отправимся в сафари тур по лесу.

Нам удалось заманить в "ловушку" некоторых ботов фронтраннеров и проанализировать их поведение. А также:

  • Изучили их эффективность и вероятность перехвата транзакций
  • Протестировали способы уклонения от них

Что такое фронтраннинг?

Фронтраннинг - это процесс попадания новой транзакции в очередь исполнения сразу перед оригинальной транзакцией.

Простой пример фронтраннига - бид на бирже.

Предположим, трейдер проводит крупную сделку с ETH на Uniswap, которая поднимет стоимость ETH. Зная эту информацию, можно извлечь прибыль: купить ETH по низкой цене ровно перед тем, как купят большое количество ETH, и продать по более высокой после того, как цена выросла.

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

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

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

Этология (Ethology)

Пост Ethereum - темный лес Дэна Робинсона и Георгиоса Константополуса описывает попытку извлечения активов на $12 000, которые попали лапы изощренного хищника.

Хищник был настолько продвинутым, что мог отследить любую ценностную транзакцию в пуле Ethereum и заклеймить ценность с помощью фронтраннинга.

История о темном лесе настолько "страшная", что в нее сложно поверить. Действительно есть основания сомневаться в существовании таких хищников.

Как получилось достать средства из Uniswap c платформы, которую тщательно мониторят множество ботов арбитражников?

Мог ли это быть обычный арбитражник?

В начале 2020 года наш глубокий анализ доказал, что это не так. Это был не какой-то обычный бот.

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

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

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

Аналогичный подход использовал samczun в попытке извлечь 9,6 млн$ из уязвимого контракта.

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

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

Мы не знаем при каких обстоятельствах эти боты атакуют. Поэтому, в некотором смысле, отслеживание этих хищников похоже на поиск редкого животного. Нам не нужен был какой-то средний фронтраннер, нам нужен был особенный.

Чтобы убедиться, что пойманные фронтраннеры действительно те, кого искали, мы использовали уникальную ловушку. Ловушка представляла собой свежий контракт с SHA256 хэшем секретной строки со средствами, доступными для снятия. Предоставив секретные данные, можно было извлечь средства. Средства в таком случае уходят на адрес отправителя транзакции.

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

Получается бот, чтобы забрать ценные средства, использует секретные данные, о которых он раньше не знал, в контракте, который раньше не видел.

Настоящий фронтраннер 80 левала

Как работают эти продвинутые фронтраннеры?

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

Разработка такого умного фронтраннера обычно состоит из 2 компонентов:

  • Первая составляющая - учетная запись Ethereum с прокси сервером смарт-кошелька или без него, куда будут отправляться модифицированные транзакции.
  • Вторая - офчейн бэкенд, то есть мозги, которые управляют всей операцией.

Оператор использует некоторую технику, чтобы просмотреть каждую транзакцию в пуле, проанализировать ее, заменить параметры и разобраться, принесёт она прибыль или нет.

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

Кроме того, время также важно, так как анализ проводится по каждой транзакции в пуле. Подтверждение блока в Ethereum занимает примерно 12 секунд. Если у транзакции достаточно газа, то ее нужно быстро проанализировать и заменить, прежде чем появится новый блок.

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

Имея ввиду эти соображения и несколько идей, мы стали проверять, что заставит бота схватить приманку.

Установка ловушки

Наш контракт (Дающий) был создан с начальным балансом 0.035 ETH.

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

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

Раунд первый. Прямой вызов контракта

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

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

Раунд второй. Дать время немного подумать

В этот раз мы рассмотрели недостатки из прошлой попытки. Мы увеличили потенциальный профит и уменьшили газ, чтобы транзакцию подтверждали медленнее, а у ботов было время найти ее. Пополнили контракт на 0.04 ETH (больше на 0,005).

В этот раз попали в точку!

Транзакция подтверждалась около 3 минут и после пришла пустая. Изучив внутренние транзакции контракта, мы обнаружили, что средства ушли в другое место.

Фронтраннинг транзакция использовала 25.000001111 Gwei, что на 0.000001111 Gwei больше, чем в нашей, и была подтверждена в том же блоке, что и попытка извлечения.

Посадка трекера

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

Бот не просто скопировал транзакцию и слепо отправил с собственного счета. Вместо этого он передавал через прокси-смарт-контракт, который играл роль смарт кошелька для таких транзакций.

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

Декомпиляция контракта показывает 2 основные функции:

  • "Вывод", которая в основном отправляет средства контракта оператору
  • Другая функция получает некоторые параметры: контракт для вызова, список параметров и параметр передаваемого значения.

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

С помощью Dune Analytics можно оценить, насколько успешен этот бот с момента начала его работы, которая началась аж в мае 2018!

Доход равен примерно 17 ETH при условии, что этот конкретный бот использует один и тот же прокси и адрес для транзакций.

Раунд третий. Насколько они умные?

Теперь мы точно знаем, что боты за нами охотятся.

Нужно протестировать, получится ли извлечь приманку, запутав наш вызов через 2 контракт, который вызовет функцию извлечения приманки из дающего. (У контракта также была функция "сбора", чтобы вернуть средства нам обратно).

Мы развернули наш ПроксиБерущий контракт и и вызвали нужную функцию, чтобы извлечь средства.

Ввиду того, что забирать средства из контракта было несколько дороже, мы добавили в наш дающий контракт 0.055 ETH.

Что бы вы думали?

Нашу транзакцию тут же перехватил другой бот.

На этот раз все выглядело куда более впечатляющее. Мало того, что бот обнаружил транзакцию извлечения, он распознал ее из внутреннего вызова совершенно другого контракта! И сделал это в рекордные сроки.

Наша транзакция была добыта за несколько секунд, так же как и у бота.

Личность бота довольна интересна. Контракт бота в основном оперируется вручную с этого аккаунта.

У аккаунта есть комментарии на Etherescan со ссылками, которые ведут на попытки белых хакеров извлечь средства из уязвимых смарт-контрактов Bancor.

Учитывая тот же поведенческий паттерн (вызвать прокси со счета А и отправить средства на счет B) и близость к событиям, разумно предположить, что этот бот также фронтранил белых хакеров во время инцидента.

Этот бот гораздо сложнее, чем его предшественник. Он фокусируется и на ETH, и выполняет различные арбитражные сделки.

Судя по балансу счета, куда уходят средства, он очень успешен. На текущий момент на нем более 300 ETH. Мы так же в состоянии просчитать все входящие и выходящие транзакции, чтобы оценить доход, который составляет порядка 900 ETH.

Это приблизительная оценка, поскольку счет мог совершать и другие транзакции, не связанные с фронтраннингом.

Чтобы сделать задачу еще интереснее, мы предприняли еще одну попытку запутать. На этот раз мы использовали прокси контракт, которым могли пользоваться только мы.

Аналогично третьему раунду. Мы пополнили дающий контракт на 0.05 ETH.

С первой попытки транзакция была подтверждена за 1 минуту и мы успешно извлекли средства.

Для 2 попытки мы пополнили аккаунт на 0.06 ETH, чтобы убедиться, что низкая выплата не стала причиной отсутствия атаки.

Цена газа была установлена низкой. Транзакция висела 7 минут, но мы все равно успешно извлекли средства.

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

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

Боты скорее всего настроены так, что в приоритете стоит самосохранение.

В конце концов они взаимодействуют с неизвестным контрактом, который может вызвать произвольный код. Так что разумно предположить, что боты будут избегать ненужного риска или лишней траты на комиссии, если прибыль не гарантирована.

Почему нам удалось избежать фронтраннинга в последних тестах?

Сложно сказать. Возможно, бот не рискует связываться с аутентифицированными контрактами, либо тот факт, что средства переводились на другой адрес, оказался неожиданным.

Но это не значит, что это отличный метод избежать фронтраннеров. Скорее всего, существуют более сложные боты в пуле, которые не заинтересованы рисковать ради такой маленькой прибыли.

В нашем эксперименте удалось доказать существование продвинутых ботов фронтраннеров и то, что они очень сложны.

Конечно мы понимаем, что наш эксперимент далек от завершения.

Существует множество других ботов с разными триггерами и способами работы. Такие факторы, как потенциал роста, коммуникационные модели и минимальная сложность (например, через лимит газа), вероятно, влияют на их работу.

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

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

Поэтому, чтобы создавать безопасные системы, очень важно понимать этих ботов и их работу, . Такие инициативы, как Flashbots стремятся выполнить эту задачу, демократизируя добычу MEV.

TG аналитика: Top Traders

TG обучение: TT Academy

0
2 комментария
Tim Kum

Информативно.

Ответить
Развернуть ветку
Максон Асион

 интересное исследование и тема

Ответить
Развернуть ветку
-1 комментариев
Раскрывать всегда