AMLConsensus
Разбор · без воды

Разрешения токенов: как одна подпись сливает кошелёк — и как это закрыть

Ты подписал «approve» или «permit» на поддельном сайте — и токены утекли позже, без новой транзакции от тебя. Разбираем механику approve/permit-дрейна, учимся смотреть список активных разрешений и отзывать лишнее.

Чтение ~8 минСентябрь 2026Уровень: новичок → средний

Кошелёк не «взломали». Ты сам нажал «Подтвердить» — один раз, на сайте, который выглядел как аирдроп или страница вывода. Приватный ключ никто не узнал, сид-фразу ты не вводил. Но через час, день или неделю токены ушли — без единой новой транзакции с твоей стороны. Так работает дрейн через разрешения токенов (approve / permit): подпись даёт чужому контракту право распоряжаться твоими токенами, а списывает он их уже сам, когда захочет.

01Что вообще произошло

Классическая история: кошелёк «опустошили», но пароль и сид-фраза целы, а в истории нет исходящей транзакции, которую ты бы помнил. Люди пишут «меня взломали», хотя технически всё легально — ты выдал разрешение. Токены ERC-20 (USDT, USDC, любой EVM-токен) устроены так, что владелец может разрешить смарт-контракту тратить свой баланс. На этом стоит весь DeFi — но на этом же стоят дрейнеры.

Ключевая идеяApprove и permit — это не перевод. Это доверенность: «разрешаю контракту X списывать до N моих токенов». Пока доверенность жива, он может воспользоваться ею в любой момент. Отдал безлимитную — доверенность вечная, пока не отзовёшь.

02Approve и allowance: что ты на самом деле разрешаешь

Когда приложение (DEX, стейкинг, мост) хочет двигать твои токены, оно просит транзакцию approve(spender, amount). Ты подтверждаешь — и в контракте токена записывается allowance: сколько именно этот spender (адрес-получатель прав) может списать с твоего баланса. Дальше он вызывает transferFrom и забирает — уже без твоей подписи.

Проблема безлимита не в честных приложениях, а в том, что: (1) если контракт спендера позже взломают — уйдёт всё; (2) если спендер изначально был дрейнером — он просто ждёт. Старые «unlimited»-разрешения годами висят на кошельках как открытые двери.

amlconsensus.com/approvals
0x7ad1…b902 · активные разрешения2 РИСКА
₮
USDT
Spender 0x1f98…F984 · Uniswap V3 Router
500
разумный лимит
оставить
$
USDC
Spender 0xc0ffee…dead · неизвестный контракт
∞
БЕЗЛИМИТ
отозвать
Ξ
WETH
Spender 0x0000…0abc · неизвестный (Permit2)
∞
БЕЗЛИМИТ
отозвать
Найдено 2 безлимитных разрешения неизвестным адресамОтозвать выбранные
Список разрешений: разумный лимит известному роутеру — норма; два безлимита неизвестным адресам — под отзыв.

03Permit и Permit2: подпись вместо транзакции

Дальше страшнее. Стандарт EIP-2612 (permit) и универсальный Permit2 позволяют выдать allowance не транзакцией, а подписью — «gasless», без затрат на газ. Ты не платишь комиссию, в блокчейне в этот момент ничего не появляется. Подпись — это просто строка, которую атакующий кладёт в карман и применяет потом, отправив её в контракт от своего имени и за свой газ.

Почему permit опаснее approveОбычный approve виден в истории как транзакция и появляется в списке allowance. Permit-подпись до момента применения не видна нигде — ни в истории кошелька, ни в обычном списке разрешений. Ты подписал «что-то» на сайте, окно закрылось, кошелёк выглядит нетронутым — а доверенность уже у дрейнера и сработает в удобный ему момент.

Внешне запрос подписи permit похож на безобидный «Sign in» или «Verify wallet». Никакой транзакции, никакого газа — психологически кажется безопасным. Именно на этом строится большинство современных дрейнов.

04Как это выглядит в атаке

Схема почти всегда одна: приманка → «подключи кошелёк» → «подтверди/подпиши» → списание. Меняются только вывески — «claim airdrop», «разблокируй награду», «мигрируй токены», «проверь право на выплату».

