Post #257
530

Если ты достаточно долго в этом спейсе, тебя почти наверняка сэндвичил Jared from Subway. Не слышал про него - значит, ты тут недавно. Это самый известный сэндвич-бот в игре, лучший из лучших. И сегодня его поимели на его же поляне. На14 миллионов долларов.
Красота этой истории в том, что хищника съели ровно тем способом, которым он сам ел всех остальных. Разбираю по косточкам.
КТО ТАКОЙ JARED
Сэндвич-бот. Объясняю на пальцах, для тех кто не в теме.
Ты отправляешь своп на децентрализованной бирже. Бот видит твою сделку ещё до того, как она исполнилась - она висит в мемпуле, открытая всем. Он молниеносно встаёт перед тобой со своей покупкой, даёт твоей сделке толкнуть цену вверх, и тут же продаёт уже подорожавшее. Ты покупаешь дороже, чем мог бы. Разницу забирает бот. Это и есть сэндвич - тебя зажали между двумя сделками бота, как котлету между булками.
Большинство таких ботов сторожат конкретные пулы или токены. Jared был не такой. Jared был везде. Любой токен, любое количество переходов - если там пахло прибылью, Jared уже стоял там с открытым ртом. За это его и боялись.
КАК ЕГО ПОЙМАЛИ
А теперь следите. Это красиво.
Атакующий задеплоил больше сотни фейковых пар в стиле Uniswap V2 и фейковых токенов. Снаружи они выглядели как нормальные торговые пары с глубокой ликвидностью - всё по стандартному интерфейсу, комар носа не подточит. Только вся эта «ликвидность» была в фейковых обёрточных токенах, которые контролировал сам атакующий.
Дальше - наживка. Маршруты были выстроены так, чтобы после каждого «свопа» бот Jared видел маленькую, но реальную прибыль. Ровно то, на что заточена его автоматика. Бот учуял профит и клюнул - начал бэкранить фейковые изменения состояния пулов, которые атакующий подсовывал ему сам.
И вот ключевой момент. Чтобы прокрутить каждый такой фейковый арбитраж, боту Jared приходилось апрувить реальные активы - WETH, USDC, USDT. Это разрешения, которые ты выдаёшь контракту, чтобы он мог трогать твои деньги. Бот выдавал апрув за апрувом по десяткам фейковых токенов и не отзывал их - видимо, думал, что это обычные контракты Uniswap, чего их отзывать.
В итоге у атакующего на руках оказалось 50 живых разрешений к контракту Jared. Шестнадцать на WETH, двадцать на USDC, четырнадцать на USDT. Он подождал восемнадцать минут. А потом просто слил по этим разрешениям:
4 759 WETH
3,58 млн USDC
2,53 млн USDT
Чисто сработано.
ПОЧЕМУ ЭТО ВООБЩЕ СРАБОТАЛО
Тут самая тонкая инженерная деталь, ради которой я этот пост и пишу.
Jared работает атомарными бандлами - это когда вся пачка операций либо проходит целиком, либо отменяется целиком. Казалось бы, защита. Если бы атакующий попытался украсть токены прямо в момент выдачи апрувов, весь бандл Jared откатился бы, и кража не состоялась.
Поэтому атакующий зашёл иначе.
Обычно ты апрувишь ровно ту сумму, которая нужна для свопа, и этот апрув сгорает, когда своп забирает твои токены. Логично. Но эти маршруты были построены так, чтобы своп забирал фейковые токены-пустышки вместо реальных. Реальные деньги бот не трогал ни разу - значит, и апрувы на них не сгорали. Они просто копились, живые и нетронутые.
А через восемнадцать минут, уже отдельной транзакцией, атакующий пришёл и собрал всё, что эти разрешения позволяли. Бандл к тому моменту давно закрылся, защита больше не работала, деньги ушли.
Гениально в своей простоте. Не взлом контракта, не дыра в коде Uniswap. Чистая работа с логикой жадности самого бота.
МОРАЛЬ
Jared годами зарабатывал на том, что видел чужие сделки наперёд и пользовался чужой неосторожностью. Сегодня кто-то сделал с ним ровно то же самое - увидел наперёд логику его автоматики и воспользовался его неосторожностью. Бот, который ел всех на жадности, сам сожрал отравленную наживку, потому что не смог пройти мимо лёгкого профита.
Это и есть главный урок крипты, который повторяется из раза в раз. Здесь нет неуязвимых. Самый быстрый, самый продвинутый, самый прибыльный бот в игре - и тот лёг, потому что в его жадность встроили ловушку. Любая автоматика, которая слепо хватает прибыль, рано или поздно схватит крючок.
Eat fresh, Jared.
Красота этой истории в том, что хищника съели ровно тем способом, которым он сам ел всех остальных. Разбираю по косточкам.
КТО ТАКОЙ JARED
Сэндвич-бот. Объясняю на пальцах, для тех кто не в теме.
Ты отправляешь своп на децентрализованной бирже. Бот видит твою сделку ещё до того, как она исполнилась - она висит в мемпуле, открытая всем. Он молниеносно встаёт перед тобой со своей покупкой, даёт твоей сделке толкнуть цену вверх, и тут же продаёт уже подорожавшее. Ты покупаешь дороже, чем мог бы. Разницу забирает бот. Это и есть сэндвич - тебя зажали между двумя сделками бота, как котлету между булками.
Большинство таких ботов сторожат конкретные пулы или токены. Jared был не такой. Jared был везде. Любой токен, любое количество переходов - если там пахло прибылью, Jared уже стоял там с открытым ртом. За это его и боялись.
КАК ЕГО ПОЙМАЛИ
А теперь следите. Это красиво.
Атакующий задеплоил больше сотни фейковых пар в стиле Uniswap V2 и фейковых токенов. Снаружи они выглядели как нормальные торговые пары с глубокой ликвидностью - всё по стандартному интерфейсу, комар носа не подточит. Только вся эта «ликвидность» была в фейковых обёрточных токенах, которые контролировал сам атакующий.
Дальше - наживка. Маршруты были выстроены так, чтобы после каждого «свопа» бот Jared видел маленькую, но реальную прибыль. Ровно то, на что заточена его автоматика. Бот учуял профит и клюнул - начал бэкранить фейковые изменения состояния пулов, которые атакующий подсовывал ему сам.
И вот ключевой момент. Чтобы прокрутить каждый такой фейковый арбитраж, боту Jared приходилось апрувить реальные активы - WETH, USDC, USDT. Это разрешения, которые ты выдаёшь контракту, чтобы он мог трогать твои деньги. Бот выдавал апрув за апрувом по десяткам фейковых токенов и не отзывал их - видимо, думал, что это обычные контракты Uniswap, чего их отзывать.
В итоге у атакующего на руках оказалось 50 живых разрешений к контракту Jared. Шестнадцать на WETH, двадцать на USDC, четырнадцать на USDT. Он подождал восемнадцать минут. А потом просто слил по этим разрешениям:
4 759 WETH
3,58 млн USDC
2,53 млн USDT
Чисто сработано.
ПОЧЕМУ ЭТО ВООБЩЕ СРАБОТАЛО
Тут самая тонкая инженерная деталь, ради которой я этот пост и пишу.
Jared работает атомарными бандлами - это когда вся пачка операций либо проходит целиком, либо отменяется целиком. Казалось бы, защита. Если бы атакующий попытался украсть токены прямо в момент выдачи апрувов, весь бандл Jared откатился бы, и кража не состоялась.
Поэтому атакующий зашёл иначе.
Обычно ты апрувишь ровно ту сумму, которая нужна для свопа, и этот апрув сгорает, когда своп забирает твои токены. Логично. Но эти маршруты были построены так, чтобы своп забирал фейковые токены-пустышки вместо реальных. Реальные деньги бот не трогал ни разу - значит, и апрувы на них не сгорали. Они просто копились, живые и нетронутые.
А через восемнадцать минут, уже отдельной транзакцией, атакующий пришёл и собрал всё, что эти разрешения позволяли. Бандл к тому моменту давно закрылся, защита больше не работала, деньги ушли.
Гениально в своей простоте. Не взлом контракта, не дыра в коде Uniswap. Чистая работа с логикой жадности самого бота.
МОРАЛЬ
Jared годами зарабатывал на том, что видел чужие сделки наперёд и пользовался чужой неосторожностью. Сегодня кто-то сделал с ним ровно то же самое - увидел наперёд логику его автоматики и воспользовался его неосторожностью. Бот, который ел всех на жадности, сам сожрал отравленную наживку, потому что не смог пройти мимо лёгкого профита.
Это и есть главный урок крипты, который повторяется из раза в раз. Здесь нет неуязвимых. Самый быстрый, самый продвинутый, самый прибыльный бот в игре - и тот лёг, потому что в его жадность встроили ловушку. Любая автоматика, которая слепо хватает прибыль, рано или поздно схватит крючок.
Eat fresh, Jared.
- ❤ 8
- 👏 2





