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

Админ @zerofuz
Download Telegram
#HACK
Собираю uni-fork DEX в разных EVM сетях, решил затестить TRON (он как бы EVM-совместимый, но с оговорками). Чтобы читать блокчейн нужно апи ключ, который получить пока что нельзя, не дает зарегистрироваться по email-password.

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

Мне написало два человека,
1. «Вы выиграли 13 000$»
2. «Простите за неудобства, я скину вам ссылку, вы авторизуетесь через трон кошелек и все починится, ок?»

Увидел раздел на сервере, где разработчики публикуют свои портфолио текстом, написал одному:
⁃ Скинул заряжений гитхаб профиль
⁃ Первый раз уклонился от вопроса, «как убедиться что это вы с дискорде и гитхабе»
⁃ Второй раз предложил картинку скинет, но я предложил подписаться на мой гитхаб на пару минут и он раскололся
- Сейчас готовил скриншот, а он удалил ссылку на гитхаб

Такие дела)
#HACK

Скам-токен - смарт-контракт, основанный на интерфейсе ERC20, с которым конечный пользователь взаимодействует как с обычным токеном (BNB,USDT). Но возможны разные хитрости для обмана пользователей, разберем на примере токена SCAM:

- Контракт разрешает направления обмена BNB->SCAM но запрещает SCAM->BNB. За счет дикой эмиссии фантиков SCAM можно создать искусственный, очень привлекательный курс обмена (сверх дешевый или сверх дорогой)

- Контракт разрешает обмен своего токена в оба направления, но в один прекрасный момент админ щелкает переключателем и контракт становится тыквой, когда только админ может обменять свои токены, а «инвесторы» остаются ни с чем

- Контракт не виден конечному пользователю, но обладает привлекательными характеристиками для «перелива ликвидности», когда есть две пары BNB-SCAM в разных DEX с разным курсом обмена. Бот, работающий по стратегии сандвича покупает SCAM но продать уже не в состоянии, админ токена выводит заработок

- Зачастую в эксплорерах типа bscscan у своего кошелька видно всякие малоизвестные токены с кучей циферок, будто вот так забесплатно пользователю перевели миллионы долларов. В действительности это способ пиарить свой скам-токен, который в лучшем случае уже исполнил свое предназначение, в худшем еще принимает новичков в свои объятия. Например, отправляем SCAM всем пользоветелям блока 123123 на сумму 100$ (наш искусственный курс), пользователи это видят, но чтобы получить право тратить SCAM им нужно совершить покупку на 50$, они платят, а обменять все равно не могут.
#HACK
19 часов назад произошла атака на мост между harmony.one-ethereum блокчейнами. Атакующий получил примерно 100 000 000$ в сети эфириума.

https://twitter.com/harmonyprotocol/status/1540110924400324608

Почитал, что делали три адреса атакующего:
первый - распределил ETH для комиссий между тремя адресами, на этот адрес приходили разные токены от контракта моста
второй и третий - помогали обменивать полученные токены USDC/USDT/… на ETH по частям, чтобы не спровоцировать резкого дисбаланса ликвидности в парах

В итоге атаки на первом адресе 85,867 ETH.


В эфириум сети мост представляет из себя два смартконтракта:
Harmony ERC20 Bridge - хранил все токены, любой пользователь мог пополнять его, чтобы перевести токены в сеть harmony. Но выводить из контракта может только Multisig контракт с тремя владельцами.

В общем и целом, на стороне эфириум блокчейна проблем не замечено.

Github bridge репозиторий

Осталось проверить такие векторы атаки как:
- в сети harmony что-то эдакое произошло
- оракула-владельца-multisig ввели в замешательство программно (например перезаписали получателя транзакцией)
#HACK

Как потерять средства:
⁃ Дать erc20 аппрув не проверенному контракту
⁃ Использовать в своем контракте проверку доступа по tx.origin, а не msg.sender и отправить левому контракту транзакцию, который абузит tx.origin
⁃ Посетить фишинговый сайт
⁃ Подхватить вирус-стилер-логгер который может узнать пароль и скопировать данные расширения metamask для последующей дешифровки
⁃ Хранить сидфразу в одном месте, к которому потерян доступ
⁃ Идти во фьючерсы с плечом без опыта
#HACK
Как устроен скам токен Tech от инфлюенсера Исса (55к подписчиков в тг)

Контракт:
1. Позволяет покупать Tech в любое время
2. Продать можно через 48 часов с момента последней покупки.
3. Владелец контракта может продавать без задержки в 48 часов.
4. Напечатать больше монет нельзя
5. Похож на грубый copy-paste, когда комментарии одни а реальные параметры другие и заложены в коде

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

