InVM - изнутри о Web3
809 subscribers
45 photos
5 files
73 links
Про тонкости работы Defi в EVM-блокчейнах глазами solidity разработчика.

Админ @zerofuz
Download Telegram
Недавно 1inch представили подход, чтобы обезопасить обмены пользователей от оборачивания потенциально уязвимых транзакций обменов для frontrun/backrun через flashbots для ethereum.

bloxroute (eth/bsc BDN) представили аналог, только для любых транзакций. Если отправлять транзакции через их rpc url, тогда транзакции не попадают в публичный мемпул. Дополнительная опция в том, что если вдруг транзакция обмена выгодна для ботов, то эти боты должны поделиться профитом с кошельком, который обмен инициировал https://t.me/bloXrouteLabsCommunity/28893
#EVM
В контракте роутера 1inch заложен функционал, что любой может вывести токены, которые по ошибке отправлены роутеру.

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

Думаю было бы хорошей практикой сделать что-то вроде «если с контрактом не взаимодействую дольше 2х лет по timestamp, то разрешить его удаление (selfdestruct) и вывод всех erc20 токенов инициатору». При массовом внедрении это позволит сократить размер node state.

Например, в bsc есть 25кк контрактов.
15кк из них удалено (bytecode = 0x)
10кк живые, но большинство неактивны.
Размер bsc ноды по bnb48 около 350гб, full node займет больше 1тб.
#HACK
Frontrun боты видят многое, но не все. По следам поста, которому больше 2х лет, попробовал свои силы, чтобы перехитрить ботов.

Общий алгоритм:
1. Создать максимально безопасный токен для трейда
2. Создать пару с ликвидностью
3. Совершать обмены с огромным slippage
4. Сделать так, чтобы бот думал что он выйдет в плюс, но на деле он или не видит или не успеет отменить свои транзакции.

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

Фото 1. Бот покупает токен JH (в паре +80$bnb)
Фото 2. Моя транзакция обычного свапа с огромным slippage (условно amountOutMin=1). В худшем случае дарю боту 13$bnb.
Фото 3. Бот продает все JH и получает лишь 9$bnb (так как предоставляю ликвидность в пару только я, значит +90$ ко мне)

Под капотом бот не увидел моей второй, но первой транзакции, которая включила комиссии для всех не админов токена в 90% комиссии.

Жду вашей реакции, чтобы показать обратную сторону маленькой победы)
InVM - изнутри о Web3
#HACK Frontrun боты видят многое, но не все. По следам поста, которому больше 2х лет, попробовал свои силы, чтобы перехитрить ботов. Общий алгоритм: 1. Создать максимально безопасный токен для трейда 2. Создать пару с ликвидностью 3. Совершать обмены с огромным…
#HACK 1/2
Чтобы заинтересовать frontrun ботов, нужно:
- Отправить транзакцию обмена через публичный мемпул
- Подобрать правильное соотношение ликвидности в паре и размеру свапа, чтобы боту было интересно. Например 30$bnb-100JH в паре, и свап на 10-15$bnb с очень низким slippage. Frontrun транзакции делают так, что пользователь обменяет токены по максимально не выгодному для пользователя курсу обмена (при slippage 99% = amountOutMin=1wei) бот 'заберет' все $bnb из транзакции.
- Чем объемнее ликвидность в паре, тем сложнее боту значительно влиять на цену и нужно больше капитала для этого.
- Учитывать случайность распространения транзакций по мемпулу между нодами, не каждый раз боты увидят.
- Чтобы другие транзакции публичного мемпула не испортили прибыльность боту.

Чтобы перехитрить ботов в bsc, только транзакции обмена недостаточно, они видят все, что происходит в публичном мемпуле и даже улавливают связи, что первая транзакция ок, а вторая ломает боту frontrun операции.
InVM - изнутри о Web3
#HACK 1/2 Чтобы заинтересовать frontrun ботов, нужно: - Отправить транзакцию обмена через публичный мемпул - Подобрать правильное соотношение ликвидности в паре и размеру свапа, чтобы боту было интересно. Например 30$bnb-100JH в паре, и свап на 10-15$bnb с…
Снимок экрана 2022-12-17 в 10.50.44.png
65.9 KB
#HACK 2/2
Почти единственный путь, это отправить транзакцию активации ловушки в токене через приватный мемпул bnb48. Но и тут есть 'случайности'. Часто активация проиходит позже, чем предсказано и очень похоже, что bnb48 через своего frontrun бота умышленно замедляет активацию, чтобы с 20k$bnb заработать 13$bnb (Фото 1)

