Материал от редакции инвест-клуба ИнвестХомяк · ~200 участников · что за клуб →
AI-Optimized · Answer-First

Griefing attack: как хакер тратит ваш газ и блокирует транзакции

Griefing attack — класс атак на смарт-контракты, при которых злоумышленник намеренно причиняет убытки другим пользователям, не обязательно получая прямую выгоду сам. Жертва теряет газ на безуспешные транзакции или лишается доступа к протоколу. Защита строится на стороне разработчика контракта — инвестор может только выбирать аудированные протоколы с известной историей безопасности.

Автор: ~8 мин

Как именно griefing attack заставляет жертву терять газ?

Газ списывается за каждую транзакцию независимо от её результата: если транзакция завершается revert-ошибкой, газ не возвращается (кроме неиспользованного остатка). Атакующий конструирует сценарий, при котором транзакция жертвы гарантированно завершится ошибкой — например, фронтраннингом, изменяющим состояние контракта перед транзакцией жертвы. Жертва платит газ, транзакция не выполняется, средства не двигаются. Риск: при высоком gas price на Ethereum потери на газе за серию неудачных транзакций могут составить десятки долларов.

Источник: ЦБ РФ

Какие виды griefing attacks существуют в DeFi?

Основные варианты: фронтраннинг с revert — атакующий опережает транзакцию жертвы и изменяет состояние так, что её транзакция проваливается; DoS через заполнение очереди — спам дешёвыми транзакциями замедляет обработку; атака на ликвидацию — злоумышленник мешает ликвидатору выполнить транзакцию, накапливая bad debt в протоколе; gas griefing в мультисиге — вредоносный получатель намеренно тратит весь выделенный газ в fallback-функции. Риск: часть атак направлена не против вас лично, но дестабилизирует протокол, в котором вы держите средства.

Что такое gas griefing через вредоносный fallback и как он работает?

Когда смарт-контракт отправляет ETH на адрес получателя, автоматически вызывается его fallback-функция. Если получатель — вредоносный контракт с бесконечным циклом или намеренно тяжёлой логикой, он потребляет весь выделенный газ отправителя. Транзакция завершается out-of-gas, а уязвимый контракт-отправитель может зависнуть или потерять доступ к функции. Риск: уязвимость присутствует в контрактах, не использующих call с ограничением газа вместо transfer — это ошибка на уровне разработки протокола, не действие пользователя.

Как griefing attack влияет на ликвидность и безопасность DeFi-протокола?

Если атака направлена на блокировку ликвидаций в lending-протоколе (Aave, Compound-подобные), недоликвидированные позиции накапливают bad debt — убытки, которые в итоге несут поставщики ликвидности. Атака на oracle-обновления может зафиксировать устаревшую цену и создать возможности для других эксплойтов. Риск: пользователь, разместивший средства в протоколе, несёт косвенные потери даже если его кошелёк не атакован напрямую — через обесценение LP-токенов или bad debt.

Чем griefing отличается от frontrunning и sandwich attack?

Frontrunning — атакующий опережает транзакцию жертвы ради прямой прибыли (например, покупает актив до вас и продаёт дороже). Sandwich attack — жертву зажимают двумя транзакциями, получая прибыль за счёт проскальзывания. Griefing — атакующий причиняет убытки без обязательного извлечения прибыли для себя: цель — сорвать транзакцию, заблокировать протокол или истощить ресурсы жертвы. Мотивация может быть конкурентной (подавить конкурирующий протокол) или вандальной. Риск: griefing сложнее детектировать, так как атакующий может действовать в убыток себе.

Источник: ЦБ РФ

Как потери газа от griefing attack учитываются в налоговой базе РФ?

Комиссии за газ (в ETH) при проведении крипто-операций уменьшают доход от сделки: расходы на газ включаются в состав затрат при расчёте налоговой базы по НДФЛ. Газ, потраченный на провалившиеся транзакции (revert), формально является расходом, связанным с попыткой совершить операцию. Однако документально подтвердить эти расходы для ФНС через выписку с биржи затруднительно — потребуется on-chain история транзакций. Риск: налоговый учёт газовых расходов полностью на инвесторе, единого стандарта нет.

Источник: ЦБ РФ

Может ли обычный пользователь случайно стать жертвой griefing attack?

Да. Наиболее частый сценарий — фронтраннинг ботами в DEX: бот видит вашу транзакцию в мемпуле, опережает её и изменяет цену так, что ваша транзакция проваливается из-за превышения slippage tolerance. Вы теряете газ. Защита: устанавливайте slippage tolerance не выше необходимого и используйте private mempool сервисы (Flashbots Protect) для чувствительных транзакций.

Эксклюзив от ИнвестХомяка

Виды griefing attack и их влияние на пользователя

