Статья 6 из 125 мин чтения

Что показывает телефон: анализ транзакций на устройстве подписи

Большинство краж из кошельков происходит с согласия владельца. Страница показывает одно, кошелёк подписывает другое, а владелец нажал Confirm («Подтвердить»). Задача телефона — чтобы вы подписывали ровно то, что видите.

Телефон декодирует безлимитное разрешение на списание (allowance) неизвестному получателю (spender); два предупреждения вынесены выносками, а маленькая карточка показывает, что страница написала только Swap
Запрос таким, какой он есть, а не каким его описала страница.
Содержание

Заявление и правда

Когда веб-страница просит вас что-то подписать, она заодно сообщает, что это. «Обменять 1 ETH на USDC». «Заберите награду». «Подтвердите кошелёк». Это описание — заявление страницы, а вредоносная страница может заявить что угодно. Байты, которые она передаёт кошельку, — отдельная вещь, и только их когда-либо увидит блокчейн.

AirNox Vault заявления игнорирует. Он декодирует запрос из тех самых байтов, которые собирается подписать, прямо на телефоне, своим парсером, и показывает вам результат. То, что говорит о запросе компьютер, — заявление. То, что показывает телефон, — правда.

Слева страница пишет Swap 1 ETH to USDC; справа телефон декодирует безлимитное разрешение на списание неизвестному получателю
Один запрос, два описания. Из байтов взято только одно.

Стандартные методы распознаются

Большая часть того, что вы подписываете, — обычные вещи. Перевод. Разрешение на списание токена (approve). Своп через известный роутер. Депозит в контракт. Телефон распознаёт стандартные операции каждого поддерживаемого семейства сетей и показывает их простыми словами: что за операция, какой токен, сколько, кому, в какой сети и каков потолок комиссии. Перевод выглядит как перевод. Разрешение на списание выглядит как разрешение, с явно указанными получателем и суммой.

Двойники помечаются

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

Каждый такой случай распознаётся и превращается в предупреждение. Телефон не отказывается подписывать, потому что решение за вами. Он лишь делает так, чтобы вы не могли пропустить предупреждение.

Шесть предупреждений: безлимитное разрешение, неизвестный получатель разрешения, метод-двойник, токен с поддельным тикером, получатель-двойник, скрытое делегирование
Предупреждения, которые телефон выдаёт, прежде чем позволить вам принять запрос.

Предупреждения

Безлимитное разрешение на списание — классический приём дрейнера: одобрили один раз — и потом лишились всего, что у вас есть в этом токене. Телефон пишет красным «unlimited» (без лимита) и считает это предупреждением.

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

Метод-двойник, поддельный тикер токена, получатель-двойник и скрытое делегирование телефон называет прямо, у каждого предупреждения своё имя. Для получателей и компьютер, и телефон показывают детерминированную картинку адреса, поэтому двойник, который обманет глаз в hex-записи, на картинке его не обманет.

Сначала отметить, потом Accept

Предупреждение — не всплывающее окно, которое можно закрыть на автомате. Кнопка Accept («Принять») остаётся неактивной, пока не отмечено каждое предупреждение. Отклонить запрос можно в любой момент. Принять — только после того, как вы отметили всё, что нашёл телефон. Одно это решение превращает «я прокликал» в «я прочитал и решил продолжить», а это и есть разница между опустошённым кошельком и осознанным решением.

Сначала проверяет компьютер

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

Читать по-прежнему вам

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

Вся серия

  1. Считайте, что компьютер скомпрометирован
  2. Mass Adoption Security: подписывает телефон, который у вас уже есть
  3. Три пути через зазор: QR-коды, Bluetooth LE и NFC
  4. Невидимый в эфире: устройство подписи, которое не найти сканером
  5. Никакого доверия транспорту
  6. Что показывает телефон: анализ транзакций на устройстве подписи
  7. Телефон ведёт собственный журнал
  8. Хранилище на вашем компьютере: Argon2id и профиль, устойчивый к подбору пароля
  9. dApp без кошелька в браузере
  10. MCP-сервер с правилами: ИИ-агенты в рамках лимитов
  11. Один защищённый кошелёк для всего
  12. Компактный и нативный: C++ без среды выполнения JavaScript, от рабочей станции до Raspberry Pi

Запишитесь в лист ожидания

Оставьте почту, и мы пришлём новости о релизе. Больше ничего.