Учебные атаки и защита на testnet · узнавать ловушки, отклонять, отзывать доступы
Уровень 1 учил пользоваться кошельком: адрес, сеть, газ, перевод, approve. Уровень 2 учит не потерять средства: как выглядят типовые атаки (drainer'ы), по каким красным флагам их узнавать и как закрывать выданные разрешения.
Пройди по порядку: сначала три ловушки (увидишь атаку и сработавший детектор кошелька), затем защиту (сам отзовёшь опасное разрешение), и в конце — итог с чеклистом.
tools/anvil.sh start перед трапами (и stop после). Урок защиты (revoke) идёт на живой Sepolia,
Docker не нужен. Всё на тестовых сетях, реальные средства не задействованы.
dApp просит неограниченный approve на твой токен «для награды» — и контракт-дрейнер уводит весь баланс одним transferFrom. Красный флаг — Ф1-детект «НЕОГРАНИЧЕННО».
permit (EIP-2612) — оффчейн-подпись разрешения, опаснее обычного approve: газ не платишь, а доступ выдаёшь. Детект покажет «Permit — это разрешение», неограниченный value, spender и deadline.
Незапрошенный «подарок» — наживка. Чтобы «забрать», тебя просят approve на твой настоящий токен, а не на подарок. Правило: не взаимодействовать с незапрошенными токенами, проверять адрес целиком.
Обратная сторона: сам выдашь unlimited approve на живом testnet и отзовёшь его (allowance ∞ → approve 0). Плюс гигиена: Etherscan «Token Approvals», revoke.cash.
Атакующий «отравляет» историю переводом с адреса-двойника: совпадают начало и конец, середина другая. Скопируешь получателя из истории — деньги уйдут ему. Учимся сверять весь адрес и ловить флаг.
Четыре ситуации — одна привычка: читать окно кошелька. В трёх у тебя выманивают доступ к средствам (approve/permit/airdrop), в четвёртой — подменяют получателя (похожий адрес). Узнавай красный флаг, отклоняй, а уже выданное — отзывай.
Вывод: approve и подпись — это выданный ключ, а не «кнопка ОК». Давай минимум под операцию, отзывай после, периодически проверяй список выданных разрешений (Etherscan «Token Approvals», revoke.cash — только по проверенной закладке; настоящий инструмент никогда не просит seed-фразу).