Кошелёк не «взломали». Ты сам нажал «Подтвердить» — один раз, на сайте, который выглядел как аирдроп или страница вывода. Приватный ключ никто не узнал, сид-фразу ты не вводил. Но через час, день или неделю токены ушли — без единой новой транзакции с твоей стороны. Так работает дрейн через разрешения токенов (approve / permit): подпись даёт чужому контракту право распоряжаться твоими токенами, а списывает он их уже сам, когда захочет.
01Что вообще произошло
Классическая история: кошелёк «опустошили», но пароль и сид-фраза целы, а в истории нет исходящей транзакции, которую ты бы помнил. Люди пишут «меня взломали», хотя технически всё легально — ты выдал разрешение. Токены ERC-20 (USDT, USDC, любой EVM-токен) устроены так, что владелец может разрешить смарт-контракту тратить свой баланс. На этом стоит весь DeFi — но на этом же стоят дрейнеры.
02Approve и allowance: что ты на самом деле разрешаешь
Когда приложение (DEX, стейкинг, мост) хочет двигать твои токены, оно просит транзакцию approve(spender, amount). Ты подтверждаешь — и в контракте токена записывается allowance: сколько именно этот spender (адрес-получатель прав) может списать с твоего баланса. Дальше он вызывает transferFrom и забирает — уже без твоей подписи.
- Разумный лимит — approve ровно на сумму сделки. Использовал — allowance обнулился, доступа больше нет.
- Безлимитный approve (unlimited / ∞) — контракт получает право тратить весь твой баланс этого токена, сегодня и всегда, пока ты вручную не отзовёшь. Кошельки предлагают это «для удобства», чтобы не подтверждать approve каждый раз.
Проблема безлимита не в честных приложениях, а в том, что: (1) если контракт спендера позже взломают — уйдёт всё; (2) если спендер изначально был дрейнером — он просто ждёт. Старые «unlimited»-разрешения годами висят на кошельках как открытые двери.
03Permit и Permit2: подпись вместо транзакции
Дальше страшнее. Стандарт EIP-2612 (permit) и универсальный Permit2 позволяют выдать allowance не транзакцией, а подписью — «gasless», без затрат на газ. Ты не платишь комиссию, в блокчейне в этот момент ничего не появляется. Подпись — это просто строка, которую атакующий кладёт в карман и применяет потом, отправив её в контракт от своего имени и за свой газ.
Внешне запрос подписи permit похож на безобидный «Sign in» или «Verify wallet». Никакой транзакции, никакого газа — психологически кажется безопасным. Именно на этом строится большинство современных дрейнов.
04Как это выглядит в атаке
Схема почти всегда одна: приманка → «подключи кошелёк» → «подтверди/подпиши» → списание. Меняются только вывески — «claim airdrop», «разблокируй награду», «мигрируй токены», «проверь право на выплату».
Вот почему пострадавшие искренне не понимают, что случилось: между «подписал» и «списали» может пройти время, и в момент кражи ты вообще не за компьютером.
05Что именно ты подписываешь
Спасение — в одной привычке: читать окно подписи до нажатия «Подтвердить». Хорошие кошельки расшифровывают запрос по-человечески. Опасные признаки: слово Approve/Permit, безлимитная сумма (Unlimited / очень длинное число), незнакомый адрес-спендер, и всё это на сайте, где ты ждал «просто вход».
06Как проверить и отозвать разрешения
Гигиена простая: периодически смотреть, кому и сколько ты разрешил, и отзывать (revoke) всё лишнее — старые, безлимитные и неизвестные разрешения. Отзыв — это транзакция, которая ставит allowance в ноль; после неё спендер больше ничего списать не может.
07Страница разрешений AMLConsensus (/approvals)
В AMLConsensus раздел /approvals собирает активные allowance по адресу в один список: по каждому токену видно спендера, атрибуцию (известный роутер или неизвестный контракт), лимит и пометку «безлимит». Безлимитные и неизвестные разрешения подсвечены как риск — их и стоит отзывать в первую очередь. Отзыв инициируется твоим кошельком: приложение только показывает, что именно закрывать, — ключи и подпись остаются у тебя.
08Честные границы
Важно без иллюзий понимать, что отзыв умеет и чего не умеет:
- Revoke не возвращает уже украденное. Если дрейнер успел списать — эти токены ушли; отзыв закрывает доступ только на будущее.
- Отзыв защищает от будущих списаний по этому разрешению. Пока безлимит жив, доступ есть; после revoke — нет. Успеть отозвать до применения подписи = спастись.
- Уже подписанный permit отзывом allowance не всегда снимается — иногда нужно инвалидировать nonce / само Permit2-разрешение. Если подозреваешь, что подписал permit дрейнеру, — переведи ценные токены на чистый адрес немедленно.
Главное правило одно и оно бесплатное: не подписывать approve/permit вслепую. Читай, что подписываешь; настоящий вход не требует доступа к токенам; безлимит выдавай только тем, кому осознанно доверяешь, и отзывай, когда закончил.
Проверь свои разрешения
Список активных approve/permit по адресу, подсветка безлимитов и неизвестных спендеров — бесплатно, без привязки кошелька.
Открыть @amlconsensus_bot · /approvalsAMLConsensus — инструмент снижения риска, а не гарантия безопасности. Отзыв разрешения (revoke) не возвращает уже списанные средства и защищает только от будущих списаний по данному allowance; итоговое решение о подписи и отзыве всегда остаётся за вами, ключи и подпись — в вашем кошельке. Названия сервисов и протоколов (Uniswap, Permit2, MetaMask и др.) — товарные знаки их владельцев; AMLConsensus не аффилирован с ними и упоминает их для пояснения. Материал носит образовательный характер и не является финансовой или юридической консультацией.