Governance- и экономические атаки
Иногда протокол захватывают не через баг в коде, а через его же правила управления.
Governance-атака — захват контроля над протоколом через его легальный механизм управления (голосование токенами), когда атакующий набирает достаточно голосов, чтобы провести вредоносное решение.
Управление как поверхность атаки
Многие DeFi-протоколы управляются держателями токена: предложения (изменить параметры, потратить казну, обновить логику) принимаются голосованием. Это децентрализует власть, но создаёт новый риск: если кто-то получит большинство голосов, он сможет легально провести решение, выгодное ему и губительное для протокола — например, направить казну себе. Кода-бага нет: сработали штатные правила.
Где появляется флеш-займ
Если вес голоса считается по мгновенному балансу токенов, атакующий может занять огромное количество токенов управления флеш-займом, проголосовать ими и вернуть заём — всё в одной транзакции. Поэтому критична защита, которую мы уже встречали: снапшот силы голоса на прошлый блок. Флеш-займ живёт в текущем блоке и не повлияет на «вес», зафиксированный ранее.
// УЯЗВИМО: вес = текущий баланс (флеш-займ даёт голоса)
uint votes = token.balanceOf(voter);
// БЕЗОПАСНЕЕ: вес = баланс на момент создания предложения (снапшот в прошлом)
uint votes = token.getPastVotes(voter, proposalSnapshotBlock);Другие экономические атаки
- Манипуляция стимулами. Перекос наград/комиссий, который выкачивает ценность из честных участников.
- Атака на инфляцию долей пула. Через крайние случаи (пустой пул, первый депозит) исказить пересчёт долей.
- Накопление округления. Систематический сдвиг округления в свою пользу (см. урок о точности).
Общее у них: эксплуатируется не синтаксис, а экономический дизайн — стимулы и инварианты, которые не учли всех сценариев.
Как работает под капотом: защита управления
Зрелое управление эшелонировано: голоса по снапшоту прошлого блока (против флеш-займов), кворум (минимальная явка), порог предложения (нельзя выносить предложение с пыли) и обязательный таймлок на исполнение принятого решения. Таймлок — последний рубеж: даже если вредоносное предложение прошло, есть окно, в которое сообщество замечает угрозу и выходит/реагирует.
Эшелоны защиты governance:
снапшот прошлого блока -- против флеш-голосования
кворум + порог -- против дешёвых атак
таймлок на исполнение -- окно для реакции сообществаЧастые ошибки
- Вес голоса по мгновенному балансу. Открывает флеш-голосование.
- Исполнение решения мгновенно, без таймлока. Нет окна реакции.
- Низкий кворум/порог. Дешёвый захват малой долей токенов.
Итоги
- Governance-атака использует штатные правила голосования, а не баг в коде.
- Вес голоса считайте по снапшоту прошлого блока — против флеш-займов.
- Защита эшелонирована: снапшот, кворум, порог, таймлок исполнения.
- Экономические атаки бьют по дизайну стимулов и инвариантов, а не по синтаксису.