Настроить уведомления о движении средств после подозрительной активности нужно шире, чем обычно: к событиям по балансу добавляются события по разрешениям. Причина прямая. Нападающий редко выводит активы сразу — он получает право распоряжаться ими и расходует позже. Баланс при этом не меняется, и подписка на поступления с расходами молчит. Подписка на выданные разрешения видит угрозу в момент её появления.

Разрешение на расходование — это запись в смарт-контракте токена, которая позволяет указанному адресу тратить ваши активы без вашей подписи, в пределах заданной суммы и без срока действия, если срок не задан отдельно.

Как настроить уведомления о движении средств после подозрительной активности: на что смотреть

Подозрительная активность — это не обязательно пропавшие средства. Чаще она выглядит иначе. Странное подтверждение в кошельке, страница с внезапным запросом подписи, письмо о «проверке активов», незнакомое приложение, попросившее доступ. Активы остались. Право на них могло уйти.

В стандарте ERC-20, имеющем статус Final, за выдачу права отвечает функция approve с двумя параметрами — адресом расходующего и суммой, а факт выдачи фиксируется событием Approval с теми же данными. Это событие и есть предмет подписки. Оно появляется в цепочке сразу, задолго до того, как разрешением воспользуются, и даёт владельцу запас по времени, которого при наблюдении только за балансом не бывает.

Есть вторая разновидность, и она тише первой. Расширение ERC-2612, тоже со статусом Final, добавляет функцию permit: разрешение выдаётся подписью по схеме EIP-712, то есть вне цепочки. События нет. Подпись лежит у получателя и предъявляется в любой момент до истечения срока, причём срок допускает значение, при котором разрешение не истекает практически никогда, а предъявить подпись имеет право любой адрес.

Сравнение событий: что видно наблюдателю

Событие Видно ли наблюдателю Когда появляется Что делать владельцу
Расход с адреса, перевод токенов или монет. Да, это основное событие любой службы наблюдения. В момент широковещания транзакции. Сверить с собственными действиями, при расхождении выводить остаток.
Выдача разрешения функцией approve. Да, через событие Approval в журнале контракта. Сразу после подтверждения транзакции с подписью. Обнулить разрешение, если его выдавали не вы.
Разрешение, выданное подписью permit вне цепочки. Нет, до момента предъявления подписи. Становится видимым только при исполнении. Считать выданным и отзывать принудительно, перевыпуская разрешения.
Поступление мелкой суммы от незнакомого адреса. Да, если порог наблюдения не отсекает такие суммы. В момент появления транзакции в сети. Не трогать поступление, проверить связанность адресов.

Третья строка объясняет главное ограничение. Наблюдение не видит того, чего нет в цепочке. Поэтому после подозрительного взаимодействия разрешения не «проверяют», а обнуляют.

Порядок настройки шаг за шагом

  1. Заведите наблюдение по всем адресам контура, включая те, где лежат токены и позиции в приложениях, а не только основной кошелёк.
  2. Включите подписку на события журнала контрактов: выдача и изменение разрешений, а не только переводы.
  3. Снимите порог по сумме для исходящих событий. Расход на любую сумму с адреса хранения должен приходить без фильтра.
  4. Назначьте получателем аппарат, который не участвовал в подозрительном взаимодействии и не хранит подписывающий ключ.
  5. Пройдите список действующих разрешений и обнулите всё, что не нужно сегодня. По рекомендации ERC-20 сумма сначала ставится в ноль.
  6. Прогоните контрольную операцию и зафиксируйте время доставки сообщения в записи конфигурации.
Схема из шести шагов: охват всех адресов контура, подписка на события разрешений, снятие порога для исходящих, выбор чистого получателя, обнуление разрешений, контрольная операция
Схема из шести шагов: охват всех адресов контура, подписка на события разрешений, снятие порога для исходящих, выбор чистого получателя, обнуление разрешений, контрольная операция
Разрешение по ERC-20 задаётся числом в 256 бит, то есть допускает сумму, превышающую выпуск любого токена: такое значение означает право распоряжаться всем балансом бессрочно. Расширение ERC-2612 с подписями permit получило статус Final, а его черновик создан в апреле 2020 года. Данные по текстам стандартов в реестре EIP на 14 октября 2026 года.

Из этого следует порядок приоритетов. Сначала разрешения, потом балансы. Разрешение на весь баланс опаснее разового расхода, потому что действует до отзыва, не требует от нападающего новой подписи и срабатывает в тот момент, который выбирает он, а не вы.