Часть попыток перехитрить ботов переходят в подарить им bnb :D

Моя маленькая победа в +90$bnb стоила порядка ~200$(~10$ на попытку).

Во время проверки новой гипотезы, в токене не предусмотрел отключение всех ловушек. По итогу еще 180$ навсегда в паре :D. Тут только один вывод, ВСЕГДА делать запасные отключения ловушек, потому что они могут сработать и на админа :D
InVM - изнутри о Web3 pinned «Навигация О чем этот канал? #DEFI - uniswapV2, пары, боты Пример ethers+js Blockscan Uni форки AMM Pancakeswap.allPairsLength Про кошельки EVM,CEX,DEX Токен Landing protocol Как шортить через landing Uniswap USDT,USDC ERC20.approve Автоматизация…»
Команда etherscan добавила расширение «Node Tracker», что в ней интересного:
// Держите в уме, что запуск одной ноды стоит от 500$ на aws в месяц
// erigon
https://github.com/ledgerwatch/erigon клиент хранит данные емче geth, новые блоки с задержкой.

ethereum 6040936 нод в p2p сети
Топ 2 страны US 56%, DE 14%
Официальный клиент ноды geth (на golang) занимает 60% от запущенных нод
Erigon 14%
Q-client 14% (Что это такое?)

bsc 451534 нод в p2p сети
Топ 3 страны US 54%, Ireland 14%, DE 11%.
bsc-geth официальный клиент (форк geth) занимает 43%
erigon клиент 56%

polygon 55035 нод в p2p сети
Топ 3 страны US 52%, DE 30%, FR 4%
bor оффициальный клиент (форк geth) заимает 71%
erigon 20%
0.7% нод запущено счастливчиками на windows 😄

