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

Админ @zerofuz
Download Telegram
#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
*Когда лень описывать тарифную сетку
Наверняка уже видели картинки как вся крипта просела на -20% в виде шариков, такое видно на cryptobubbles.net

Визуализировать холдеров по объему токенов, например pepe в сети eth (по-умолчанию справа есть скрытые кошельки)
Есть автор, который хорошо объясняет сложные вещи, например как устроен вывод стейков из эфира.

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

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