Как подготавливалась аудитория:
1. В течении 1-6 месяцев публиковались посты про торговлю и обзор токенов. (только после Tech в комментах выясняется что 6 месяцев назад были подобные инциденты)
2. Закупалась реклама в тг каналах
3. Автор провел голосование и решил, что надо бы завести публичный портфель для инвестиций
4. Купить btc, etc потому что ... на 10%
5. Купить Tech на 50% и 40% от депозита, потому что фейковый твит от twitter@cz_binance говорит что "я в Tech"
6. Показывать как круто растет токен. Действительно, если никто кроме админа не может продать за 24часа, то рост будет стремительным). И если админ не продает кучу tech за busd а изымает собственную ликвидность, то красивый график роста цены не прерывается

Токеномика:
1. Всего напечатано 100кк монет
2. Разделить на 4 кошелька, по 25кк каждый (холдеры, кошелек1, 2, 3, 4)
3. Создать pancakeswap пару ~1kk busd к 80kk Tech (в пике было 2.4kk busd, потом 1.5kk busd)
4. Дождаться х2-х3 и продать половину LP токенов и получить обратно свои 1kk+ busd

Мысли вслух:
1. Люди могут купить такую шляпу по усталости
2. Но обычно потому что факт-чекинг для лохов.
3. Легче переложить отвественность за выбор и проверку на какого-то инфлюенсера
4. На момент поста 1972 холдера и 3461 транзакций на общую сумму более 1kk busd.
5. Если большинство покупателей не способно проверить первые 20 строк кода контракта, то они легкая мишень для подобных обманов..

Продолжение следует…
InVM - изнутри о Web3
Ликвидность из пары изъята, с 1.8кк busd сейчас 6к. Появилась единственная продажа токенов от владельца скамины https://bscscan.com/tx/0x5e562602336a37ad41be40ad35de43b34821e03a0fea41dfd7e027c716606603 на 77173 busd Пара
#HACK
Вероятный вектор обхода блокировки на продажу до роста цены:

Контекст:
1. Так как пара токена добавлена в исключения, она всегда отправляет мгновенно, потому что все пользователи могут покупать много раз (пара отправляет токены к пользователю)
2. Как только пользователь захочет продать токены (отправить к паре), его адрес не в исключениях и нужно выждать 48часов

Что, если создать такой контракт, который купит токены, но оставит на паре и добавит ликвидность в пару?

- Отправили 100$, претендуем на X токенов, но заказать получение swap(..to=pair..) вместо swap(..to=wallet..). У пары появляются на балансе Xткенов, на которые не распространяется доля LP токенов.
- Вычисляем соотношение $-Xтокенов и добавляем ликвидности в пару. Допустим Xтокенов-102$.
- Отправляем в пару 102$
- Суммарно паре отдано 202$.
- Запрашиваем mint() LP токенов, пара видит излишки на своих балансах 102$, Xтокенов и выдает LP токены. К этому момент 99.99% токенов пары снова покрыты LP.
- В любой момент можно обменять LP токены на нынешнее соотношение $-токен.
- Ждем х3 в цене. Наши LP стоят 300$-Yтокенов
- Заказываем вывод LP
- Получаем 300$ при затратах в 100$+102$=202$

Нюансы:
- Минимальный рост токена для окупаемости нужен от х2
- Возможно ли в функции pair.swap(to=pair) отправлять токены той же паре? В коде вроде не запрещено

Upd: идея понравилась и решил затестить через hardhat. Концепт ломает такой момент, что после вызова swap() любые излишки токенов на паре становятся учтенными в резервах. Есть token0.balance(pair) и pair.reserves0 и вот после swap они синронизируются.
Навигация

О чем этот канал?

#DEFI - uniswapV2, пары, боты
Пример ethers+js
Blockscan
Uni форки
AMM
Pancakeswap.allPairsLength
Про кошельки
EVM,CEX,DEX
Токен
Landing protocol
Как шортить через landing
Uniswap
USDT,USDC
ERC20.approve
Автоматизация dune
4byte.directory
Rpc.batch
Bsc gasPrice=1gwei

#EVM - нюансы работы evm-блокчейнов
EVM,CEX,DEX
TokenChecks
ERC20.approve
Контракт 2015 года с 130eth
Evm.solidity.fn.signature
Pair.skim
Profanity https://t.me/invmru/71 https://t.me/invmru/76
4byte.directory
Структура байткода
Rpc.batch
1inch.router вывод любых токенов
TOTP на bsc

