содержимое
Как работают аппрувы: механика разрешений
Базовый принцип ERC-20
| Функция | Назначение | Риск |
|---|---|---|
transfer | Прямая отправка токенов | Минимальный |
approve | Разрешение третьему лицу тратить ваши токены | Критический |
transferFrom | Исполнение перевода от имени владельца | Зависит от allowance |
Когда вы взаимодействуете с DEX (Uniswap, 1inch) или DeFi-протоколом (Aave, Compound), вы вызываетеapprove(spender,amount), разрешая смарт-контракту списывать токены с вашего баланса.
Infinite allowance: ловушка удобства
2^256 - 1 или type(uint256).max). Обоснование разработчиков: «чтобы пользователю не приходится платить gas за approve при каждой сделке».Векторы атаки: как крадут через аппрувы
1. Эксплуатация уязвимых контрактов (ACT-атаки)
transferFrom, он может украсть не только средства протокола, но и токены всех пользователей, одобривших этот контракт.- Пользователь одобряет контракт A на управление своими USDC
- Контракт A содержит уязвимость, позволяющую атакующему вызывать
transferFromс произвольными параметрами - Атакующий инициирует перевод всех USDC пользователя на свой адрес
- Поскольку allowance бесконечен, транзакция исполняется без дополнительного подтверждения
2. Approval Race Condition (гонка разрешений)
// Уязвимый код (упрощенно)
function _approve(address owner, address spender, uint256 value) internal {
_allowances[owner][spender] = value; // Простая перезапись!
emit Approval(owner, spender, value);
} 3. Фишинговые аппрувы
approve на адреса контрактов-воров. Пользователь думает, что одобряет Uniswap, а фактически разрешает неизвестному контракту вывести все токены.- Запрос на одобрение «нового моста» или «обновленного роутера»
- Необычно высокий gas limit (обычно approve стоит дешево)
- Адрес контракта не совпадает с официальным (проверяйте на Etherscan)
4. Эксплуатация Permit2 и современных стандартов
Permit2.transferFrom в реальных контрактах.Как проверить и отозвать опасные аппрувы
Инструменты для аудита разрешений
| Инструмент | Сети | Особенности |
|---|---|---|
| Revoke.cash | 100+ сетей | Интуитивный интерфейс, оценка риска, история аппрувов |
| Etherscan Token Approvals | Ethereum | Официальный инструмент, детализация по ERC-20/721/1155 |
| MetaMask Portfolio | ETH, Polygon, BNB Chain | Встроенная функция Spending Caps |
| BscScan/Polygonscan | BSC, Polygon | Аналоги Etherscan для альтернативных сетей |
| Unrekt, approved.zone, Cointool | Мультисеть | Специализированные анализаторы |
Пошаговая инструкция по отзыву (Revoke.cash)
Подключение: Перейдите на revoke.cash и подключите кошелек (MetaMask, WalletConnect и др.
Анализ: Платформа отобразит все активные аппрувы с указанием:
- Контракта-получателя разрешения
- Токена и суммы allowance
- Возраста аппрува
- Оценки потенциального риска
Подтверждение: Оплатите gas fee за транзакцию отзыва (обычно $1-5 в зависимости от сети)
Важно: Отзыв аппрува — это on-chain транзакция, требующая gas. Если у вас нет ETH (или native токена сети) на оплату комиссии, отозвать разрешение невозможно.
Ручной отзыв через Etherscan
- Перейдите в раздел More → Token Approvals на Etherscanё
- Введите адрес кошелька
- Включите Show all approvals для отображения всех разрешений
- Нажмите Revoke напротив подозрительного контракта
Профилактика: как не стать жертвой
Золотые правила безопасности
- Никаких infinite allowance
Всегда устанавливайте точную сумму, необходимую для конкретной операции. В MetaMask нажмите «Edit permission» и замените «Default» на «Custom» с точным количеством токенов. - Регулярный аудит
Проверяйте активные аппрувы ежемесячно. Удаляйте разрешения для протоколов, которыми не пользуетесь более 30 дней. - Проверка контрактов
Перед аппрувом сверяйте адрес смарт-контракта с официальным сайтом протокола. Используйте блокчейн-эксплореры для анализа истории и верификации кода. - Используйте increaseAllowance/decreaseAllowance
При работе с современными токенами предпочитайте атомарные операции изменения лимита вместо прямогоapprove. - Отдельные кошельки для DeFi
Не храните основные сбережения на кошельке, активно используемом для фарминга и трейдинга. Используйте «горячий» кошелек с минимальным балансом для операций, а «холодный» — для хранения.
Технические меры защиты для разработчиков
- Используйте
SafeERC20от OpenZeppelin сsafeIncreaseAllowanceиsafeDecreaseAllowance - Избегайте прямого контроля пользователя над параметрами
transferFrom - Внедряйте two-step transfers и locking periods для критических операций
- Проводите аудиты безопасности перед деплоем
Что делать, если средства уже украдены
Немедленные действия
- Отзовите все аппрувы через Revoke.cash или аналоги — это предотвратит дальнейший дрейн
- Проверьте другие токены — если один контракт скомпрометирован, проверьте все остальные аппрувы
- Создайте новый кошелек для дальнейших операций (старый считайте скомпрометированным)
- Зафиксируйте доказательства: хеши транзакций, адреса контрактов, скриншоты
- Обратитесь в правоохранительные органы при значительных суммах (в некоторых юрисдикциях криптовалютные кражи расследуются)
Важное ограничение
Заключение: аппрувы — это кредит доверия без срока давности
- Каждый infinite approval — это потенциальная потеря 100% баланса токена
- Регулярный аудит через Revoke.cash обязателен для активных DeFi-пользователей
- Предпочитайте точные лимиты бесконечным разрешениям
- Устаревшие аппрувы — мёртвый груз, который может стоить вам всего