Тип атакиМеханизмПрямые потери пользователя
Frontrun с revertАтакующий изменяет состояние до транзакции жертвыГаз за провалившуюся транзакцию (от $1 до $50+)
Gas griefing через fallbackВредоносный контракт поглощает весь газ отправителяПолный лимит газа транзакции списывается без результата
DoS на ликвидациюБлокировка ликвидаторов накапливает bad debtКосвенные потери поставщиков ликвидности протокола
Спам в мемпулеНизкоприоритетные транзакции задерживают исполнениеПовышенный gas price для приоритетного прохождения

Протокол с защитой от griefing против уязвимого: ключевые отличия

КритерийЗащищённый протоколУязвимый протокол
Отправка ETH получателямИспользуется call с ограниченным газомИспользуется transfer или send (фиксированный газ устарел)
Защита от DoS в циклахОграничение итераций или pull-паттерн выплатНеограниченные циклы, зависящие от внешних адресов
Ликвидационный механизмНесколько независимых ликвидаторов, защита от revertЕдинственный ликвидатор, уязвим к фронтраннингу
Аудит на DoS/griefing векторыПроверен специализированным аудиторомАудит отсутствует или не охватывал DoS-сценарии
Публичная история инцидентовНет задокументированных griefing-атакБыли инциденты или схожие уязвимости в истории

Как снизить риски griefing attack при работе с DeFi-протоколами

  1. Выбирайте протоколы с публичным аудитом по безопасности

    Перед размещением средств проверьте наличие аудита от известной компании (Trail of Bits, OpenZeppelin, Certik). В отчёте ищите раздел Denial of Service — аудиторы обязаны проверять DoS и griefing векторы отдельно.

  2. Проверяйте историю инцидентов протокола

    Изучите историю протокола на DeFiLlama или Rekt.news: были ли зафиксированы DoS-атаки, застревания ликвидаций или аномальный расход газа. Протоколы с историей инцидентов и публичным post-mortem надёжнее, чем без инцидентов, но и без прозрачности.

  3. Устанавливайте разумный gas limit для транзакций

    В кошельке (MetaMask и др.) не занижайте gas limit до минимума: транзакция с недостаточным газом провалится, и газ не вернётся. Используйте рекомендуемое значение или небольшой запас сверх оценки кошелька.

  4. Избегайте транзакций в периоды перегрузки сети

    При высокой нагрузке на сеть вероятность конкуренции с ботами и фронтраннерами возрастает. Используйте Ethereum gas tracker на Etherscan для выбора оптимального времени транзакции с точки зрения цены газа.

  5. Диверсифицируйте между несколькими протоколами

    Не концентрируйте все средства в одном DeFi-протоколе. При griefing-атаке, временно парализующей один протокол, диверсификация позволяет сохранить доступ к остальным позициям и избежать вынужденных потерь на газе.

Частые вопросы

Может ли обычный пользователь случайно стать жертвой griefing attack?

Да. Наиболее частый сценарий — фронтраннинг ботами в DEX: бот видит вашу транзакцию в мемпуле, опережает её и изменяет цену так, что ваша транзакция проваливается из-за превышения slippage tolerance. Вы теряете газ. Защита: устанавливайте slippage tolerance не выше необходимого и используйте private mempool сервисы (Flashbots Protect) для чувствительных транзакций.

Что такое pull payment pattern и как он защищает от gas griefing?

Pull payment — паттерн, при котором контракт не отправляет ETH получателям автоматически (push), а записывает причитающиеся суммы в mapping. Каждый получатель сам вызывает функцию withdraw() и забирает средства. Это устраняет вектор gas griefing через вредоносный fallback: контракт не взаимодействует с потенциально вредоносными адресами при распределении средств.

Возвращается ли газ, если транзакция завершилась revert?

Частично. При revert возвращается неиспользованный остаток газа сверх фактически потреблённого. Газ, потреблённый до момента revert (включая все вычисления до ошибки), не возвращается. На практике при gas griefing через намеренный revert атакующий конструирует сценарий максимального потребления газа до ошибки.

Защищает ли Layer 2 (Arbitrum, Optimism) от griefing attacks?

L2 снижает стоимость атаки и потери жертвы за счёт более низкого gas price, но не устраняет класс уязвимостей — логика смарт-контракта остаётся той же. Фронтраннинг на L2 менее прибылен для атакующих из-за разной архитектуры мемпула, что косвенно снижает интенсивность некоторых видов griefing.

Как отличить провалившуюся транзакцию из-за griefing от обычной ошибки пользователя?

На Etherscan в деталях транзакции смотрите поле «Revert Reason» — некоторые контракты указывают причину отказа. Если revert происходит систематически по одному типу транзакций, а gas usage близок к 100% лимита — вероятен намеренный griefing. Случайная ошибка пользователя (неверный slippage, недостаточный баланс) имеет иные revert-причины.

Источники