#HACK - разбор взломов и скам токенов
Обман в дискорде
Что за скам токен
Harmony.one-ethereum
Как теряют деньги мамонты
Solana, 8000 кошельков
Исса. Скам
Исса. Вероятный вектор обхода
Profanity
Celsius
Eth POW
Honeypot
OlympusDao
Frontrun bot потерял 80$
Frontrun. Детали атаки 1/2
Frontrun. Детали атаки 2/2

#FR_BR - frontrun, backrun боты
Пример успешного обмена
Что такое BR
Свой Backrun бот https://t.me/invmru/51 https://t.me/invmru/53 https://t.me/invmru/77

#GETH - как устроена внутри работа главной fullnode eth/bsc
EstimateGas
Flashbots.simulate

#FULLNODE - Как запустить fullnode
Eth
Bsc

#FLASHBOTS
Eth.flashbots.simulate
Polygon.flashbots

Trading view
Про создателей tradingview
Гадание на кейной гуще
VRVP

Личные проекты
TokenChecks https://t.me/invmru/21 https://t.me/invmru/73
Signature Profanity
abi-guesser-webserver

Не всем проектам нашлось место с тегом, продублирую их здесь, но они классные:
Copilot
Blockscan
Chainlist, defilama
Deepface live
Electric capital report
MidJourney
Dune
4byte.directory
Sublime text 3
Сколько занято ГБ на накопителе кубиками
InVM - изнутри о Web3
#DEFI Как создать особенный адрес кошелька в EVM-сети Существует утилита Profanity (остерегайтесь форков), которая написана в далеком 2019 году. Она ищет такой privateKey, что address совпадает с искомым паттерном. Например 10 ноликов вначале адреса, или…
#HACK
Profanity уязвим, найден вектор атаки когда становится возможным восстановить приватный ключ зная публичный ключ из транзакции и некоторого брутфорса, подробнее в блоге 1inch . Адреса кошельков и контрактов, созданных с помощью profanity в опасности
#HACK
21 Октября обнаружилась неочевидная уязвимость в olympusDao.

Контракт, на котором 300k$ohm+, слепо доверял данным переданного токена в функции получения награды.

Закладываем нужные параметры для обхода проверок по timestamp и получаем токены OHM (55$ohm), пока они не кончатся у контракта

twitter
#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
#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
- Остаются риски с влиянием на цену крупными холдерами токенов, но где такого нет? 😄
InVM - изнутри о Web3
Снимок экрана 2022-12-17 в 10.50.44.png
#HACK Помолчал и хватит.

В сентябре стремился повторить salmonela.

Идея в том, что нужно отправить такую "уязвимую транзакцию", что на нее поведется frontrun/backrun бот и не сможет продать токены обратно.
Идеальный пример выглядит так:
- Взять за основу код классического контракта от OpenZeppelin
- Добавить ряд переключателей, чтобы или брать комиссию или отключать свапы
- Создать uniswap v2 пару c некоторой ликвидностью
- Отправить транзакцию обмена со slippage >X$ потерь
- Frontrun бот разместит свои транзакции так, что заработает себе X$ из нашего slippage
- Но несколько позиций в блоке Frontrun бот держит наши токены
- Отключаем возможность продажи через бандл или любым другим способом
- Как итог, Frontrun бот купил наших токенов, но продать не сможет.
- Профит!

Но на практике все очень сложно:
- Если подменять собственную транзакцию свапа со слиппеджем на транзакцию отключения свапов, то боты это видят и даже подменяют свои FR транзы на self-send. Но чаще видят и совсем не реагируют
- Если отправить свап как обычно, а отключение свапов через бандл, то снова никто не ловится, боты это видят.

После тестов в eth/bsc/arbitrum/polygon/avax/base могу с уверенность сказать, что:
- Frontrun и Backrun боты работают исключительно через бандлы, а бандлы есть в eth/bsc
- В любых других блокчейнах без бандлов, есть только снайпер-боты что покупают на копейки свеже-созданный токен
- Благодаря бандлам, боты полностью защищены от подмен и ловушек, риск только в совбстенных ошибках в боте.
- Есть такой тип ботов, что стремится выкупить сапплай токена при резком дампе цены до микро-центов, чтобы мгновенно зарабатывать с любого притока $ в торговую пару.

Касательно бандл-провайдеров, в eth их много, все они форкнулись от flashbots.
В bsc два покемона, первый bnb48.