1
Фейк-сайт «Claim airdrop»Реклама, ответ в X, «поддержка» в личке. Домен-двойник, срочность: «успей забрать до конца дня».
↓
2
«Подключить и подтвердить»Кошелёк открывает окно подписи. Выглядит как вход, но внутри — approve / permit на твои токены в пользу адреса дрейнера.
↓
3
Дрейнер применяет подписьНикакой новой транзакции от тебя. Он сам вызывает transferFrom / permit со своей стороны — сразу или спустя время.
↓
4
Токены уходятБаланс списан в пределах выданного allowance. Часто безлимитного — тогда уходит всё по этому токену.
Одна подпись на шаге 2 — и шаги 3–4 происходят уже без тебя, когда удобно атакующему.

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

05Что именно ты подписываешь

Спасение — в одной привычке: читать окно подписи до нажатия «Подтвердить». Хорошие кошельки расшифровывают запрос по-человечески. Опасные признаки: слово Approve/Permit, безлимитная сумма (Unlimited / очень длинное число), незнакомый адрес-спендер, и всё это на сайте, где ты ждал «просто вход».

Запрос подписиclaim-airdrop-l2·xyz
ДействиеPermit (allowance по подписи)
ТокенUSDC
Кому (spender)0xc0ffee…dead
СуммаUnlimited (∞)
Газ0 (подпись вне сети)
Простыми словами: ты разрешаешь неизвестному адресу списывать любое количество твоих USDC в любой момент. Это не вход на сайт.
ОтклонитьПодтвердить
Тот же экран, что кажется «входом». Три красных слова: Permit, неизвестный spender, Unlimited — повод закрыть окно.
ПравилоЕсли для «входа», «проверки кошелька» или «получения аирдропа» просят approve или permit — это не вход. Настоящий вход в dApp — это подпись сообщения (Sign message) без allowance и без токенов. Approve/permit нужны только для реального движения средств.

06Как проверить и отозвать разрешения

Гигиена простая: периодически смотреть, кому и сколько ты разрешил, и отзывать (revoke) всё лишнее — старые, безлимитные и неизвестные разрешения. Отзыв — это транзакция, которая ставит allowance в ноль; после неё спендер больше ничего списать не может.

Открой список активных разрешенийСтраница разрешений показывает по каждому токену: кто спендер, какой лимит (число или ∞), и известен ли адрес.
Отметь подозрительноеВ первую очередь — безлимитные (∞) и разрешения неизвестным / незнакомым контрактам. Известный роутер с разумным лимитом можно оставить.
Отзови (revoke)Подтверди транзакцию отзыва — allowance станет 0. Для Permit2 отзывай и его собственное разрешение тоже.
Повторяй периодическиРазрешения копятся с каждым новым dApp. Раз в пару месяцев — ревизия. Крупные суммы лучше держать на отдельном «холодном» адресе без approve.

07Страница разрешений AMLConsensus (/approvals)

В AMLConsensus раздел /approvals собирает активные allowance по адресу в один список: по каждому токену видно спендера, атрибуцию (известный роутер или неизвестный контракт), лимит и пометку «безлимит». Безлимитные и неизвестные разрешения подсвечены как риск — их и стоит отзывать в первую очередь. Отзыв инициируется твоим кошельком: приложение только показывает, что именно закрывать, — ключи и подпись остаются у тебя.

Как пользоватьсяПрогони свой основной адрес перед крупным переводом и после любого сомнительного «аирдропа». Если увидел безлимит незнакомому адресу — отзови сразу, не дожидаясь «а вдруг это что-то нужное». Нужное приложение попросит approve заново, когда действительно понадобится.

08Честные границы

Важно без иллюзий понимать, что отзыв умеет и чего не умеет:

Главное правило одно и оно бесплатное: не подписывать approve/permit вслепую. Читай, что подписываешь; настоящий вход не требует доступа к токенам; безлимит выдавай только тем, кому осознанно доверяешь, и отзывай, когда закончил.

Проверь свои разрешения

Список активных approve/permit по адресу, подсветка безлимитов и неизвестных спендеров — бесплатно, без привязки кошелька.

Открыть @amlconsensus_bot · /approvals

AMLConsensus — инструмент снижения риска, а не гарантия безопасности. Отзыв разрешения (revoke) не возвращает уже списанные средства и защищает только от будущих списаний по данному allowance; итоговое решение о подписи и отзыве всегда остаётся за вами, ключи и подпись — в вашем кошельке. Названия сервисов и протоколов (Uniswap, Permit2, MetaMask и др.) — товарные знаки их владельцев; AMLConsensus не аффилирован с ними и упоминает их для пояснения. Материал носит образовательный характер и не является финансовой или юридической консультацией.