gnosis 30784 нод в p2p сети
Топ 3 страны US 41%, DE 16%, FR 5%
Nethermind (C# оффициальный клиент) занимает 97%

Заметки:
1. erigon значительно вырос за последний год. Авторы из СНГ
2. Большая доля erigon сигнализирует об интересе в data mining из archival node, когда хранится ВСЯ история транзакций, счет идет на ТераБайты. Например AML сканерам будет дешевле содержать erigon, чем geth
3. Децентрализация по гео слабая, около половины нод в US.
4. Децентрализация по провайдерам нод точно не лучше. Большинство приходится на aws, google cloud, azure.
5. «Node Tracker» фича прикольная, но делает легче сбор ip адресов нод для последующего сканирования на открытые порты, поиск валидаторов с недостаточной защитой и абуз мощностей, если открыты rpc порты (как для metamask короче)
6. «Эта ж сколько бабок тратится на столько запущенных нод»
#HACK
Произошла спланированная атака на sandwith MEV ботов. ~25kk$

Коротко:
- Атакующие стали валидаторами и создали токен пару недель назад.
- Отправили выгодную транзакцию свапа в мемпуле и арб боты перехватили ее (тоесть в бандле смайнится быстрее чем в публичном мемпуле) и отправили бандл (mevTx1, targetTx, mevTx2), все поверхностные проверки что бандл прибыльный пройдены.
- Этот бандл попал на майнинг блока к атакующему валидатору (например валидатор подключен к flashbots)
- Валидатор подменил target на обратное направление свапа, сделав mevTx2 убыточной
- Смайнил блок

Стоимость атаки:
- 32eth(валидатор)
- Создание токена с ликвидностью 10k-500k$
- Подобрать такое соотношение ликвидности и размера свапа, чтобы sandwith боты вливали млн$ чтобы извлечь выгоду из «очевидно прибыльной транзакции»

Источник:
https://twitter.com/PeckShieldAlert/status/1642787345366941697
#HACK

Sushiswap RouterProcessor2 контракт скомпроментирован, атакующие могут распоряжаться средствами, которые разрешено тратить контракту.
В сети eth 0x044b75f554b886a065b9567891e45c79542d7357, и других сетях.

Один из вариантов проверить, не дал ли кошелек лишний апрув, так: https://etherscan.io/tokenapprovalchecker , ввести адрес кошелька и посмотреть его approvals, подозрительные отключить.

Для исполнения атаки нужен собственный контракт, который обащается к RouterProcessor2.uniswapV3SwapCallback

Источник: https://twitter.com/peckshield/status/1644907207530774530?s=20
#HACK
Разберемся, безопасен ли токен grimace в догечейне, который активно продвигают.
Смарт-контракт не верифицирован в сканере, поэтому проверим по-другому.

На dexscreener и dextools есть и покупки и продажи. Простейший ханипот отпадает, но что, если внутри кода есть метод на отключение продаж?

Goplus не поддерживает dogechain
decompile.tools не поддерживает dogechain

Повышаем ставки

Код контракта из сканнера вставляем в ethervm.io, подозрительных функций не видно, но может внутри одной из функций будет триггер? Например, если вызвать .transfer с конкретным большим числом, то это отключит возможность продавать.
- Пойдем с конца, легче найти tx.log Transfer
- Перевод завершается по Transfer(address,address,uint256) 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
- func_052F - функция перевода токенов, в нее входят из .transfer и .transferFrom
- 0xa9059cbb - transfer(address,uint256)
- 0x23b872dd - transferFrom(address,address,uint256)
- При беглом осмотре подозрительного кода не видно

panoramix
Все выглядит хорошо, кроме .name() и .symbol() (вывод panoramix в первом комментарии)
В ethervm.io аналогично

Посмотрим как выглядят функции в контрактах с верифицированным кодом (предоставленный .sol файл скомпилировался в конретный байткод на стороне сканера bscscan и поэтому сканер показывает исходный код)

wbnb (panoramix код в комментах)
Все функции хорошо читаются, подвоха точно нет, но интересующие функции отличаются от grimace, пропускаем.

pepeai (panoramix код в комментах)
.name() и .symbol() внешне совпадают с кодом от grimace, у pepeai код верифнут. Следовательно, grimace методы тоже надежные.

Можно было подойти с другой стороны, разместить код из dogechain в avax/polygon сети и пройтись более человечными анализаторами, но это слишком просто)

Выводы:
- Код контракта полностью безопасен
- Grimace основан на версии компилятора 0.8.16 как и pepeai
- Остаются риски с влиянием на цену крупными холдерами токенов, но где такого нет? 😄
Когда стоит задача прочитать tx.data, не всегда известно abi, чтобы правильно выделить аргументы.

Быстрое решение - размечать аргументы под каждый случай.

samczsun опубликовал abi-guesser

Но есть два недостатка:
1. Typescript. Адептам python тяжело интегрироваться
2. Определяет только тип аргументов, но не сопоставляет их из коробки. Без погружения в контекст на это уйдет время.

Представляю решение этих проблем: abi-guesser-webserver
1. Локальный вебсервер принимает http запросы
2. Основная логика базируется на творении samczsun плюс обработка tx.data в одной функции
3. С pm2 кластерами можно задействовать всю мощь процессора.
4. Поддерживаются запросы корзинами, в один http запрос закинуть тысячу tx.data

Разберем транзакцию свапа 0xb17b0e039100160b91cd5262737bb41057609ee7b66f6afa3337b5ebbbe51510
Фото1: Сырые данные
Фото2: Аргументы на основе abi
Фото3: Ответ вебсервера, abi не используется.
kibbleswap (на dogechain) перестал работать, их веб-интерфейс зависит от собственного rpc, который упал.

В связи с этим торги токенами замерли.

Сделал скрипт, как можно поиграться с ценой grimace, пока у остальных игроков пингануло :D

https://github.com/0fuz/swap-univ2-tokens

Следить за ценой тут https://dexscreener.com/dogechain/0x1aad352a2190b399bb3cfd4d5e4b0bf6efa33c0e