Проверка канала и смена ключей

Оповещения после инцидента решают задачу обнаружения, но не задачу защиты. Если подозрительная активность касалась слов восстановления, парольной фразы или экспортированного приватного ключа, никакая подписка не поможет: нападающий подпишет транзакцию с теми же правами, что и вы. Тогда работает ротация — создание нового дерева ключей и перевод остатка. Как связаны слова и дерево адресов, мы разбирали в материале про стандарт BIP-39 и происхождение 24 слов восстановления.

Отзыв разрешений не отменяет подписанных заранее сообщений permit, если контракт их ещё не исполнил. Единственный надёжный ход — перевести активы на адрес, для которого таких подписей не существует. Отзыв разрешений при этом тоже делается, но считать его достаточным нельзя.

Типовые ошибки, которые стоят денег

  • Подписка только на переводы. Выдача разрешения проходит мимо наблюдения, и оно срабатывает через месяцы.
  • Порог по сумме для исходящих событий. Нападающий выводит частями, каждая ниже порога.
  • Получателем оповещений назначен аппарат, с которого шло подозрительное взаимодействие.
  • Наблюдение заведено на основной кошелёк, а активы лежат ещё на трёх адресах.

Четвёртая ошибка особенно обидна, поскольку обнаруживается после события: контур состоит из нескольких адресов, наблюдение охватывает один, и сообщение о расходе приходит там, где расходов не бывает. Что делать с мелкими поступлениями от незнакомцев, мы описывали в разборе о том, как распознать пылевую атаку на кошелёк.

Что делать, если доступ уже утрачен

Порядок жёсткий и не предполагает размышлений. Остаток выводится первым действием, на свежее дерево ключей, созданное на устройстве, которое в подозрительном взаимодействии не участвовало. Вторым действием обнуляются разрешения на прежних адресах. Третьим — пересобирается наблюдение, уже на новые адреса. Разбор причин идёт последним, когда терять нечего.

Мультиподписная схема меняет расклад: одна утёкшая подпись не открывает хранилище, и у владельца появляется время на реакцию. Что при этом видит участник схемы и какие сведения раскрывает расширенный ключ, мы описывали в разборе о том, как устроен расширенный публичный ключ в мультиподписи.

Чек-лист

  • Наблюдение охватывает все адреса контура, а не только основной кошелёк.
  • Подписка включает события выдачи и изменения разрешений.
  • Порог по сумме для исходящих событий снят полностью.
  • Получатель оповещений — аппарат, не участвовавший в подозрительном взаимодействии.
  • Список действующих разрешений пройден, лишние обнулены.
  • Активы переведены на адрес, для которого не существует подписанных сообщений permit.
  • Время доставки сообщения замерено и записано.

Материалы по теме:

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

Активы на месте, но я подписал что-то странное. Это инцидент?

Считайте, что да. Подпись могла выдать право расходования, а не выполнить перевод, и тогда баланс остаётся прежним до удобного нападающему момента. Проверьте список действующих разрешений, обнулите лишние и, если подпись могла оказаться внецепочечной, переведите активы на свежий адрес, для которого никаких прав никому не выдавалось.

Почему оповещения не видят подпись permit?

Потому что такая подпись не создаёт записи в цепочке. Она существует как сообщение у получателя и становится видимой лишь в момент предъявления контракту. Наблюдение работает по событиям блокчейна, поэтому внецепочечное разрешение для него невидимо — отсюда правило считать его выданным и переводить активы.

Нужно ли снимать порог по сумме после инцидента?

Для исходящих событий — да, полностью. Вывод частями ниже порога — приём, который применяют именно против настроенных фильтров. Для входящих поступлений порог стоит оставить: мелкие зачисления от незнакомых адресов создают фон, в котором теряются сообщения о настоящем расходе.

Сколько адресов включать в наблюдение?

Все, где есть остатки или открытые позиции, включая адреса для получения сдачи. Удобный способ — отдать службе дескриптор кошелька: он описывает дерево адресов целиком, а не отдельную его точку. Отдельно перечисляются адреса в приложениях, если они не входят в то же дерево.

Вердикт

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

Первоисточники проверяются за пять минут: описание выдачи прав в стандарте ERC-20 и механика внецепочечных подписей в расширении ERC-2612.

Разборы инцидентов и настройки наблюдения выходят в Telegram-канале Cryptium.